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

浏览器

开发平台:

Visual Basic

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "cSysTray"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
  15. Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
  16. Option Explicit
  17. '-------------------------------------------------------
  18. ' Control Property Globals...
  19. '-------------------------------------------------------
  20. Private gInTray As Boolean
  21. Private gTrayId As Long
  22. Private gTrayTip As String
  23. 'Private mvarpHwnd As Long
  24. Private gTrayIcon As StdPicture
  25. Private gAddedToTray As Boolean
  26. Private mvarpHwnd As Long
  27. Const MAX_SIZE = 510
  28. Private Const defInTray = False
  29. Private Const defTrayTip = "VB 5 - SysTray Control." & vbNullChar
  30. 'Private Const sInTray = "InTray"
  31. 'Private Const sTrayIcon = "TrayIcon"
  32. 'Private Const sTrayTip = "TrayTip"
  33. '-------------------------------------------------------
  34. ' Control Events...
  35. '-------------------------------------------------------
  36. Public Event MouseMove(id As Long)
  37. Public Event MouseDown(Button As Integer, id As Long)
  38. Public Event MouseUp(Button As Integer, id As Long)
  39. Public Event MouseDblClick(Button As Integer, id As Long)
  40. Public Property Let pHwnd(ByVal vData As Long)
  41. '向属性指派值时使用,位于赋值语句的左边。
  42. 'Syntax: X.pHwnd = 5
  43.     mvarpHwnd = vData
  44. End Property
  45. Public Property Get pHwnd() As Long
  46. '检索属性值时使用,位于赋值语句的右边。
  47. 'Syntax: Debug.Print X.pHwnd
  48.     pHwnd = mvarpHwnd
  49. End Property
  50. '-------------------------------------------------------
  51. Private Sub Class_Initialize()
  52. '-------------------------------------------------------
  53.     gInTray = defInTray                             ' Set global InTray defalt
  54.     gAddedToTray = False                            ' Set default state
  55.     gTrayId = 0                                     ' Set global TrayId default
  56. '    gTrayHwnd = hwnd                                ' Set and keep HWND of user control
  57. '-------------------------------------------------------
  58.     gTrayTip = defTrayTip
  59.     'InTray = defInTray                              ' Init InTray Property
  60.     'TrayTip = defTrayTip                            ' Init TrayTip Property
  61.     'Set TrayIcon = Picture                          ' Init TrayIcon property
  62. End Sub
  63. '-------------------------------------------------------
  64. '-------------------------------------------------------
  65. '-------------------------------------------------------
  66. Private Sub Class_Terminate()
  67. '-------------------------------------------------------
  68.     If InTray Then                      ' If TrayIcon is visible
  69.         InTray = False                  ' Cleanup and unplug it.
  70.     End If
  71. '-------------------------------------------------------
  72. End Sub
  73. '-------------------------------------------------------
  74. '-------------------------------------------------------
  75. Public Property Let TrayIcon(Icon As StdPicture)
  76. '-------------------------------------------------------
  77.     Dim Tray As NOTIFYICONDATA                          ' Notify Icon Data structure
  78.     Dim rc As Long                                      ' API return code
  79. '-------------------------------------------------------
  80.     If Not (Icon Is Nothing) Then                       ' If icon is valid...
  81.         If (Icon.Type = vbPicTypeIcon) Then             ' Use ONLY if it is an icon
  82.             If gAddedToTray Then                        ' Modify tray only if it is in use.
  83.                 Tray.uID = gTrayId                      ' Unique ID for each HWND and callback message.
  84.                 Tray.hwnd = mvarpHwnd                   ' HWND receiving messages.
  85.                 Tray.hIcon = Icon.handle                ' Tray icon.
  86.                 Tray.uFlags = NIF_ICON                  ' Set flags for valid data items
  87.                 Tray.cbSize = Len(Tray)                 ' Size of struct.
  88.                 
  89.                 rc = Shell_NotifyIcon(NIM_MODIFY, Tray) ' Send data to Sys Tray.
  90.             End If
  91.     
  92.             Set gTrayIcon = Icon                        ' Save Icon to global
  93.             'Set Picture = Icon                          ' Show user change in control as well(gratuitous)
  94. '            PropertyChanged sTrayIcon                   ' Notify control that property has changed.
  95.         End If
  96.     End If
  97. '-------------------------------------------------------
  98. End Property
  99. '-------------------------------------------------------
  100. '-------------------------------------------------------
  101. Public Property Get TrayIcon() As StdPicture
  102. '-------------------------------------------------------
  103.     Set TrayIcon = gTrayIcon                        ' Return Icon value
  104. '-------------------------------------------------------
  105. End Property
  106. '-------------------------------------------------------
  107. '-------------------------------------------------------
  108. Public Property Let TrayTip(Tip As String)
  109. '-------------------------------------------------------
  110.     Dim Tray As NOTIFYICONDATA                      ' Notify Icon Data structure
  111.     Dim rc As Long                                  ' API Return code
  112. '-------------------------------------------------------
  113.     If gAddedToTray Then                            ' if TrayIcon is in taskbar
  114.         Tray.uID = gTrayId                          ' Unique ID for each HWND and callback message.
  115.         Tray.hwnd = mvarpHwnd                       ' HWND receiving messages.
  116.         Tray.szTip = Tip & vbNullChar               ' Tray tool tip
  117.         Tray.uFlags = NIF_TIP                       ' Set flags for valid data items
  118.         Tray.cbSize = Len(Tray)                     ' Size of struct.
  119.         
  120.         rc = Shell_NotifyIcon(NIM_MODIFY, Tray)     ' Send data to Sys Tray.
  121.     End If
  122.     
  123.     gTrayTip = Tip                                  ' Save Tip
  124.     'PropertyChanged sTrayTip                        ' Notify control that property has changed
  125. '-------------------------------------------------------
  126. End Property
  127. '-------------------------------------------------------
  128. '-------------------------------------------------------
  129. Public Property Get TrayTip() As String
  130. '-------------------------------------------------------
  131.     TrayTip = gTrayTip                              ' Return Global Tip...
  132. '-------------------------------------------------------
  133. End Property
  134. '-------------------------------------------------------
  135. '-------------------------------------------------------
  136. Public Property Let InTray(Show As Boolean)
  137. '-------------------------------------------------------
  138. '    Dim ClassAddr As Long                           ' Address pointer to Control Instance
  139. '-------------------------------------------------------
  140.     If (Show <> gInTray) Then                       ' Modify ONLY if state is changing!
  141.         If Show Then                                ' If adding Icon to system tray...
  142. '            If Ambient.UserMode Then                ' If in RunMode and not in IDE...
  143.                  ' SubClass Controls window proc.
  144.                 PrevWndProc = SetWindowLong(mvarpHwnd, GWL_WNDPROC, AddressOf SubWndProc)
  145.                 
  146.                 ' Get address to user control object
  147.                 'CopyMemory ClassAddr, class, 4&
  148.                 
  149.                 ' Save address to the USERDATA of the control's window struct.
  150.                 ' this will be used to get an object refenence to the control
  151.                 ' from an HWND in the callback.
  152.                 SetWindowLong mvarpHwnd, GWL_USERDATA, ObjPtr(Me) 'ClassAddr
  153.                 
  154.                 AddIcon mvarpHwnd, gTrayId, TrayTip, TrayIcon ' Add TrayIcon to System Tray...
  155.                 gAddedToTray = True                 ' Save state of control used in teardown procedure
  156. '            End If
  157.         Else                                        ' If removing Icon from system tray
  158.             If gAddedToTray Then                    ' If Added to system tray then remove...
  159.                 DeleteIcon mvarpHwnd, gTrayId       ' Remove icon from system tray
  160.                 
  161.                 ' Un SubClass controls window proc.
  162.                 SetWindowLong mvarpHwnd, GWL_WNDPROC, PrevWndProc
  163.                 gAddedToTray = False                ' Maintain the state for teardown purposes
  164.             End If
  165.         End If
  166.         
  167.         gInTray = Show                              ' Update global variable
  168. '        PropertyChanged sInTray                     ' Notify control that property has changed
  169.     End If
  170. '-------------------------------------------------------
  171. End Property
  172. '-------------------------------------------------------
  173. '-------------------------------------------------------
  174. Public Property Get InTray() As Boolean
  175. '-------------------------------------------------------
  176.     InTray = gInTray                                ' Return global property
  177. '-------------------------------------------------------
  178. End Property
  179. '-------------------------------------------------------
  180. '-------------------------------------------------------
  181. Private Sub AddIcon(hwnd As Long, id As Long, Tip As String, Icon As StdPicture)
  182. '-------------------------------------------------------
  183.     Dim Tray As NOTIFYICONDATA                      ' Notify Icon Data structure
  184. '    Dim tFlags As Long                              ' Tray action flag
  185.     Dim rc As Long                                  ' API return code
  186. '-------------------------------------------------------
  187.     Tray.uID = id                                   ' Unique ID for each HWND and callback message.
  188.     Tray.hwnd = hwnd                                ' HWND receiving messages.
  189.     
  190.     If Not (Icon Is Nothing) Then                   ' Validate Icon picture
  191.         Tray.hIcon = Icon.handle                    ' Tray icon.
  192.         Tray.uFlags = Tray.uFlags Or NIF_ICON       ' Set ICON flag to validate data item
  193.         Set gTrayIcon = Icon                        ' Save icon
  194.     End If
  195.     
  196.     If (Tip <> "") Then                             ' Validate Tip text
  197.         Tray.szTip = Tip & vbNullChar               ' Tray tool tip
  198.         Tray.uFlags = Tray.uFlags Or NIF_TIP        ' Set TIP flag to validate data item
  199.         gTrayTip = Tip                              ' Save tool tip
  200.     End If
  201.     
  202.     Tray.uCallbackMessage = TRAY_CALLBACK           ' Set user defigned message
  203.     Tray.uFlags = Tray.uFlags Or NIF_MESSAGE        ' Set flags for valid data item
  204.     Tray.cbSize = Len(Tray)                         ' Size of struct.
  205.     
  206.     rc = Shell_NotifyIcon(NIM_ADD, Tray)            ' Send data to Sys Tray.
  207. '-------------------------------------------------------
  208. End Sub
  209. '-------------------------------------------------------
  210. '-------------------------------------------------------
  211. Private Sub DeleteIcon(hwnd As Long, id As Long)
  212. '-------------------------------------------------------
  213.     Dim Tray As mAPIs.NOTIFYICONDATA                       ' Notify Icon Data structure
  214.     Dim rc As Long                                  ' API return code
  215. '-------------------------------------------------------
  216.     Tray.uID = id                                   ' Unique ID for each HWND and callback message.
  217.     Tray.hwnd = hwnd                                ' HWND receiving messages.
  218.     Tray.uFlags = 0&                                ' Set flags for valid data items
  219.     Tray.cbSize = Len(Tray)                         ' Size of struct.
  220.     
  221.     rc = Shell_NotifyIcon(NIM_DELETE, Tray)         ' Send delete message.
  222. '-------------------------------------------------------
  223. End Sub
  224. '-------------------------------------------------------
  225. '-------------------------------------------------------
  226. Friend Sub SendEvent(MouseEvent As Long, id As Long)
  227. '-------------------------------------------------------
  228.     Select Case MouseEvent                          ' Dispatch mouse events to control
  229.     Case WM_MOUSEMOVE
  230.         RaiseEvent MouseMove(id)
  231.     Case WM_LBUTTONDOWN
  232.         RaiseEvent MouseDown(vbLeftButton, id)
  233.     Case WM_LBUTTONUP
  234.         RaiseEvent MouseUp(vbLeftButton, id)
  235.     Case WM_LBUTTONDBLCLK
  236.         RaiseEvent MouseDblClick(vbLeftButton, id)
  237.     Case WM_RBUTTONDOWN
  238.         RaiseEvent MouseDown(vbRightButton, id)
  239.     Case WM_RBUTTONUP
  240.         RaiseEvent MouseUp(vbRightButton, id)
  241.     Case WM_RBUTTONDBLCLK
  242.         RaiseEvent MouseDblClick(vbRightButton, id)
  243.     End Select
  244. '-------------------------------------------------------
  245. End Sub
  246. '-------------------------------------------------------
  247. '##############################################################
  248. '-------------------------------------------------------
  249. '-------------------------------------------------------
  250. 'Private Sub class_Paint()
  251. ''-------------------------------------------------------
  252. '    Dim edge As RECT                                ' Rectangle edge of control
  253. ''-------------------------------------------------------
  254. '    edge.Left = 0                                   ' Set rect edges to outer
  255. '    edge.Top = 0                                    ' - most position in pixels
  256. '    edge.Bottom = ScaleHeight                       '
  257. '    edge.Right = ScaleWidth                         '
  258. '    DrawEdge hDC, edge, BDR_RAISEDOUTER, BF_RECT Or BF_SOFT    ' Draw Edge...
  259. ''-------------------------------------------------------
  260. 'End Sub
  261. ''-------------------------------------------------------
  262. '
  263. ''-------------------------------------------------------