XTTrayIcon.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:30k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTTrayIcon.h: interface for the CXTTrayIcon class.
  2. //
  3. // This file is a part of the XTREME CONTROLS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTTRAYICON_H__)
  22. #define __XTTRAYICON_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. //{{AFX_CODEJOCK_PRIVATE
  28. #ifndef NIIF_NONE
  29. #define NIIF_NONE       0x00000000
  30. #define NIIF_INFO       0x00000001
  31. #define NIIF_WARNING    0x00000002
  32. #define NIIF_ERROR      0x00000003
  33. #define NIIF_ICON_MASK  0x0000000F
  34. #endif
  35. #ifndef NIS_HIDDEN
  36. #define NIS_HIDDEN      0x00000001
  37. #endif
  38. #ifndef NIF_STATE
  39. #define NIF_STATE       0x00000008
  40. #define NIF_INFO        0x00000010
  41. #endif
  42. #ifndef NIN_BALLOONSHOW
  43. #define NIN_BALLOONSHOW      (WM_USER + 2)
  44. #define NIN_BALLOONHIDE      (WM_USER + 3)
  45. #define NIN_BALLOONTIMEOUT   (WM_USER + 4)
  46. #define NIN_BALLOONUSERCLICK (WM_USER + 5)
  47. #endif
  48. #ifndef NIN_SELECT
  49. #define NIN_SELECT          (WM_USER + 0)
  50. #define NINF_KEY            0x1
  51. #define NIN_KEYSELECT       (NIN_SELECT | NINF_KEY)
  52. #endif
  53. #ifndef NIM_SETFOCUS
  54. #define NIM_SETFOCUS    0x00000003
  55. #endif
  56. //}}AFX_CODEJOCK_PRIVATE
  57. //===========================================================================
  58. // Summary:
  59. //     CXTTrayIcon is a CWnd derived class of the NOTIFYICONDATA structure.
  60. //     It is used to display a system tray icon with animation.
  61. //===========================================================================
  62. class _XTP_EXT_CLASS CXTTrayIcon : public CWnd
  63. {
  64. private:
  65. //-----------------------------------------------------------------------
  66. // Summary:
  67. //     TRAYICONDATA is a stand alone helper structure. It is used by CXTTrayIcon
  68. //     to maintain an animation icon list.
  69. //-----------------------------------------------------------------------
  70. struct TRAYICONDATA
  71. {
  72. HICON   hIcon;      // Handle to the icon displayed.
  73. CString strToolTip; // A NULL terminated string that represents the tooltip displayed for the tray icon.
  74. };
  75. //-----------------------------------------------------------------------
  76. // Helper structure for compatibility with older versions of
  77. // Visual C++, see NOTIFYICONDATA.
  78. //-----------------------------------------------------------------------
  79. struct NOTIFYICONDATAEX
  80. {
  81. DWORD cbSize;          // Size of this structure, in bytes.
  82. HWND hWnd;             // Handle to the window that will receive notification messages associated with an icon in the taskbar status area. The shell uses hWnd and uID to identify which icon is to be operated on when Shell_NotifyIcon is invoked.
  83. UINT uID;              // Application-defined identifier of the taskbar icon. The shell uses hWnd and uID to identify which icon is to be operated on when Shell_NotifyIcon is invoked. You can have multiple icons associated with a single hWnd by assigning each a different uID.
  84. UINT uFlags;           // Array of flags that indicate which of the other members contain valid data
  85. UINT uCallbackMessage; // Application-defined message identifier
  86. HICON hIcon;           // Handle to the icon to be added, modified, or deleted.
  87. TCHAR szTip[128];      // Pointer to a NULL-terminated string with the text for a standard tooltip.
  88. DWORD dwState;         // State of the icon
  89. DWORD dwStateMask;     // A value that specifies which bits of the state member will be retrieved or modified.
  90. TCHAR szInfo[256];     // Pointer to a NULL-terminated string with the text for a balloon-style tooltip
  91. union {
  92. UINT  uTimeout;    // The timeout value, in milliseconds, for a balloon-style tooltip.
  93. UINT  uVersion;    // Used to specify whether the shell notify icon interface should use Windows 95 or Windows 2000 behavior.
  94. } DUMMYUNIONNAME;
  95. TCHAR szInfoTitle[64]; // Pointer to a NULL-terminated string containing a title for a balloon tooltip.
  96. DWORD dwInfoFlags;     // Flags that can be set to add an icon to a balloon tooltip
  97. };
  98. //-----------------------------------------------------------------------
  99. // Summary:
  100. //     Animated icon array
  101. //-----------------------------------------------------------------------
  102. typedef CList<TRAYICONDATA, TRAYICONDATA&> CTrayIconList;
  103. public:
  104. //-----------------------------------------------------------------------
  105. // Summary:
  106. //     Constructs a CXTTrayIcon object
  107. //-----------------------------------------------------------------------
  108. CXTTrayIcon();
  109. //-----------------------------------------------------------------------
  110. // Summary:
  111. //     Destroys a CXTTrayIcon object, handles cleanup and deallocation
  112. //-----------------------------------------------------------------------
  113. virtual ~CXTTrayIcon();
  114. public:
  115. BOOL IsShellVersion5() const;
  116. public:
  117. //-----------------------------------------------------------------------
  118. // Summary:
  119. //     This member function will create the system tray icon.
  120. // Parameters:
  121. //     lpszCaption       - NULL terminated string that contains the tooltip text displayed
  122. //                         when the cursor is over the tray icon.
  123. //     pParentWnd        - Pointer to the window that will receive notification messages
  124. //                         associated with an icon in the taskbar status area.
  125. //     nIconID           - Resource ID for the default tray icon.
  126. //     uMenuID           - Popup menu resource identifier.
  127. //     uDefMenuItemID    - Command ID that represents the default item for the menu.
  128. //     bDefMenuItemByPos - true if the default is defined by its position. false if it is
  129. //     defined by its command ID.
  130. // Returns:
  131. //     true if successful, otherwise returns false.
  132. //-----------------------------------------------------------------------
  133. virtual bool Create(LPCTSTR lpszCaption, CWnd* pParentWnd, UINT nIconID, UINT uMenuID = 0, UINT uDefMenuItemID = 0, bool bDefMenuItemByPos = false);
  134. //{{AFX_CODEJOCK_PRIVATE
  135. virtual bool Create(LPCTSTR lpszCaption, DWORD dwStyle, CWnd* pParentWnd, UINT nIconID);// DEPRECATED
  136. //}}AFX_CODEJOCK_PRIVATE
  137. //-----------------------------------------------------------------------
  138. // Summary:
  139. //     Call this member function to display a balloon tooltip for the system
  140. //     tray icon. Must have Windows 2000 or later.
  141. // Parameters:
  142. //     lpszInfo      - Pointer to a null-terminated string with the text for a balloon
  143. //                     ToolTip. It can have a maximum of 255 characters.
  144. //     lpszInfoTitle - Pointer to a null-terminated string containing a title for a
  145. //                     balloon ToolTip. This title appears in boldface above the text.
  146. //                     It can have a maximum of 63 characters.
  147. //     dwInfoFlags   - Flags that can be set to add an icon to a balloon ToolTip.
  148. //                     It is placed to the left of the title. If the 'lpszInfoTitle' member
  149. //                     is zero-length, the icon is not shown, and can be any of the values listed in the Remarks section.
  150. //     uTimeout      - The timeout value in milliseconds for a balloon ToolTip.
  151. //                     The system enforces minimum and maximum timeout values. 'uTimeout'
  152. //                     values that are too large are set to the maximum value, and values
  153. //                     that are too small default to the minimum value. The system minimum
  154. //                     and maximum timeout values are currently set at 10 seconds and 30
  155. //                     seconds, respectively.
  156. // Remarks:
  157. //     The icon shown can be any of the following values:<p/>
  158. //
  159. //     * <b>NIIF_ERROR</b> An error icon.
  160. //     * <b>NIIF_INFO</b> An information icon.
  161. //     * <b>NIIF_NONE</b> No icon.
  162. //     * <b>NIIF_WARNING</b> A warning icon.
  163. // Returns:
  164. //     true if successful, otherwise returns false.
  165. //-----------------------------------------------------------------------
  166. bool ShowBalloonTip(LPCTSTR lpszInfo = NULL, LPCTSTR lpszInfoTitle = NULL, DWORD dwInfoFlags = NIIF_NONE, UINT uTimeout = 10);
  167. //-----------------------------------------------------------------------
  168. // Summary:
  169. //     This member function will stop the tray icon animation timer
  170. //-----------------------------------------------------------------------
  171. virtual void StopAnimation();
  172. //-----------------------------------------------------------------------
  173. // Summary:
  174. //     This member function will start the tray icon animation timer.
  175. // Parameters:
  176. //     uElapse - Specifies the time-out value in milliseconds between frames.
  177. //-----------------------------------------------------------------------
  178. virtual void StartAnimation(UINT uElapse = 500);
  179. //-----------------------------------------------------------------------
  180. // Summary:
  181. //     This member function will set the icons used for animated system
  182. //     tray icons. To use, call SetAnimationIcons, then SetTimer.
  183. // Parameters:
  184. //     lpIDArray     - [in] An array of resource IDs that represent the icons to display
  185. //                     in the caption area.
  186. //     nIDCount      - [in] Zero based size of the array passed. <i>lpIDArray</i> and
  187. //                     <i>lpStrTipArray</i> must contain the same number
  188. //                     of items and must match value specified by <i>nIDCount</i>.
  189. //     lpStrTipArray - [in] An array of tooltips that match the icons passed in as 'lpStrTipArray'.
  190. //                     If NULL, the default tooltip will be used.
  191. // Returns:
  192. //     true if successful, otherwise returns false.
  193. //-----------------------------------------------------------------------
  194. virtual void SetAnimationIcons(const UINT* lpIDArray, const CString* lpStrTipArray, int nIDCount);
  195. virtual bool SetAnimationIcons(const UINT* lpIDArray, int nIDCount, const CString* lpStrTipArray = NULL); // <combine CXTTrayIcon::SetAnimationIcons@const UINT*@const CString*@int>
  196. //-----------------------------------------------------------------------
  197. // Summary:
  198. //     Call this member function to set the tooltip text for the tray icon.
  199. // Parameters:
  200. //     lpszTipText - Null terminated string that represents the tooltip text to display
  201. //                   for the icon.
  202. //     nTipText - Windows string resource ID that represents the tooltip text
  203. //                to display for the icon.
  204. // Returns:
  205. //     true if successful, otherwise returns false.
  206. //-----------------------------------------------------------------------
  207. bool SetTooltipText(UINT nTipText);
  208. bool SetTooltipText(LPCTSTR lpszTipText); // <combine CXTTrayIcon::SetTooltipText@UINT>
  209. //-----------------------------------------------------------------------
  210. // Summary:
  211. //     Call this member function to retrieve the tooltip text that is displayed
  212. //     by the tray icon.
  213. // Returns:
  214. //     A CString object that represents the tooltip text.
  215. //-----------------------------------------------------------------------
  216. CString GetTooltipText() const;
  217. //-----------------------------------------------------------------------
  218. // Summary:
  219. //     This member function is called to reset the tray icon control settings
  220. //     to their default value.
  221. //-----------------------------------------------------------------------
  222. void SetDefaultValues();
  223. //-----------------------------------------------------------------------
  224. // Summary:
  225. //     This member function will set the callback message to be used by the
  226. //     tray icon.
  227. // Parameters:
  228. //     uNewCallbackMessage - Notification message ID.
  229. // Returns:
  230. //     true if successful, otherwise returns false.
  231. //-----------------------------------------------------------------------
  232. bool SetCallbackMessage(UINT uNewCallbackMessage);
  233. //-----------------------------------------------------------------------
  234. // Summary:
  235. //     This member function will retrieve the notification message ID used
  236. //     by the tray icon.
  237. // Returns:
  238. //     An ID to a notification message.
  239. //-----------------------------------------------------------------------
  240. UINT GetCallbackMessage();
  241. //-----------------------------------------------------------------------
  242. // Summary:
  243. //     This member function will set the default menu item for the tray icon's
  244. //     popup menu if the tray icon handles notification messages.
  245. // Parameters:
  246. //     uItem  - Command identifier or position of the default menu item.
  247. //     bByPos - true if 'uItem' is the menu item's index; false if it is the menu
  248. //              item's command ID.
  249. // Returns:
  250. //     true if successful, otherwise returns false.
  251. //-----------------------------------------------------------------------
  252. bool SetDefaultMenuItem(UINT uItem, bool bByPos);
  253. //-----------------------------------------------------------------------
  254. // Summary:
  255. //     Call this member function to retrieve the item ID and position flag
  256. //     for the tray icon.
  257. // Parameters:
  258. //     uItem  - Reference to a UINT that is to receive the default menu item ID.
  259. //     bByPos - Reference to a bool that is to receive the default menu item position
  260. //              flag.
  261. //-----------------------------------------------------------------------
  262. void GetDefaultMenuItem(UINT& uItem, bool& bByPos);
  263. //-----------------------------------------------------------------------
  264. // Summary:
  265. //     Call this member function to set the window that is to receive notification
  266. //     messages from the tray icon.
  267. // Parameters:
  268. //     pWndNotify - Points to a valid CWnd object.
  269. // Returns:
  270. //     true if successful, otherwise returns false.
  271. //-----------------------------------------------------------------------
  272. bool SetNotificationWnd(CWnd* pWndNotify);
  273. //-----------------------------------------------------------------------
  274. // Summary:
  275. //     Call this member function to retrieve a pointer to the window that
  276. //     receives notification messages from the tray icon.
  277. // Returns:
  278. //     A pointer to a valid CWnd object.
  279. //-----------------------------------------------------------------------
  280. CWnd* GetNotificationWnd();
  281. //-----------------------------------------------------------------------
  282. // Summary:
  283. //     Call this member function to set the icon that is displayed in the
  284. //     system tray.
  285. // Parameters:
  286. //     hIcon - Handle to the icon to display.
  287. //     lpszIconName - Resource name of the icon to display.
  288. //     nIDResource - Resource identifier of the icon to display.
  289. // Returns:
  290. //     true if the icon was set, otherwise returns false.
  291. //-----------------------------------------------------------------------
  292. bool SetIcon(HICON hIcon);
  293. bool SetIcon(LPCTSTR lpszIconName); // <combine CXTTrayIcon::SetIcon@HICON>
  294. bool SetIcon(UINT nIDResource); // <combine CXTTrayIcon::SetIcon@HICON>
  295. //-----------------------------------------------------------------------
  296. // Summary:
  297. //     Call this member function to return a handle to the icon displayed
  298. //     in the system tray.
  299. // Returns:
  300. //     A handle to the icon displayed in the system tray.
  301. //-----------------------------------------------------------------------
  302. HICON GetIcon() const;
  303. //-----------------------------------------------------------------------
  304. // Summary:
  305. //     Call this member function to add the icon to the system tray.
  306. // Returns:
  307. //     true if successful, otherwise returns false.
  308. //-----------------------------------------------------------------------
  309. bool AddIcon();
  310. //-----------------------------------------------------------------------
  311. // Summary:
  312. //     Call this member function to remove the icon from the system tray.
  313. // Returns:
  314. //     true if successful, otherwise returns false.
  315. //-----------------------------------------------------------------------
  316. bool RemoveIcon();
  317. //-----------------------------------------------------------------------
  318. // Summary:
  319. //     Call this member function to hide the system tray icon in Windows
  320. //     2000 or greater.
  321. // Returns:
  322. //     true if successful, otherwise returns false.
  323. //-----------------------------------------------------------------------
  324. bool HideIcon();
  325. //-----------------------------------------------------------------------
  326. // Summary:
  327. //     Call this member function to show the system tray icon in Windows
  328. //     2000 or greater.
  329. // Returns:
  330. //     true if successful, otherwise returns false.
  331. //-----------------------------------------------------------------------
  332. bool ShowIcon();
  333. //-----------------------------------------------------------------------
  334. // Summary:
  335. //     Call this member function to minimize the specified window to the system
  336. //     tray. If window animation is supported, the window will glide down
  337. //     to the system tray.
  338. // Parameters:
  339. //     pWnd - Window to minimize.
  340. //-----------------------------------------------------------------------
  341. void MinimizeToTray(CWnd* pWnd);
  342. //-----------------------------------------------------------------------
  343. // Summary:
  344. //     Call this member function to maximize the specified window from the
  345. //     system tray. If window animation is supported, the window will glide
  346. //     up from the system tray.
  347. // Parameters:
  348. //     pWnd - Window to maximize.
  349. //-----------------------------------------------------------------------
  350. void MaximizeFromTray(CWnd* pWnd);
  351. //-----------------------------------------------------------------------
  352. // Summary:
  353. //     Sends a message to the taskbar's status area.
  354. // Parameters:
  355. //     dwMessage - [in] Variable of type DWORD that specifies the action to
  356. //                 be taken. See remarks section for a list of values.
  357. // Remarks:
  358. //     <i>dwMessage</i> can have one of the following values. <p/>
  359. //     * <b>NIM_ADD</b>        Adds an icon to the status area. The hWnd and
  360. //                             uID members of the NOTIFYICONDATA structure
  361. //                             pointed to by lpdata will be used to identify
  362. //                             the icon in later calls to Shell_NotifyIcon.
  363. //     * <b>NIM_DELETE</b>     Deletes an icon from the status area. Use the
  364. //                             hWnd and uID members of the NOTIFYICONDATA
  365. //                             structure pointed to by lpdata to identify
  366. //                             the icon to be deleted.
  367. //     * <b>NIM_MODIFY</b>     Modifies an icon in the status area. Use the
  368. //                             hWnd and uID members of the NOTIFYICONDATA
  369. //                             structure pointed to by lpdata to identify
  370. //                             the icon to be modified.
  371. //     * <b>NIM_SETFOCUS</b>   Version 5.0. Returns focus to the taskbar notification
  372. //                             area. Taskbar icons should use this message
  373. //                             when they have completed their user interface
  374. //                             operation. For example, if the taskbar icon
  375. //                             displays a shortcut menu, but the user presses
  376. //                             ESCAPE to cancel it, use NIM_SETFOCUS to return
  377. //                             focus to the taskbar notification area.
  378. //     * <b>NIM_SETVERSION</b> Version 5.0. Instructs the taskbar to behave
  379. //                             according to the version number specified in
  380. //                             the uVersion member of the structure pointed
  381. //                             to by lpdata. This message allows you to specify
  382. //                             whether you want the version 5.0 behavior found
  383. //                             on Microsoft(r) Windows(r) 2000 systems, or that
  384. //                             found with earlier Shell versions. The default
  385. //                             value for uVersion is zero, indicating that
  386. //                             the original Windows 95 notify icon behavior
  387. //                             should be used. For details, see the Remarks
  388. //                             section.
  389. //     The taskbar notification area is sometimes erroneously called the "tray."
  390. //
  391. //     Version 5.0 of the Shell, found on Windows 2000, handles Shell_NotifyIcon
  392. //     mouse and keyboard events differently than earlier Shell versions found
  393. //     on Windows NT(r) 4.0, Windows 95, and Windows 98. The differences are:
  394. //
  395. //     If a user selects a notify icon's shortcut menu with the keyboard, the
  396. //     version 5.0 Shell sends the associated application a WM_CONTEXTMENU message.
  397. //     Earlier versions send WM_RBUTTONDOWN and WM_RBUTTONUP messages. <p/>
  398. //
  399. //     If a user selects a notify icon with the keyboard and activates it with
  400. //     the space bar or ENTER key, the version 5.0 Shell sends the associated
  401. //     application an NIN_KEYSELECT notification. Earlier versions send WM_RBUTTONDOWN
  402. //     and WM_RBUTTONUP messages. <p/>
  403. //
  404. //     If a user selects a notify icon with the mouse and activates it with
  405. //     the ENTER key, the version 5.0 Shell sends the associated application
  406. //     an NIN_SELECT notification. Earlier versions send WM_RBUTTONDOWN and
  407. //     WM_RBUTTONUP messages. <p/>
  408. //
  409. //     If a user passes the mouse pointer over an icon with which a balloon
  410. //     ToolTip is associated, the version 5.0 Shell sends the following messages.<p/>
  411. //
  412. //     * <b>NIN_BALLOONSHOW</b>      Sent when the balloon is shown (balloons
  413. //                                   are queued).
  414. //     * <b>NIN_BALLOONHIDE</b>      Sent when the balloon disappears-when
  415. //                                   the icon is deleted, for example. This
  416. //                                   message is not sent if the balloon is
  417. //                                   dismissed because of a timeout or mouse
  418. //                                   click by the user.
  419. //     * <b>NIN_BALLOONTIMEOUT</b>   Sent when the balloon is dismissed because
  420. //                                   of a timeout.
  421. //     * <b>NIN_BALLOONUSERCLICK</b> Sent when the balloon is dismissed because
  422. //                                   the user clicked the mouse.
  423. //
  424. //     You can select which way the Shell should behave by calling Shell_NotifyIcon
  425. //     with dwMessage set to NIM_SETVERSION. Set the uVersion member of the
  426. //     NOTIFYICONDATA structure to indicate whether you want pre-version 5.0
  427. //     behavior or version 5.0 and later behavior.
  428. // Returns:
  429. //     Returns TRUE if successful or FALSE otherwise. If dwMessage is set to
  430. //     NIM_SETVERSION, the function returns TRUE if the version was successfully
  431. //     changed or FALSE if the requested version is not supported.
  432. //-----------------------------------------------------------------------
  433. BOOL ShellNotify(DWORD dwMessage);
  434. //-------------------------------------------------------------------------
  435. // Summary:
  436. //     Adds an icon to the system tray.
  437. // Remarks:
  438. //     This member is called by the CXTTrayIcon object to initialize the
  439. //     icon display in the system tray. It checks to see if there is a
  440. //     pending request or if the icon is hidden first before attempting to
  441. //     add the icon. You can override this member to provide additional
  442. //     functionality.
  443. //-------------------------------------------------------------------------
  444. virtual void InstallIconPending();
  445. //-----------------------------------------------------------------------
  446. // Summary:
  447. //     Creates the tray icons min / max window.
  448. // Remarks:
  449. //     Called to create the minimize window used during minimize / maximize
  450. //     operations.
  451. // Parameters:
  452. //     pWndApp - Points to the calling applications main window.
  453. // Returns:
  454. //     true if the minimize window was successfully created, otherwise false.
  455. //-----------------------------------------------------------------------
  456. virtual bool CreateMinimizeWnd(CWnd* pWndApp);
  457. //-------------------------------------------------------------------------
  458. // Summary:
  459. //     Clears animated icon array.
  460. // Remarks:
  461. //     Called to clear the animated icon array and free any associated
  462. //     GDI resources.
  463. //-------------------------------------------------------------------------
  464. virtual void RemoveAnimationIcons();
  465. //-----------------------------------------------------------------------
  466. // Summary:
  467. //     Sets the tooltip for the CXTTrayIcon object.
  468. // Parameters:
  469. //     strToolTip - NULL terminated string that contains the tooltip text displayed
  470. //                  when the cursor is over the tray icon.
  471. // Remarks:
  472. //     This member function is called to set the tooltip text for the
  473. //     icon that is displayed in the system tray.
  474. //-----------------------------------------------------------------------
  475. virtual void SetTooltip(LPCTSTR strToolTip);
  476. //-----------------------------------------------------------------------
  477. // Summary:
  478. //     Sets the icon for the CXTTrayIcon object.
  479. // Parameters:
  480. //     nIcon     - Resource id of the new icon to set.
  481. //     dwMessage - Message to be sent, see ShellNotify for more details.
  482. // Remarks:
  483. //     This member function is called to set a new icon to be displayed
  484. //     for the CXTTrayIcon object.
  485. //-----------------------------------------------------------------------
  486. virtual void SetTrayIcon(UINT nIcon, DWORD dwMessage = NIM_ADD);
  487. //-------------------------------------------------------------------------
  488. // Summary:
  489. //     Stops the animation timer.
  490. // Remarks:
  491. //     Called by the CXTTrayIcon object to stop the animation timer event
  492. //     and sets the default icon and tooltip text. You can override this
  493. //     member to provide additional functionality.
  494. //-------------------------------------------------------------------------
  495. virtual void KillTimer();
  496. //-----------------------------------------------------------------------
  497. // Summary:
  498. //     Sets the animation timer.
  499. // Parameters:
  500. //     nIDEvent - Specifies a nonzero timer identifier.
  501. //     uElapse  - Specifies the time-out value, in milliseconds.
  502. // Remarks:
  503. //     Called by the CXTTrayIcon object to initialize and start the
  504. //     animation timer. you can override this member to provide additional
  505. //     functionality.
  506. //-----------------------------------------------------------------------
  507. virtual void SetTimer(UINT nIDEvent, UINT uElapse);
  508. protected:
  509. //{{AFX_CODEJOCK_PRIVATE
  510. DECLARE_MESSAGE_MAP()
  511. //{{AFX_VIRTUAL(CXTTrayIcon)
  512. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  513. virtual LRESULT OnTrayNotification(WPARAM wParam, LPARAM lParam);
  514. //}}AFX_VIRTUAL
  515. //{{AFX_MSG(CXTTrayIcon)
  516. afx_msg void OnTimer(UINT_PTR nIDEvent);
  517. afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
  518. afx_msg LRESULT OnTaskbarCreated(WPARAM wParam, LPARAM lParam);
  519. //}}AFX_MSG
  520. //}}AFX_CODEJOCK_PRIVATE
  521. private:
  522. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  523. bool CanAnimate() const;
  524. static BOOL CALLBACK FindTrayWnd(HWND hWnd, LPARAM lParam);
  525. bool GetTrayWindowRect(CRect& rect);
  526. bool SetShellTooltip(LPCTSTR lpszTipText);
  527. protected:
  528. UINT                m_uFlags;            // Style settings for icon restore.
  529. UINT                m_nIconID;           // Resource ID for the default icon.
  530. UINT                m_nIDEvent;          // Timer event ID.
  531. UINT                m_nCounter;          // Holds the current position in the timer loop.
  532. UINT                m_uDefMenuItemID;    // Default popup menu item ID.
  533. bool                m_bDefMenuItemByPos; // Determines if the default menu item is a command or index.
  534. bool                m_bHidden;           // State of the icon. true to indicate the icon is hidden.
  535. bool                m_bRemoved;          // true if the icon has been removed from the system tray.
  536. bool                m_bShowPending;      // true if the icon display is pending.
  537. HWND                m_hWndNotify;        // Handle to the window that receives command notification.
  538. CWnd                m_wndMinimize;       // Hidden window used during minimize and restore functions.
  539. size_t              m_iMaxTipSize;       // Maximum size for tooltip string.
  540. CString             m_strToolTip;        // Tooltip for the default icon.
  541. CXTIconHandle       m_hIcon;             // Default icon.
  542. CTrayIconList       m_arTrayIcons;       // Array of icons and text that are displayed during animation.
  543. NOTIFYICONDATAEX    m_niData;            // Tray icon structure see NOTIFYICONDATA.
  544. };
  545. //////////////////////////////////////////////////////////////////////
  546. AFX_INLINE bool CXTTrayIcon::Create(LPCTSTR lpszCaption, DWORD /*dwStyle*/, CWnd* pParentWnd, UINT nIconID) {
  547. return Create(lpszCaption, pParentWnd, nIconID);
  548. }
  549. AFX_INLINE void CXTTrayIcon::SetTooltip(LPCTSTR strToolTip) {
  550. SetTooltipText(strToolTip);
  551. }
  552. AFX_INLINE void CXTTrayIcon::SetTrayIcon(UINT nIcon, DWORD /*dwMessage*/) {
  553. SetIcon(nIcon);
  554. }
  555. AFX_INLINE void CXTTrayIcon::SetAnimationIcons(const UINT* lpIDArray, const CString* lpStrTipArray, int nIDCount) {
  556. SetAnimationIcons(lpIDArray, nIDCount, lpStrTipArray);
  557. }
  558. AFX_INLINE void CXTTrayIcon::KillTimer() {
  559. StopAnimation();
  560. }
  561. AFX_INLINE void CXTTrayIcon::SetTimer(UINT nIDEvent, UINT uElapse) {
  562. m_nIDEvent = nIDEvent; StartAnimation(uElapse);
  563. }
  564. AFX_INLINE BOOL CXTTrayIcon::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  565. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  566. }
  567. #endif // #if !defined(__TRAYICON_H__)