文档详情

SendMessage 的各种参数.pdf

发布:2017-09-13约3.47万字共18页下载文档
文本预览下载声明
jjiiaannggxxiiaaoommaa111111的的专专栏栏 个个人人博博客客,,记记录录学学习习 SSeennddMMeessssaaggee 的的各各种种参参数数 类: 学习 windows编程 2013-10-23 21:33 38人阅读 评论 (0) 收藏 举报 SendMessage函数的常用消息及其应用 (有点长,希望能对大家有所帮助) 函数原型: Declare Function SendMessage Lib user32 Alias SendMessageA (ByVal hwnd As Long, _ ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 其中四个参数的含义和说明如下: 1.hWnd: 对象的句柄。希望将消息传送给哪个对象,就把该对象的句柄作为实参传送,在 VB 中可以简单地 用 “对象.hWnd”获得某个对象的句柄,如 Text1.hWnd和 Form1.hWnd 别可以得到 Text1和Form1的句 柄。它是一个长整型数。Windows给每个控件一个编号,这个编号就称为窗口句柄。有了这个句柄,我们 就可告诉 Windows 我们要控制哪个控件,所以这个句柄在 API 调用中至关重要。VB 的大多数控件都包 括hwnd属性,如下拉框、TreeView等,窗体也有这个属性。但也有一些控件没有这个属性,如标签控件。 没有这个属性就无法利用Windows API函数,但可以节省系统资源。 2.wMsg: 被发送的消息。根据具体需求和不同的对象,将不同的消息作为实参传送,以产生预期的动作。使 SendMessage 传递消息,大多是为了完成以下几个工作:  ①设置控件的一些选项,象我们要使用的CB_SETDROPPEDWIDTH的就属于这种情况。尽管VB的每个控 件都提供了许多属性,但仍然有许多控件的选项没有包括在其中。而这些选项中的大多数都可以利用该 函数进行设置。 ②获得控件的一些设置。同上一种情况相反,有时我们需要获得控件的一些设置,相当于读取属性。 例如,如果想知道一个下拉框的下拉部 的宽度是多少,就可以向控件发送CB_GETDROPPEDWIDTH消息。 对于这种情况,SendMessage函数的返回值就是结果。  ③执行一定的操作。例如,我们要在下拉框中寻找是否有 “ABC”这个字符串,当然,我们可以编写 一个循环,逐条比较看是否存在这样的字符串。如果使用API,我们只需要向下拉框发送CB_FINDSTRING 消息,这条消息就会 自动进行查找工作并返回结果。  ④模拟用户操作。我们有时希望模拟用户的操作,比如关闭其他应用程序的窗口。其实只要我们能知 道那个窗口的句柄,我们就可以发送WM_CLOSE消息给那个窗口,窗口接受到这条消息就会关闭,如同用户 关闭窗口一样。  3.wParam、4.lParam : 附加的消息信息。这两个是可选的参数,用来提供关于wMsg消息更多的信息,不同的wMsg可能使用这 两个参数中的0、1或2个,如果不需要哪个附加参数,则将实参赋为NULL (在VB中赋为0)。 lParam定义为Any类型。指定 Any类型可禁止VB进行类型检查,从而允许将任意数据类型传递给该过 程。由于每条消息对参数的类型和传递方式的要求都不同:有的可能要求为Long型,有的可能要求为自定 义类型;大多数要求按传值方式传递,但也有一些要求按传地址方式。为了满足各种要求,我们将这个参 数定义为Any类型。比如,我们要传递一个Long型变量lData。如果消息要求传地址方式传递,可以使用:  SendMessage ……, lData  而如果要求传值方式传递,则使用  SendMessage ……, ByVal lData  如果传递常数,我们则需要使用类型后缀来指定常数的类型,比如0,表示Long型的常数0,如  SendMessage ……, ByVal 0  我们也可以使用类型转换函数CLng将常数指定为Long型,如CLng(0)。 程序中,有时定义 lParam As Any,有时定义 ByVal lParam As String。这是为什么呢?对于 SendMessage函数,lParam的使用是很灵活的,在一般情况下,lParam是一个指针,它指向的数据类型 有三种:长整形、自定义数据结构类型、字符串类型。对于前两种类型,需要将 lParam定义为 lParam As Any,从而将 lParam 数据的指针传递到 SendMessage 函数。对于字
显示全部
相似文档