SShellNotifyIcon.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /**
  2. * Copyright (C) 2014-2050 359501300
  3. * All rights reserved.
  4. *
  5. * @file SShellNotifyIcon.h
  6. * @brief
  7. * @version v2.0
  8. * @author 359501300
  9. * @date 2017-09-11
  10. *
  11. * Describe
  12. */
  13. #pragma once
  14. #include <ShellAPI.h>
  15. #include "SShellNofityHwnd2.h"
  16. #include "core\SWnd.h"
  17. /**
  18. * @class SShellNotifyIcon
  19. * @brief ShellNotifyIcon
  20. *
  21. * Describe ShellNotifyIcon
  22. */
  23. namespace SOUI
  24. {
  25. enum MenuType
  26. {
  27. menu, menuex, unknow
  28. };
  29. class SShellNotifyIcon :public SWindow
  30. {
  31. SOUI_CLASS_NAME(SWindow, L"shellnotifyicon")
  32. friend class CShellNotifyHwnd2;
  33. public:
  34. /**
  35. * SShellNotifyIcon::SShellNotifyIcon
  36. * @brief 构造函数
  37. *
  38. * Describe 构造函数
  39. */
  40. SShellNotifyIcon();
  41. /**
  42. * SShellNotifyIcon::~SShellNotifyIcon
  43. * @brief 析构函数
  44. *
  45. * Describe 析构函数
  46. */
  47. ~SShellNotifyIcon();
  48. BOOL Show();
  49. BOOL Hide();
  50. HRESULT SetTip(SStringT szTip,BOOL bLoading=FALSE);
  51. BOOL ShowNotify(LPCTSTR szMsg, LPCTSTR szTitle = NULL)
  52. {
  53. if (szMsg)
  54. {
  55. _tcscpy_s(nid.szInfo, szMsg);
  56. nid.uFlags |= NIF_INFO;
  57. nid.uTimeout = 1000;
  58. //nid.dwInfoFlags = NIIF_USER;
  59. }
  60. if (szTitle)
  61. {
  62. _tcscpy_s(nid.szInfoTitle, szTitle);
  63. }
  64. return Shell_NotifyIcon(NIM_MODIFY, &nid);
  65. }
  66. void ShowMenu();
  67. void StartAni();
  68. void StopAni();
  69. bool IsRunAni() { return m_bRunAni; }
  70. void SetDefIconIdx(int iIdx);
  71. protected:
  72. SOUI_MSG_MAP_BEGIN()
  73. MSG_WM_PAINT_EX(OnPaint)
  74. MSG_WM_ERASEBKGND_EX(OnEraseBkgnd)
  75. MSG_WM_NCPAINT_EX(OnPaint)
  76. SOUI_MSG_MAP_END()
  77. protected:
  78. void OnPaint(SOUI::IRenderTarget * pRT) {};
  79. BOOL OnEraseBkgnd(SOUI::IRenderTarget * pRT) { return TRUE; };
  80. void NextFrame();
  81. virtual BOOL CreateChildren(pugi::xml_node xmlNode);
  82. virtual void OnFinalRelease();
  83. void Create(HWND hOwner, HICON hIcon, UINT uFlags = (NIF_ICON | NIF_MESSAGE | NIF_TIP), UINT uCallbackMessage = WM_ICONNOTIFY, UINT uId = ID_TASKBARICON);
  84. void IniNotifyIconData(HWND hOwner, HICON hIcon, UINT flags, UINT callbackmsg, UINT ID, LPCWSTR szTip);
  85. HRESULT SetMenu(SStringT strValue, BOOL bLoading);
  86. HRESULT SetIcon(SStringT strValue, BOOL bLoading);
  87. SOUI_ATTRS_BEGIN()
  88. ATTR_CUSTOM(L"ico", SetIcon)
  89. ATTR_CUSTOM(L"tip", SetTip)
  90. ATTR_CUSTOM(L"menu", SetMenu)
  91. ATTR_INT(L"deficoidx", m_iDefIcon, FALSE)
  92. ATTR_INT(L"startframe", m_iStartFrame, FALSE)
  93. ATTR_INT(L"duration", m_iDuration,FALSE)
  94. SOUI_ATTRS_END()
  95. private:
  96. SArray<HICON> m_ArrIcon;
  97. SStringT m_strTip;
  98. SStringT m_strMenu;
  99. MenuType m_menuType;
  100. NOTIFYICONDATA nid;
  101. CShellNotifyHwnd2 *m_MsgOnlyWnd;
  102. // 默认图标索引 开始帧位置 动画间隔时间
  103. int m_iDefIcon, m_iCurFrame, m_iStartFrame, m_iDuration;
  104. bool m_bRunAni;
  105. };
  106. }