Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 
Dim lMsg As Single 
lMsg = X / Screen.TwipsPerPixelX ' ' ' ' '就是这个值我不明白,为什么鼠标的水平坐标值 / Screen.TwipsPerPixelX:每一像素中的缇数 就能判断是在托盘点了鼠标左键或是右键,,。麻烦,那位高人给我解答一下,万公感谢!!!! 
Select Case lMsg 
Case WM_LBUTTONUP 
'单击左键,显示窗体 
Form1.Show 

解决方案 »

  1.   

    关于托盘的实现
    我知道一个控件
    SysTray.ocx
      

  2.   

    你贴出来的代码有问题
    lMsg = X / Screen.TwipsPerPixelX  这是计算鼠标位置Select Case lMsg 
    Case WM_LBUTTONUP这个是什么呢?WM_LBUTTONUP 是一个Windows消息 ,lMsg 是鼠标位置,怎么能放在同一个CASE中?
      

  3.   

    Dim lMsg As Single 
    lMsg = X / Screen.TwipsPerPixelX ' '
    这段代码应该在拦截窗口函数中,而不是mouse事件里面
      

  4.   

    Call Shell_NotifyIcon(NIM_ADD, nfIconData)
    '以下在mousemove
    Dim lMsg As Single
       lMsg = x / Screen.TwipsPerPixelX
       Select Case lMsg
         Case WM_LBUTTONUP
           'MsgBox "请用鼠标右键点击图标!", vbInformation, "天倚之音"
           '单击左键,显示窗体
           ShowWindow Me.hWnd, SW_RESTORE
           '下面两句的目的是把窗口显示在窗口最顶层
           'Me.Show
           'Me.SetFocus
           '' Case WM_RBUTTONUP
            ''PopupMenu frmmnu.mnulstsong '如果是在系统Tray图标上点右键,则弹出菜单mnulstsong
           '' Case WM_MOUSEMOVE
           '' Case WM_LBUTTONDOWN
           '' Case WM_LBUTTONDBLCLK
           '' Case WM_RBUTTONDOWN
           '' Case WM_RBUTTONDBLCLK
           '' Case Else
       End Select
    所以看不懂
    lMsg = X / Screen.TwipsPerPixelX  这是计算鼠标位置 
      

  5.   

    这只是利用了图片框的窗体处理过程而已,省得自己去做子类化拦截消息了.lMsg = x / Screen.TwipsPerPixelX上面这句并非计算鼠标位置.......而是还原消息Public Function SubWndProc(ByVal Hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    以上是标准子类化过程的声明,其MSG参数与图片框消息X之间的关系正好是乘以Screen.TwipsPerPixelX......至于如何得到这个关系的,不知道.....这种用法至今我还没有注意到谁详细解释过....麻烦知道的朋友解释一下吧.
      

  6.   

    http://www.m5home.com/blog2/blogview.asp?logID=217&cateID=2我这个托盘类也是这种用法