[HIVESFT.INF]
[reactos.git] / dll / win32 / stobject / precomp.h
index 3f14fd1..c42e8d5 100644 (file)
 #include <strsafe.h>
 #include <atlbase.h>
 #include <atlcom.h>
+#include <atlwin.h>
+
+#include <shellapi.h>
 
 #include <wine/debug.h>
 #include <wine/unicode.h>
 
+#include "resource.h"
+
 extern const GUID CLSID_SysTray;
 
-#include "resource.h"
+extern HINSTANCE g_hInstance;
+
+#define ID_ICON_VOLUME 0x4CB
+
+/* --------------- CSysTray callbacks ------------------------------ */
+
+typedef CWinTraits <
+    WS_POPUP | WS_DLGFRAME | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
+    WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_PALETTEWINDOW
+> CMessageWndClass;
+
+class CSysTray :
+    public CComCoClass<CSysTray, &CLSID_SysTray>,
+    public CComObjectRootEx<CComMultiThreadModelNoCS>,
+    public CWindowImpl<CSysTray, CWindow, CMessageWndClass>,
+    public IOleCommandTarget
+{
+    // 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()
+
+};
+
+/* --------------- Icon callbacks ------------------------------ */
+
+extern HRESULT STDMETHODCALLTYPE Volume_Init(_In_ CSysTray * pSysTray);
+extern HRESULT STDMETHODCALLTYPE Volume_Shutdown(_In_ CSysTray * pSysTray);
+extern HRESULT STDMETHODCALLTYPE Volume_Update(_In_ CSysTray * pSysTray);
+extern HRESULT STDMETHODCALLTYPE Volume_Message(_In_ CSysTray * pSysTray, UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+/* --------------- Utils ------------------------------ */
 
 static __inline ULONG
 Win32DbgPrint(const char *filename, int line, const char *lpFormat, ...)