ImageVerifierCode 换一换
格式:DOCX , 页数:55 ,大小:66.96KB ,
资源ID:11570153      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11570153.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VBSendMessage函数参数详解docx.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VBSendMessage函数参数详解docx.docx

1、VBSendMessage函数参数详解docxVB SendMessage函数参数详解Sen dMessage函数原形Declare Function SendMessage Lib user32 Alias ,SendMessageA, (By Vai hwnd As Long, By Vai wMsg As Long, By Vai wParam As Long, IParam As Any) As Long四个参数的含义和说明如下:1. hWnd:对象的句柄。希望将消息传送给哪个对彖,就把该对彖的句柄作为实参传送,在VB中可以简单-地用 “对象.hWnd”获得某个对象的句柄,如Textl

2、.hWnd和Forml.hWnd分别可以得到Text 1和Forml的句柄。 它是一个长整型数。Windows给每个控件一个编号,这个编号就称为窗口句柄。冇了这个句柄,我们就可 告诉Windows我们耍控制哪个控件,所以这个句柄在API调用中至关重耍。VB的人多数控件都包括 hwnd屈性,如下拉框、TreeView等,窗体也有这个屈性。但也有一些控件没有这个属性,如标签控件。没 有这个属性就无法利用Windows API函数,但可以节省系统资源。2. wMsg:被发送的消息。根据具体需求和不同的对象,将不同的消息作为实参传送,以产生预期的动作。使 SendMessage传递消息,大多是为了完成

3、以下几个工作:1 设置控件的一些选项,彖我们要使用的CB_SETDROPPEDWIDTH的就展于这种情况。尽管VB的每个 控件都提供了许多属性,但仍然有许多控件的选项没有包括在其中。而这些选项中的大多数都可以利用该 函数进行设置2 获得控件的一些设置。同上一种惜况相反,冇时我们需要获得控件的一些设置,相当于读取属性。 例如,如果想知道一个下拉框的下拉部分的宽度是多少,就可以向控件发送CB_GETDROPPEDWIDTH消息。 对于这种情况,SendMessage萌数的返冋值就是结果。3 执行一定的操作。例如,我们要在下拉框中寻找是否有“ABC”这个字符串,当然,我们可以编写 一个循环,逐条比较

4、看是否存在这样的字符串。如果使用API,我们只需要向下拉框发送CB_FINDSTRING 消息,这条消息就会自动进行查找工作并返回结果。4 模拟用户操作。我们冇时希望模拟用户的操作,比如关闭其他应用程序的窗口。其实只耍我们能知 道那个窗口的句柄,我们就可以发送WM.CLOSE消息给那个窗口,窗口接受到这条消息就会关闭,如同用 户关闭窗口一样3. wParam 4Param:附加的消息信息。这两个是可选的参数,用來捉供关于wMsg消息更多的信息,不同的wMsg可能使 用这两个参数中的0、1或2个,如果不需要哪个附加参数,则将实参赋为NULL (在VB中赋为0)。IParam 定义为Any类型。指

5、定Any类型可禁止VB进行类型检査,从而允许将任意数据类型传递给该过程。由于 每条消息対参数的类型和传递方式的要求都不同:有的可能要求为Long型,有的可能要求为自定义类型; 大多数要求按传值方式传递,但也有一些要求按传地址方式。为了满足各种要求,我们将这个参数定义为 Any类型。比如,我们要传递一个Long型变量IData。如果消息要求传地址方式传递,可以使用: SendMessage , I Data而如果要求传值方式传递,则使用SendMessage , By Vai I Data如果传递常数,我们则需要使用类型后缀来指定常数的类型,比如”0&爲表示Long型的常数0,如 SendMes

6、sage By Vai 0&我们也可以使用类型转换函数CLng将常数指定为Long型,如CLng(O)。程序中,有时定义IParam As Any,有时定义By Vai IParam As String.,这是为什么呢对于SendMessage函数,IParam的使用是很灵活的,在一般情况下,IParam是一个指针,它指向的数据类型有 三种:长整形、口定义数据结构类型、字符串类型。对于前两种类型,需要将IParam定义为IParamAsAny, 从而将IParam数据的指针传递到SendMessage函数。对于字符串类型,则需要定义Byval I Pa ram As String,因为字符串类

