* Sync up to trunk head (r65120).
[reactos.git] / dll / shellext / stobject / csystray.h
1 /*
2 * PROJECT: ReactOS system libraries
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll\win32\stobject\stobject.cpp
5 * PURPOSE: Systray shell service object
6 * PROGRAMMERS: Robert Naumann
7 David Quintana <gigaherz@gmail.com>
8 */
9 #pragma once
10
11 extern const GUID CLSID_SysTray;
12
13
14 typedef CWinTraits <
15 WS_POPUP | WS_DLGFRAME | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
16 WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_PALETTEWINDOW
17 > CMessageWndClass;
18
19 class CSysTray :
20 public CComCoClass<CSysTray, &CLSID_SysTray>,
21 public CComObjectRootEx<CComMultiThreadModelNoCS>,
22 public CWindowImpl<CSysTray, CWindow, CMessageWndClass>,
23 public IOleCommandTarget
24 {
25 // TODO: keep icon handlers here
26
27 HWND hwndSysTray;
28
29 static DWORD WINAPI s_SysTrayThreadProc(PVOID param);
30 HRESULT SysTrayMessageLoop();
31 HRESULT SysTrayThreadProc();
32 HRESULT CreateSysTrayThread();
33 HRESULT DestroySysTrayWindow();
34
35 HRESULT InitIcons();
36 HRESULT ShutdownIcons();
37 HRESULT UpdateIcons();
38 HRESULT ProcessIconMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
39
40 public:
41 HRESULT NotifyIcon(INT code, UINT uId, HICON hIcon, LPCWSTR szTip);
42
43 HWND GetHWnd() { return m_hWnd; }
44
45 protected:
46 BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID = 0);
47
48 public:
49 CSysTray();
50 virtual ~CSysTray();
51
52 // *** IOleCommandTarget methods ***
53 virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText);
54 virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
55
56 DECLARE_WND_CLASS_EX(_T("SystemTray_Main"), CS_GLOBALCLASS, COLOR_3DFACE)
57
58 DECLARE_REGISTRY_RESOURCEID(IDR_SYSTRAY)
59 DECLARE_NOT_AGGREGATABLE(CSysTray)
60 DECLARE_PROTECT_FINAL_CONSTRUCT()
61
62 BEGIN_COM_MAP(CSysTray)
63 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
64 END_COM_MAP()
65
66 };