Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > 技术类

[转]SendMessage函数的常用消息及其应用3

时 间:2008-12-03 08:20:11
作 者:andymark   ID:1350  城市:深圳
摘 要:SendMessage函数的常用消息及其应用
正 文:

5.为ListBox添加水平滚动条
   在VB中,列表框控件仅提供垂直滚动条,没有设置水平滚动条的能力,当某些项目的文本宽度较长
时,超出列表框宽度部分的文本就无法显示出来,因此,很有必要为ListBox添加一个水平滚动条来方
便操作。
   为添加水平滚动条,只需发一条 LB_SETHORIZONTALEXTENT(&H194) 消息给列表框即可。发送消息
时,wParam为滚动条的长度(以像素为单位,可通过计算得出准确的长度,上面例2 就是如此的,也可
随便给一个数字,如本例的 250),lParam无用。代码如下(已试验成功):

Declare Function SendMessage Lib "user32" Alias "SendMessageA"(ByVal hwnd As Long, _
  ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long

Public Const LB_FINDSTRING=&H18F
Public Const LB_SETHORIZONTALEXTENT=&H194

Private Sub Form_Load()
List1.AddItem "软件"
List1.AddItem "电脑游戏"
List1.AddItem "电视机"
List1.AddItem "电视台"
List1.AddItem "电脑"
List1.AddItem "电脑游戏软件"
SendMessage List1.hwnd,&H194,250,0 '为列表框添加水平滚动条
End Sub

Private Sub Text1_Change()
'注意!当lParam传入的是字符串时,必须用ByVal传递
List1.ListIndex = SendMessage(List1.hwnd,LB_FINDSTRING,-1,ByVal Text1.Text)
End Sub

6.在API文本浏览器里,当我们在搜索栏输入任意字母,“可用项”里以该字母开头的项目以高亮显
示以引起我们注意该项是不是我们所需的。象这样的功能一切提供搜索选项的程序都应该具备。以下例
子采用SendMessage函数实现这一技术。

Const LB_FINDSTRING = &H18F

Private Sub Form_Load()
Dim i As Integer
For i = Asc("A") To Asc("Z") '给列表框添加26个字母(大写)
List1.AddItem Chr$(i)
Next
Text1 = "" '令文本框为空
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
Text1 = "" '按下任意键则令原内容消失
Text1.SelLength = 1 '限制长度
Text1.SelText = Chr(KeyAscii) '显示键盘符号
KeyAscii = 0 '禁止响应
'ListBox中的项目文本若与文本框的一致则选中(高亮)
List1.ListIndex = SendMessage(List1.hwnd, LB_FINDSTRING, -1, ByVal CStr(Text1.Text))'经试,不需CStr函数
End Sub

  以上程序适用于单项目为多个字母的查询,但必须注意,在TextBox的KeyPress事件中要作相应的
改动

SendMessage函数应用(二)
  介绍如何利用消息函数来扩展树型列表 TreeView 控件的功能。相信对于树型列表控件大家十分的
熟悉,典型的应用就是 Windows 资源管理器中的目录列表。而在VB中,树型列表控件包含在Microsoft
Windows Common Control 6.0(也可能是5.0,视你的VB或者系统版本而定)中。在Windows API 中,
有一系列的以 TVM_ 开头的消息值,这些消息就是扩展树型列表控件所特定的消息值,下面向大家介绍
其中的一些应用

1、设置树型列表控件的背景颜色
 首先做如下的定义:

Const TV_FIRST = &H1100
Const TVM_SETBKCOLOR = TV_FIRST + 29(4381)
  
  调用:
Call SendMessage(TreeView1.hwnd, 4381, 0,ByVal RGB(255, 0, 0))

  上面的SendMessage调用将TreeView1的背景颜色设置为红色。
  大家可能注意到了。在上面的 Sendmessage 函数定义中,我们将 lParam 定义为 ByVal lParam
As Long,而不是象前面的那些范例那样定义为 Any 或者 String 类型,关于这个问题,我会在最后的
一章中做介绍。

2、设置树型列表控件标题行高度
  TVM_SETITEMHEIGHT 消息设定控件的标题行的高度,该消息的定义及调用方法如下:

Const TV_FIRST = &H1100
Const TVM_SETITEMHEIGHT = TV_FIRST + 27

Call SendMessage(TreeView1.hwnd, TVM_SETITEMHEIGHT, 60, 0) '将TreeView1标题行高度设置到60像素高



Access软件网官方交流QQ群 (群号:54525238)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助