



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SendMessage函数巧应用(一) 作者:不详 来源于:中国VB网 发布时间:2005-5-21 在Windows编程中,向文本框控件、列表控件、按钮控件等是我们最常接触的控件了。但是在VB中这些控件有时无法实现我们的需要。在这时,我们只要简单的利用Windows API函数就可以扩充这些控件的功能了。 顾名思义,SendMessage函数就是向窗口(这里的窗口指的是向按钮、列表框、编辑框等具有hWnd属性的控件)发送消息的函数,该函数的定义如下:Declare Function SendMessage Lib user32 Alias SendMessageA _ (ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long其中hwnd指定接受消息的窗口,参数wMsg指定消息值,参数wParam lParam分别定义传递到窗口的附加参数。而在Windows系统的很多消息中,有一些不仅仅是提供一个窗口消息那么简单。它们可以控制窗口的动作和属性。下面我将分次向向大家介绍SendMessage函数在扩充基本控件功能方面的应用。一、列表(ListBox)控件 在Windows中,有一系列的以LB_开头的列表消息,这里介绍的就是利用LB消息控制的ListBox的应用1、使列表中光标移动到不同的列表项上有不同的提示(ToolTip) 在列表框控件中有一个ToolTipText属性,该属性决定了当光标在列表框上移动时出现的提示文字。但是如何使得当光标在不同的列表项上移动时的提示文字也不同呢?问题的关键是要知道在光标移动时光标所在的列表项的索引,使用SendMessage函数发送LB_ITEMFROMPOINT消息就可以获得。下面是程序范例:Option ExplicitConst LB_ITEMFROMPOINT = &H1A9Private Declare Function SendMessage Lib user32 Alias SendMessageA _ (ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As LongPrivate Sub Form_Load() Dim i For i = 1 To 200 List1.AddItem Str(i) + Samples in this list is + Str(i) Next iEnd SubPrivate Sub List1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim lXPoint As Long Dim lYPoint As Long Dim lIndex As Long If Button = 0 Then 确定在移动鼠标的同时没有按下功能键或者鼠标键 获得光标的位置,以像素为单位 lXPoint = CLng(X / Screen.TwipsPerPixelX) lYPoint = CLng(Y / Screen.TwipsPerPixelY) With List1 获得 光标所在的标题行的索引 lIndex = SendMessage(.hwnd, LB_ITEMFROMPOINT, 0, _ ByVal (lYPoint * 65536) + lXPoint) 将ListBox的Tooltip设置为该标题行的文本 If (lIndex = 0) And (lIndex lWidth) Then lWidth = lW End If Next i 返回最长列表项的长度(像素) ListTextWidth = lWidthEnd FunctionPrivate Sub Form_Load() Dim astr As String Dim i Dim l As Long l = List1.FontSize * 20 / Screen.TwipsPerPixelX For i = 1 To 10 astr = astr + 我们This is a very long item + Str(i) Next i List1.AddItem astr + aaa 加入一个很厂的列表项 l = ListTextWidth(List1) SendMessage List1.hwnd, LB_SETHORIZONTALEXTENT, l, 0End Sub 首先在Form1中加入一个ListBox控件,然后再将上面的代码加入到Form1的代码窗口中。运行程序,可以看到列表中出现了横向滚动条,而且滚动范围正好是列表项的长度。 3、使列表可以响应用户击键 有时我们需要列表根据用户的敲入字符串自动调整列表的ListIndex到最接近的列表项,就象VB中动态感应用户输入控件属性的编辑器一样。问题的关键是如何在列表中查找含有指定字符串的列表项,使用LB_FINDSTRING消息可以在列表中查找指定字符串。下面是范例:Private Declare Function SendMessageStr Lib user32 Alias SendMessageA _ (ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As String) As LongConst LB_FINDSTRING = &H18FDim astr As StringPrivate Sub Form_KeyPress(KeyAscii As Integer) Dim l As Long astr = astr + Chr(KeyAscii) l = SendMessageStr(List1.hwnd, LB_FINDSTRING, -1, astr) If l Then List1.ListIndex = l End IfEnd SubPrivate Sub Form_Load() 向List中加入列表项 For i = 65 To 85 For j = 65 To 85 List1.AddItem Chr(i) + Chr(j) Next j Next iEnd SubPrivate Sub List1_DblClick() 清除原来的查找字符串 astr = End SubPrivate Sub List1_KeyPress(KeyAscii As Integer) 如果按下的是字母键就将击键消息传递到Form1 If (KeyAscii = 65 And KeyAscii = 97 _ Or KeyAscii = 122) Then Ke
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025慢阻肺考试题库及答案
- 留学合作协议履约承诺书(9篇)
- 2025年事业单位化工类综合能力测试试卷(附答案与解析)
- 新解读《GB-T 39315.1-2020军民通 用资源 数据模型 第1部分:物资类 油品》
- 正心泰国际化市场分析-洞察与解读
- 三维空间索引模型-洞察与解读
- 进化速率测定方法-洞察与解读
- 2025国考大连证监计算机专业科目高分笔记
- 2025国考包头市海洋管理岗位行测预测卷及答案
- 运动鞋服智能配色算法-洞察与解读
- 2025年新版精二药品培训试题及答案
- 中国儿童呼吸道合胞病毒感染诊疗及预防指南解读 4
- 年产10万吨超细重质碳酸钙项目可行性实施报告
- 《寻找中国巴菲特》读书笔记思维导图PPT模板下载
- 员工再培训记录卡
- LY/T 2787-2017国家储备林改培技术规程
- 土木工程力学(本科)学前及自测1-8答案
- 部编版《道德与法治》五年级上册第4课《选举产生班委会》优秀课件
- 油泥模型制作过程课件
- AutoCAD批处理数字增减
- 卷烟制造工艺学课件-第十一章-滤棒成型工艺
评论
0/150
提交评论