7、型数据不同,只有定义ByVai,得到的才是字符串的指针,如果没有ByVai,得到的将 是指向字符串指针的指针。另外对于少数的消息來说,SendMessage函数需要的只是IParam本身的值,这 时就需要将IParam定义为Byval IParam As Long,或者在程序调用时在IParam之前加By Vai当用户在编辑控件上进行各种操作时,共父窗口将收到WM_COMMAND通知消息,IParam带控件句 柄(hWnd),同时wParam的低16位带控件的ID,高16位带有如下表的消息代码: 常用编辑控件消息:EC_LEFTMARGIN(&H1) EC_USEFONTINF 设置左边距时使

8、用EC_RIGHTMARGIN EC_USEFONTINF 设置右边距时使用EC_USEFONTINF,O,边距设置编辑控件的左、右边距,当wParam含EC_LEFTMARGIN时在IParam的低16位 指定左边距点数,当wParam含EC_RIGHTMARGIN时在IParam的高16位指定右边距点数。当指定wParam 为EC_USEFONTINFO吋,则用当前字体的字符“A“的宽度指定右边距和字符“C”的宽度指定左边距IParam被 忽略。EM_CHARFROMPOS(&HD7=215)A取得编辑控件屮指定位置的字符相对于文本头部的偏移量。使川本操作 应先在第4个参数的高16位指定行

9、号,低16位指定列号(或一个POINTAPI结构),行列是按编辑控件的客 户区左上角为原点(0,0)计算的。如果指定的位置超出控件客户区则返冋1EM_CANUNDO(&HC6=198)A0 决定前一次编辑操作是否能够撤消:检测控件撤消缓冲区是否为空,通常 控件把故后一次在控件的编辑操作保存在一个撤消缓冲区,如果缓冲区非空则返回TRUE表示上次操作可 以撤消,否则返回FALSE,应用程序可以利用该返回值來禁止或允许菜单或工具条的“撤消“项。EM_EMPTYUNDOBUFFER(&HCD=205 ),0,0消除控件的撤消缓冲区,使其不能撤消前-次编辑操作 EM_FMTLINES(&HC8=200)

