📄 m60.htm
字号:
<html>
<head>
<title>VB教程</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<p align="center"><script src="../../1.js"></script></a>
<body bgcolor="#ffffff" leftmargin="5" topmargin="1" marginheight="5" marginwidth="5">
<div align=center>
<table border=0 cellpadding=0 cellspacing=0 width=680 align="center">
<tbody>
<tr>
<td bgcolor=#000000 height=9>
<div align=center class=H1> <font color="#FFFFFF">利用Win API函数扩展VB功能</font> </font> </font></div>
</td>
</tr>
<tr valign=top>
<td class=H1 height=76>
<p align="left"> <br>
</font> 当VB用户在编程过程中使用VB的列表框时,有时会碰到列表框中的字符串太长以至于在列表框中无法完整地显示它们。但是,由于VB5.0为列表框提供了ToolTipText属性和MouseMove事件,所以我们可以通过编程来动态地改变列表框的ToolTipText属性,使得当光标移动到列表框上的某一项上时弹出ToolTip显示该项的完整文本。但是当用户对MouseMove事件编程时,只能得到光标的点阵位置而无法知道光标处于列表框的第几项位置上。要想解决这个问题,只需要调用Win
API函数SendMessage向列表框发送LB_ITEMFROMPOINT消息,就可将光标所在的列表框的点阵位置转化为光标所在的项数位置。SendMessage定义如下:
</span></font></p>
<p> Private Declare Function
SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal
wMsg As Long, ByVal wParam As Long,lParam As Any) As Long </font></span>
<p> 为了获得项数位置,可将参数hwnd设置为列表框的hwnd,将参数wMsg设置为LB_ITEMFROMPOINT,将LB_IEMFROMPOINT定义为
“ Const LB_ITEMFROMPOINT = &H1A9”,将lParam设置为“光标Y坐标*65535+光标X坐标”(注意:这里,X和Y坐标均为像素值(PIXELS)而不是TWIPS)。
</font></span>
<p> 如果在ListBox的MouseMove
Event中加入这个函数调用,就可以获得当前的项数位置了。 </font></span>
<p> 下面具体介绍如何实现这个API调用: </font></span>
<p> 在Form1中加入一个列表框,将列表框的Name属性设置为List1。
</font></span>
<p> 1、在General的Declarations中加入以下代码:
</font></span>
<p> Option Explicit </font></span>
<p> '定义API函数 </font></span>
<p> Private Declare Function
SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long,_
</font></span>
<p> ByVal wMsg As Long,
ByVal_wParam As Long, lParam As Any) As Long </font></span>
<p> Private Const LB_ITEMFROMPOINT
= &H1A9 </font></span>
<p> 2、在Form1_Load中加入以下代码:
</font></span>
<p> Private Sub Form_Load()
</font></span>
<p> '在列表框中加入项目 </font></span>
<p> With List1 </font></span>
<p> .AddItem "陈锐 ChenReee@Netaddress.com"
</font></span>
<p> .AddItem "陈锐 Reee-Chen@Netaddress.com"
</font></span>
<p> .AddItem "陈锐 Chenrui@hotmail.com"
</font></span>
<p> End With </font></span>
<p> End Sub </font></span>
<p> 3、在List1_MouseMove中加入以下代码:
</font></span>
<p> Private Sub List1_MouseMove(Button
As Integer, Shift As Integer,X As Single, Y As Single) </font></span>
<p> '获得光标的确实位置并且显示ToolTips
</font></span>
<p> Dim lXPoint As Long
</font></span>
<p> Dim lYPoint As Long
</font></span>
<p> Dim lIndex As Long
</font></span>
<p> If Button = 0 Then
' 如果没有按钮被按下 </font></span>
<p> lXPoint = CLng(X /
Screen.TwipsPerPixelX) </font></span>
<p> lYPoint = CLng(Y /
Screen.TwipsPerPixelY) </font></span>
<p> With List1 </font></span>
<p> '获得当前的光标所在的屏幕位置确定标题位置
</font></span>
<p> lIndex = SendMessage(.hwnd,
LB_ITEMFROMPOINT, 0,ByVal ((lYPoint * 65536) + lXPoint)) </font></span>
<p> '显示提示行或清除提示行 </font></span>
<p> If (lIndex >= 0)
And (lIndex <= .ListCount) Then </font></span>
<p> '设置Tooltips为列表项的内容
</font></span>
<p> .ToolTipText = .List(lIndex)
</font></span>
<p> Else </font></span>
<p> .ToolTipText = "" </font></span>
<p> End If </font></span>
<p> End With </font></span>
<p> End If </font></span>
<p> End Sub </font></span>
<p> 运行该程序,当光标在列表框上移动时,弹出的ToolTip就会动态地显示出光标所在行的内容。该程序在Win
95、VB 5.0下运行通过。 </font></span>
<p> (长沙矿冶研究院312信箱 陈锐 410012)</font></span>
<p align="left"> <br>
</table>
</div>
<p align="center"><a href="../../pian/vb.htm">回首页</a>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -