mSysTray.bas
上传用户:davilee3
上传日期:2015-04-22
资源大小:986k
文件大小:4k
源码类别:

浏览器

开发平台:

Visual Basic

  1. Attribute VB_Name = "mSysTray"
  2. Option Explicit
  3. ''-------------------------------------------------------
  4. '' Api Declares....
  5. ''-------------------------------------------------------
  6. 'Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  7. 'Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
  8. 'Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  9. 'Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
  10. 'Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long)
  11. 'Public Declare Function DrawEdge Lib "user32" (ByVal hDC As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Boolean
  12. '
  13. ''-------------------------------------------------------
  14. '' Api Constants...
  15. ''-------------------------------------------------------
  16. 'Public Const GWL_USERDATA = (-21&)
  17. 'Public Const GWL_WNDPROC = (-4&)
  18. 'Public Const WM_USER = &H400&
  19. '
  20. 'Public Const TRAY_CALLBACK = (WM_USER + 101&)
  21. 'Public Const NIM_ADD = &H0&
  22. 'Public Const NIM_MODIFY = &H1&
  23. 'Public Const NIM_DELETE = &H2&
  24. 'Public Const NIF_MESSAGE = &H1&
  25. 'Public Const NIF_ICON = &H2&
  26. 'Public Const NIF_TIP = &H4&
  27. '
  28. 'Public Const WM_MOUSEMOVE = &H200&
  29. 'Public Const WM_LBUTTONDOWN = &H201&
  30. 'Public Const WM_LBUTTONUP = &H202&
  31. 'Public Const WM_LBUTTONDBLCLK = &H203&
  32. 'Public Const WM_RBUTTONDOWN = &H204&
  33. 'Public Const WM_RBUTTONUP = &H205&
  34. 'Public Const WM_RBUTTONDBLCLK = &H206&
  35. '
  36. ''DrawEdge constants
  37. 'Public Const BDR_RAISEDOUTER = &H1&
  38. 'Public Const BDR_RAISEDINNER = &H4&
  39. 'Public Const BF_LEFT = &H1&             ' Border flags
  40. 'Public Const BF_TOP = &H2&
  41. 'Public Const BF_RIGHT = &H4&
  42. 'Public Const BF_BOTTOM = &H8&
  43. 'Public Const BF_RECT = BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM
  44. 'Public Const BF_SOFT = &H1000&          ' For softer buttons
  45. '
  46. ''-------------------------------------------------------
  47. '' Api Types....
  48. ''-------------------------------------------------------
  49. 'Public Type NOTIFYICONDATA
  50. '    cbSize As Long
  51. '    hwnd As Long
  52. '    uID As Long
  53. '    uFlags As Long
  54. '    uCallbackMessage As Long
  55. '    hIcon As Long
  56. '    szTip As String * 64
  57. 'End Type
  58. 'Public Type RECT
  59. '    Left As Long
  60. '    Top As Long
  61. '    Right As Long
  62. '    Bottom As Long
  63. 'End Type
  64. Public PrevWndProc As Long
  65. '------------------------------------------------------------
  66. Public Function SubWndProc(ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  67. '------------------------------------------------------------
  68. ' This is the control subclassed window proc.
  69. '------------------------------------------------------------
  70.     Dim SysTray As cSysTray                         ' SysTray class variable
  71.     Dim ClassAddr As Long                           ' long pointer to class object
  72. '------------------------------------------------------------
  73.     Select Case MSG                                 ' Determine
  74.     Case TRAY_CALLBACK                              ' Callback message received when user clicks on system tray...
  75.         ' Retrieve long pointer to class object, this was saved in the _
  76.           USERDATA of the window struct. after the user control was subclassed...
  77.         ClassAddr = GetWindowLong(hwnd, GWL_USERDATA) ' get pointer to object
  78.         CopyMemory SysTray, ClassAddr, 4            ' Copy an unreferenced pointer to object into variable
  79.         
  80.         SysTray.SendEvent lParam, wParam            ' Send windows messageuser event to control
  81.         
  82.         CopyMemory SysTray, 0&, 4                   ' Nullify object pointer
  83.     End Select
  84.    
  85.     ' Forward all messages to previous window procedure...(This must be done)
  86.     SubWndProc = CallWindowProc(PrevWndProc, hwnd, MSG, wParam, lParam)
  87. '------------------------------------------------------------
  88. End Function
  89. '------------------------------------------------------------