10、 决定是否在取冋的文本宇串中包含软冋车字符EM_GETFIRSTVISIBLEINE(&HCE=206),0z0获得文木控件中处f可见位置的最顶部的文木所在的行号 EM_GETLINE(&HC4=196 ),行号,ByVai变量获取编辑控件某一行的内容,变量须预先赋空格 EM_GETLINECOUNT(&HBA=186,0/0获取编辑控件的总行数EM_GETMODIFY(&HB8=184)zO,0判断编辑控件的内容是否己发生变化,返回TRUE则控件文本己被修改, 返冋FALSE则未变。EM_GETPASSWORDCHAR( ),0,0 获取编辑控件的密码字符,返回NULL表示没有字符 EM_G

11、ETRECT(&HB2=178),0,结构 获取编辑控件的格式化矩形EM_GETTHUMB(&HBE=190)A0取得多行文木编辑控件的滚动框的当前位置(注惫:是象素值) EM_GETSEL(&HB0=176)/0,变屋获取光标位置(以字节数表示),或:(缓冲区起点,缓冲区终点)取得编辑控件中 选定内容的范围,返回值中低16位为起点,高16位为终点EM_GETHANDLE(&HBD=189),0,0 取得文木缓冲区EM_GETWORDBREAKPROC(&HD1=209)Z0,0 取得整字换行回调两数 EditWordBreakProc 指针 EM_GETLIMITTEXT(WM_USER+3

12、7=1061),0/0获取一个编辑控件屮文本的最大长度EM_GETMARGINS( ),0,0获取编辑控件的左、右边距,返回值低16位为左边距,高16位为右边距(不得用于 NT3. 51)EM_LMTTEXT(&HC5“97),最大值,0设置编辑控件中的文木长度EM_SCROLLCARET(&HB7=183),0,0把可见范用移至光标处EM_LINEFROMCHAR(&HC9=201)Z偏移值,0获取指定位置(或:-1,0表示光标位置)所在的行号 EM_LINEINDEX(&HBB=187L行号,0获取指定行(或:-1,0表示光标所在行)首字符在文木中的位置(以字节数表 示)EM_UNELEN

13、GTH(&hCl=193),偏移值,0获取指定位置所在行(或,0表示光标所在行)的文本长度(以字节数表示)EM_POSFROMCHARPOINT,结构地址,偏移值取得指定字符位置的行列号,偏移值是字符相对于文本头部的 偏移。EM_LINESCROLL(&HB6=182),列数,行数指定行数的文木水平滚动,每次滚动N列EM_EXGETSEL (&H434 = 1076)EM_EXSETSEL(&H437=1079)/0/结构RichEdit控件设置文本选定范围,参阅EM_SETSEL消息,结构是指 CHARRANGE 结构EM_PASTESPECIAL(&H440=1088)/2(l),l Ri

14、chEdit 控件粘贴剪贴板中的位图(或文本) EM_FINDTEXT(&H738=1080) RichEdit 控件正文搜索操作EM_FINDTEXTEX(&H44F=1103)同上EM_SETTEXTEX(&H461=1121) RichEdit 控件正文替换/插入操作EM_SETTARGETDEVICE, GetDC(RichText.hWnd), RichText.Width / 15)设置 RichTextBox 口动换行,后续代码是: RichText.RightMargin = iif(RichText.RightMargin = 0,1,0)EM_SETTARGETDEVICE

15、, 0,1 设置 RichTextBox 不自动换行EM_POSFROMCHAR(&HD6或&H426)判断指定字符在编辑控件的位置(用于NT3. 51) EM_SCROLL(&HB5=181),*,0文本垂直滚动。第三个参数*控制滚动方向:SB_LINEDOWN(1)向下滚动一行, SB_UNEUP(0)向上滚动一行,SB_PAGEDOWN向下滚动一页,SB_PAGEUP向上滚动一页。EM_REPLACESEL(&HC2=194),l(0)z字符串用指定字符串替换编辑控件中的当前选定内容,如果第三个参数 wParam为1,则本次操作允许撤消,0禁止撤消。字符审可用传值方式,也可用传址方式(例

16、:SendMessage Textl.hwnd, EM_REPLACESEL, 0, Text2.Text 这是传值方式)EM_SETSEL(&HB1=177),起点,终点设置编辑控件屮文本选定内容范围(或设置光标位置),该范囤被反相显 示,用于为复制、替换、粘贴、剪切、删除等编辑功能指定范围,光标将被移至指定的终点后面。还可使 用指定相同起点和终点来移动光标而不是选定范围。当指定的起点等于0和终点等于1时,文本全部被选 中,此法常用在清空编辑控件。当指定的起点等于2和终点等于时,全文均不选,光标移至文本未端, 此法常用在文本未端追加内容。注意:当控件没有输入焦点时,本操作将会失败,一般在执行

17、本操作前都 应调用SetFocus先取得输入焦点。EM_UNDO(&HC7J99),0,0撤消前一次编辑操作,当重复发送木消息,控件将在撤消和恢复中來回切换 EM_SETCHARFORMAT(&H444)改变选定文本的颜色EM_SETHANDLE (&HBO188),缓冲区指针,0为编辑控件指定新的文木缓冲区。此操作仅适用对话框创建带 DS_LOCALEDIT风格的控件。EM_SETLIMITTEXT,t度(字节),0设置编辑控件屮的文本最大长度(不得用于NT3. 51) EM_SETMARGINS(&HD3=211)设置编辑控件的左、右边距(不得用于NT3. 51) EM_SETMODIFY

18、(&HB9=185)4(OLO设置或淸除-个编辑控件的修改标志 EM_SETPASSWORDCHAR(&HCC=204)Z字符,0指定控件用來显示密码的字符,缺省为”初。当第三个参数 wParam为0时,本操作将清除控件的ES_PASSWORD风格,并按实际字符显示。EM_SETREADONLY(&HCF=207),1(0)/0决定是否将编辑控件设为只读,同时决定控件的ES_READONLY风格 EM_SETRECT(&HB3=179)/0(或RECT),结构地址为一个编辑控件设置格式化矩形EM_SETRECTNP(&HB4=180)z0(或RECT),结构地址为一个编辑控件设置格式化矩形,只

19、是控件此时不会重画 EN_CHANGE(&H300=768)编辑控件的内容发生改变。与EN_UPDATE不同,该消息是在编辑框显示的正文被 刷新后才发出的。EN_ERRSPACE(&H500=1280)任何时候只要由于内存不足以完成一项编辑操作EN_HSCROLL(&H601=1537)用户单击了编辑控件的水平滚动条。注意:这条消息是在控件更新显示之前发 送出去的。EN_VSCROLL(&H602=1538)用户单-击了编辑控件的乖直滚动条。注意:这条消息是在控件更新显示之前发 送出去的。EN_KILLFOCUS(&H200=512)编辑控件失去了输入焦点EN_SETFOCUS(&H100=2

20、56)编辑控件获得了输入焦点EN_UPDATE(&H400=1024)控件准备显示改变了的正文时发送该消息。它与EN_CHANGE通知消息相似,只 是它发生于更新文本显示出来Z前。EN_MAXTEXT(&H501=1281)用户输人的文字数超出由EM_LIMITTEXT消息规定的界限,或超出由VB Maxlength属性规定的界限,就会发送这条消息。此外,倘若不允许口动进行水平滚动,同时插入点要超出 控件的宽度;或者不允许自动垂直滚动,同时插入点要超出控件的高度,那么也会触发这条消息。在没有 ES_AUTOHSCROLL或ES_AUTOVSCROLL的编辑框中,当正文超出了编辑框的边框吋也会发

21、出该消息。编辑风格消息:ES_MULTILINE 指定编辑控件能否进行多行文本编辑,若多行编辑器不指定ES_AUTOHSCROLL风格,则会 口动换行,用户每按一次Enter,在当前光标处输入一个回车换行符(ODh,OAh),文木增加一行。若不指定 ES_AUTOVSCROLL,则多行编辑器会在窗口中正文装满时发出警告声响。ES_LEFT文木显示居左ES_CENTER文本显示居中ES_RIGHT文本显示居右ES_LOWERCASE把用户输入的字母统统转换成小写字母ES_UPPERCASE把用户输入的字母统统转换成人写字母ES_OEMCONVERT把输入的文本从ANSI码转换成OEM码,然后乂转

22、换成ANSI码,H的是保证函数 AnsiToOem的正确调用。这在编辑框屮包含文件名时是很有用的。ES_AUTOHSCROLL (自动增加水平滚动条)当用户在行尾键入一个字符时,正文将自动向右滚动10个字符, 当用户按回车键时,正文总是滚向左边。ES_AUTOVSCROLL 当用户在最后一个可见行按回车键时,正文向上滚动一页。ES_NUMBER 只接收数码输入,其它字符输入-律无效。ES_NOHIDESEL(&H100=256)当编辑框失去输入焦点时,选中的文本将隐藏,正文中的选择保持不变。缺省 时正文中的选择将失效,当获得输入焦点后才又显示出來。ES_READONLY将编辑框设胃成只读的ES

23、_PASSWORD(&H20=32)使所有键入的字符都用”和来显示。ES_WANTRETURN使多行编辑器接收回车键输入并换彳亍。如果不指定该风格,按冋乍键会选择缺省的命令 按钮,这往往会导致对话框的关闭。列表框操作:LB_FINDSTRING(&H18F=399),-l/ByVal字串査找列表项的字符串,返回值=字符串所在的列表项的索引。J 表示从第0行开始查找,如果改为一个有效的列表项索引值,将从该行开始查找。LB_ITEMFROMPOINT(&H1A9=425)获取光标所在的列表项的索引 LB_SETHORIZONTALEXTENT(&H194=404),长度,0设置列表框的横向滚动条以

24、及滚动长度,长度为象索值 组合框操作:CB_SHOWDROPDOWN(&H14F),1(0),0 打开(关闭)组合框的列表TVM_SETBKCOLOR(&HHOO+29=4381)设置扩展树型列表控件的背景色(TVM开头的常数)常用窗口消息:WM_GETFONT(&H31=49)得到当前控件绘制文本的字体(的句柄)WM_GETTEXT(&HD=13)Z变量长度,变量取得窗体的标题,变量须预先赋空字串(chr(O),变量氏度二Len(变量) WM_SETTEXT(&HC=12),0?ByVal H字串”设置窗体的标题WM_NCLBUTTONDOWN(&HAl=161)/2/0在非客户区,即边框及

25、标题栏上(假如定义的是一个组件,则非客 户区包fS Form等)按下鼠标左键;WM_LBUTTONDOWN(&H201=513)Z2,0在客户区,也就是除边框及标题栏以外按下鼠标左键 WM_VSCROLL(&H115=277),&H10000*p+SB_THUMBPOSITION(&H4),0 同步滚动文本,p 是位置改变量 WM_PAINTWM_USER (&H400 = 1024)WM_CUT(&H300=768),0,0 剪切 WM_COPY(&H301=769)A0 复制WM_PASTE(&H302=770),0z0 粘贴WM_CLEAR(&H303=771)z0,0 删除WM_UND

26、O(&H304=772),0,0 撤消按纽消息:BM_SETSTYLE(&HF4)设置按纽样式BS_RADIOBUTTON(&H4)收音机旋纽式的按纽,是BM_SETSTYLE使用的参数 SendMessage 隊|数应用(一)在Windows系统的很多消息中,有-些不仅仅是提供-个窗口消息那么简单。它们可以控制窗口的 动作和属性。下面向大家介绍SendMessage函数在扩充列表(ListBox)控件功能方面的应用。在Windows中,冇一系列的以LB_开头的列表消息,这里介绍的就是利用LB消息控制的ListBox 的应用1使列表中光标移动到不同的列表项上有不同的提示(ToolTip)在列表

27、框控件中有一个ToolTipText属性,该属性决定了当光标在列表框上移动时出现的提示文 字。但是如何使得当光标在不同的列表项上移动时的提示文字也不同呢问题的关键是要知道在光标移 动时光标所在的列表项的索引,使用SendMessage函数发送LBJTEMFROMPOINT消息就可以获得。在Forml中加入一个ListBox控件,运行程序,当光标在列表中移动时,可以看到根据光标所在 的不同的列表项,提示文字也不相同。代码如下(我己试验成功):Const LB_ITEMFROMPOINT = &H1A9Private Sub Form_Load()Dim ZXS As LongDrivel.Dri

28、ve = G: Dirl.Path = ”G:江秋水的文档”Combol.Text = Combol.List(O)ZXS = SendMessage(Textl.hwnd86, 0, 0)Labell.Caption =共 “&ZXS&” 行,& Len(Text 1.Text) &字”For i = 1 To 200: Listl.Additem str(i) + n 列表框试验项 U : NextEnd SubPrivate Sub Listl_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)

29、Dim IXPoint As Long, lYPoint As Long, llndex As LongIf Button = 0 Then,确定在移动鼠标的同时没有按卞功能键或者鼠标键IXPoint = CLng(x / Screen.TwipsPerPixelX)获得光标的位置,以像素为单位lYPoint = CLngfy / Screen.TwipsPerPixelY)With Listlllndex = SendMessage(.hwnd, LBTEMFROMPOINT, 0, ByVai (lYPoint * 65536) + IXPoint)1 获得光标所在的标题 行的索引If l

30、lndex 丄istCount Then .TooltipText = .List(llndex) Else .TooltipText = ,M,End WithEnd IfEnd Sub2向列表中加入横向滚动条使得可以浏览长列表项当向列表中加入的列表项超出了列表的显示范围后,列衣并不会出现横向滚动条让你可以通过滚动来 浏览项H的全部内容。利用LB_SETHORIZONTALEXTENT消息可以设置列表框的横向滚动条以及滚动长度。在Forml中加入一个ListBox控件,运行程序,可以看到列表中出现了横向滚动条,而且滚动范围正 好是列表项的长度代码如下(我己试验成功):Option Expli

31、citPrivate Type RECTLeft As LongTop As LongRight As Longbottom As LongEnd TypePrivate Declare Function DrawText Lib user32 Alias DrawTextA11 (ByVai hDC As Long, _By Vai IpStr As String, By Vai nCount As Long, IpRect As RECT, By Vai wFormat As Long) As LongPrivate Declare Function SendMessage Lib use

32、r32H Alias SendMessageA11 (ByVai hwnd As Long, _By Vai wMsg As Long, By Vai wParam As Long, IParam As Any) As LongConst LB_SETHORIZONTALEXTENT = &H194Const DTJZALCRECT = &H400Public Function ListTextWidth(ByRef IstThis As ListBox) As Long 获取最上项 U 的象素上度值Dim i As LongDim tR As RECTDim IW As LongDim IWidth As LongDim IHDCAs LongWith IstThis.Parent.Font.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1