欢迎来到天天文库
浏览记录
ID:12417792
大小:36.00 KB
页数:5页
时间:2018-07-17
《sendmessage函数巧应用1》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、SendMessage函数巧应用(一)作者:不详 来源于:中国VB网 发布时间:2005-5-21 在Windows编程中,向文本框控件、列表控件、按钮控件等是我们最常接触的控件了。但是在VB中这些控件有时无法实现我们的需要。在这时,我们只要简单的利用WindowsAPI函数就可以扩充这些控件的功能了。 顾名思义,SendMessage函数就是向窗口(这里的窗口指的是向按钮、列表框、编辑框等具有hWnd属性的控件)发送消息的函数,该函数的定义如下:DeclareFunctionSendMessageLib"user32"Alias"SendMessageA"_ (ByVa
2、lhwndAsLong,_ ByValwMsgAsLong,_ ByValwParamAsLong,_ lParamAsAny)AsLong其中hwnd指定接受消息的窗口,参数wMsg指定消息值,参数wParamlParam分别定义传递到窗口的附加参数。而在Windows系统的很多消息中,有一些不仅仅是提供一个窗口消息那么简单。它们可以控制窗口的动作和属性。下面我将分次向向大家介绍SendMessage函数在扩充基本控件功能方面的应用。一、列表(ListBox)控件 在Windows中,有一系列的以LB_开头的列表消息,这里介绍的就是利用LB消息控制的
3、ListBox的应用1、使列表中光标移动到不同的列表项上有不同的提示(ToolTip) 在列表框控件中有一个ToolTipText属性,该属性决定了当光标在列表框上移动时出现的提示文字。但是如何使得当光标在不同的列表项上移动时的提示文字也不同呢?问题的关键是要知道在光标移动时光标所在的列表项的索引,使用SendMessage函数发送LB_ITEMFROMPOINT消息就可以获得。下面是程序范例:OptionExplicitConstLB_ITEMFROMPOINT=&H1A9PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMes
4、sageA"_ (ByValhwndAsLong,_ ByValwMsgAsLong,_ ByValwParamAsLong,_ lParamAsAny)AsLongPrivateSubForm_Load() Dimi Fori=1To200 List1.AddItemStr(i)+"Samplesinthislistis"+Str(i) NextiEndSubPrivateSubList1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
5、 DimlXPointAsLong DimlYPointAsLong DimlIndexAsLong IfButton=0Then '确定在移动鼠标的同时没有按下功能键或者鼠标键 '获得光标的位置,以像素为单位 lXPoint=CLng(X/Screen.TwipsPerPixelX) lYPoint=CLng(Y/Screen.TwipsPerPixelY) ' WithList1 '获得光标所在的标题行的索引 lIndex=SendMessage(.hwnd,LB_ITEMF
6、ROMPOINT,0,_ ByVal((lYPoint*65536)+lXPoint)) '将ListBox的Tooltip设置为该标题行的文本 If(lIndex>=0)And(lIndex<=.ListCount)Then .ToolTipText=.List(lIndex)'Returnthetext=.list(lIndex) Else .ToolTipText="" EndIf EndWith EndIf
7、EndSub 首先在Form1中加入一个ListBox控件,然后再将上面的代码加入到Form1的代码窗口中。运行程序,当光标在列表中移动时,可以看到根据光标所在的不同的列表项,提示文字也不相同。2、向列表中加入横向滚动条使得可以浏览长列表项 当向列表中加入的列表项超出了列表的显示范围后,列表并不会出现横向滚动条让你可以通过滚动来浏览项目的全部内容。利用LB_SETHORIZONTALEXTENT消息可
此文档下载收益归作者所有