关于系统托盘鼠标右键的问题
在编写系统托盘鼠标右键的代码里,看到别人这么写的
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error Resume Next
Dim Message As Long
Message = X / Screen.TwipsPerPixelX
'判断鼠标消息,执行不同的功能
Select Case Message
Case WM_LBUTTONDOWN
'点击拖盘
Case WM_RBUTTONUP
SetForegroundWindow Me.hWnd
'按右键弹出菜单
'PopupMenu mnuPopup
End Select
End Sub
结果是正确的,问题是我就不明白了
Dim Message As Long
Message = X / Screen.TwipsPerPixelX
这个为什么要这么写呢,到底是什么意思,麻烦知道的人给我讲一下,谢谢
[解决办法]
这是利用了窗体内部处理鼠标事件的那段代码
好处是省了自己去写一个子类化过程并挂在窗体上.....
至于为什么要除那个值,我也不明白.....可能实际的鼠标消息与VB鼠标事件这里面的消息之间有某种固定的联系吧.....
期待高手讲解一下,想学习.....
[解决办法]
nid.cbSize = Len(nid)
nid.hWnd = Me.hWnd
nid.uId = vbNull
nid.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
nid.uCallBackMessage = WM_MOUSEMOVE ' <======= 回调消息产生Form_MouseMove事件,然后就是像素计量单位的问题,VB把单位计量转换到Twip,而Screen.TwipsPerPixelX就是转换回来
nid.szTip = "测试 " & vbNullChar
nid.hIcon = Me.Icon
Shell_NotifyIcon NIM_ADD, nid