#include "resource.h"
-extern const GUID CLSID_SysTray;
-
extern HINSTANCE g_hInstance;
#define ID_ICON_VOLUME 0x4CB
-/* --------------- CSysTray callbacks ------------------------------ */
+#include "csystray.h"
-typedef CWinTraits <
- WS_POPUP | WS_DLGFRAME | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
- WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_PALETTEWINDOW
-> CMessageWndClass;
+typedef HRESULT(STDMETHODCALLTYPE * PFNSTINIT) (_In_ CSysTray * pSysTray);
+typedef HRESULT(STDMETHODCALLTYPE * PFNSTSHUTDOWN) (_In_ CSysTray * pSysTray);
+typedef HRESULT(STDMETHODCALLTYPE * PFNSTUPDATE) (_In_ CSysTray * pSysTray);
+typedef HRESULT(STDMETHODCALLTYPE * PFNSTMESSAGE) (_In_ CSysTray * pSysTray, UINT uMsg, WPARAM wParam, LPARAM lParam);
-class CSysTray :
- public CComCoClass<CSysTray, &CLSID_SysTray>,
- public CComObjectRootEx<CComMultiThreadModelNoCS>,
- public CWindowImpl<CSysTray, CWindow, CMessageWndClass>,
- public IOleCommandTarget
+struct SysTrayIconHandlers_t
{
- // TODO: keep icon handlers here
-
- HWND hwndSysTray;
-
- static DWORD WINAPI s_SysTrayThreadProc(PVOID param);
- HRESULT SysTrayMessageLoop();
- HRESULT SysTrayThreadProc();
- HRESULT CreateSysTrayThread();
- HRESULT DestroySysTrayWindow();
-
- HRESULT InitIcons();
- HRESULT ShutdownIcons();
- HRESULT UpdateIcons();
- HRESULT ProcessIconMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
-
-public:
- HRESULT NotifyIcon(INT code, UINT uId, HICON hIcon, LPCWSTR szTip);
-
- HWND GetHWnd() { return m_hWnd; }
-
-protected:
- BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID = 0);
-
-public:
- CSysTray();
- virtual ~CSysTray();
-
- // *** IOleCommandTarget methods ***
- virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText);
- virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
-
- DECLARE_WND_CLASS_EX(_T("SystemTray_Main"), CS_GLOBALCLASS, COLOR_3DFACE)
-
- DECLARE_REGISTRY_RESOURCEID(IDR_SYSTRAY)
- DECLARE_NOT_AGGREGATABLE(CSysTray)
- DECLARE_PROTECT_FINAL_CONSTRUCT()
-
- BEGIN_COM_MAP(CSysTray)
- COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
- END_COM_MAP()
-
+ PFNSTINIT pfnInit;
+ PFNSTSHUTDOWN pfnShutdown;
+ PFNSTUPDATE pfnUpdate;
+ PFNSTMESSAGE pfnMessage;
};
+extern SysTrayIconHandlers_t g_IconHandlers[];
+extern const int g_NumIcons;
+
/* --------------- Icon callbacks ------------------------------ */
extern HRESULT STDMETHODCALLTYPE Volume_Init(_In_ CSysTray * pSysTray);