设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 6141|回复: 19
打印 上一主题 下一主题

SendMessage,ReleaseCapture两API函数求教

[复制链接]
跳转到指定楼层
1#
发表于 2002-10-26 17:37:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Trynew斑竹,以下为API32。CHM中对SendMessage,ReleaseCapture解释对照你的例子还是不明,请有空指点指点,谢谢

Declare Function SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
说明
调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。SendMessageBynum, SendMessageByString是该函数的“类型安全”声明形式
返回值
Long,由具体的消息决定
参数表
参数 类型及说明
hwnd Long,要接收消息的那个窗口的句柄
wMsg Long,消息的标识符
wParam Long,具体取决于消息
lParam Any,具体取决于消息

Declare Function ReleaseCapture Lib "user32" Alias "ReleaseCapture" () As Long
说明
为当前的应用程序释放鼠标捕获
返回值
Long,TRUE(非零)表示成功,零表示失败

你是这样使用的:
Const WM_SYSCOMMAND As Long = &H112
Const SC_MOVE_MOUSE As Long = &HF012&
'To Simulate the Caption Move
Private Declare Function apiReleaseCapture Lib "user32" _
  Alias "ReleaseCapture" () As Long

Private Declare Function SendMessage Lib "user32" _
  Alias "SendMessageA" _
  (ByVal hWnd As Long, _
  ByVal wMsg As Long, _
  ByVal wParam As Long, _
  lParam As Any) As Long

Private Sub BarTitle_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  apiReleaseCapture
  Call SendMessage(Me.Parent.hWnd, WM_SYSCOMMAND, SC_MOVE_MOUSE, 0)
End Sub

我的问题是:1.wMsg参数是不是可以自己乱取(消息的标识符 )?
            2.wParam ,lParam 两参数该如何赋值?
            3.能解释你对以上三个参数是如何赋值的吗?换句话就是为什么要
            wMsg=&H112,wParam=&HF012&,lParam=0

            4.ReleaseCapture在你的例子中起什么作用?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2002-10-27 00:45:00 | 只看该作者
请高手指点
3#
 楼主| 发表于 2002-10-27 07:08:00 | 只看该作者
很奇怪以上问题本人现在(网游了一天API)看来并非难却整整一天没人理!!!
常量定义查书
4#
发表于 2002-10-28 06:17:00 | 只看该作者
wMsg 是规定的常量,
后面两个参数要根据实际情况, 就是根据 WMSG 类型给出.
很遗憾的是没有找到详细资料
5#
 楼主| 发表于 2002-10-28 22:49:00 | 只看该作者
goodidea,谢谢你。以下还是不明?

在VB中常数是不是不用给出数值?比如:
Const WM_SYSCOMMAND As Long = &H112
Const SC_MOVE_MOUSE As Long = &HF012& 在vb中是不是多余的,也即vb就知道
WM_SYSCOMMAND = &H112
SC_MOVE_MOUSE = &HF012&  呢?
6#
发表于 2002-10-28 23:28:00 | 只看该作者
这两个好象功能体现不一样!理论上可以在声明一下,或程序前定义!
7#
发表于 2002-10-28 23:52:00 | 只看该作者
gony程序看的很仔细。其实Api函数我用的也不多,多数用在界面和窗口控制方面。上面那段程序就是抄来的。
ReleaseCapture在我的例子中可以省略,但我想如果其他地方用到GetCapture的话Release一下也没有坏处。
至于Api的常量,在Delphi中的Window.pas模块中有定义,不用重新定义,我都是在这个文件里查找Api的常量值。
VB或者Office的开发版有Api查看器可以查看Api参数的结构和常量(帮助里说的),可惜我没见过,不知那位用到过。

8#
 楼主| 发表于 2002-10-29 02:07:00 | 只看该作者
哇,原来如此。我还以为此问题问的是不是太低级了呢。呵呵

Trynew兄,可否将“在Delphi中的Window.pas模块中定义Api的常量值”上传给我。

谢谢

点击这里给我发消息

9#
发表于 2002-10-29 03:51:00 | 只看该作者
SC_MOVE_MOUSE = &HF012&

表示SC_MOVE_MOUSE为常量 &HF012 的地址[em26]

用来解决API调用的引用参数传递。[em26]

点击这里给我发消息

10#
发表于 2002-10-29 03:52:00 | 只看该作者
第一&H表示十六制数,第二个&表示地址引用[em26]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-2 18:27 , Processed in 0.125081 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表