网站大量收购独家精品文档,联系QQ:2885784924

VB SendMessage 函数参数详解.doc

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VB SendMessage 函数参数详解

VB SendMessage 函数参数详解 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 函数。对于字符串类型,则需要定义 Byval lParam As String,因为字符串类型数据不同,只有定义 ByVal,得到的才是字符串的指针,如果没有ByVal,得到的将是指向字符串指针的指针。另外对于少数的消息来说,SendMessage 函数需要的只是lParam 本身的值,这时就需要将 lParam定义为 Byval lParam As Long,或者在程序调用时在 lParam之前加 ByVal   当用户在编辑控件上进行各种操作时,其父窗口将收到 WM_

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档