[STOBJECT] Implement the hotplug and the power icons in the system tray
[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/shellext/stobject/csystray.h
5 * PURPOSE: Systray shell service object
6 * PROGRAMMERS: Robert Naumann
7 * David Quintana <gigaherz@gmail.com>
8 * Shriraj Sawant a.k.a SR13 <sr.official@hotmail.com>
9 */
10 #pragma once
11
12 extern const GUID CLSID_SysTray;
13
14
15 typedef CWinTraits <
16 WS_POPUP | WS_DLGFRAME | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
17 WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_PALETTEWINDOW
18 > CMessageWndClass;
19
20 class CSysTray :
21 public CComCoClass<CSysTray, &CLSID_SysTray>,
22 public CComObjectRootEx<CComMultiThreadModelNoCS>,
23 public CWindowImpl<CSysTray, CWindow, CMessageWndClass>,
24 public IOleCommandTarget
25 {
26 CComPtr<IOleCommandTarget> pctNetShell;
27
28 // TODO: keep icon handlers here
29
30 HWND hwndSysTray;
31
32 static DWORD WINAPI s_SysTrayThreadProc(PVOID param);
33 HRESULT SysTrayMessageLoop();
34 HRESULT SysTrayThreadProc();
35 HRESULT CreateSysTrayThread();
36 HRESULT DestroySysTrayWindow();
37
38 HRESULT InitIcons();
39 HRESULT ShutdownIcons();
40 HRESULT UpdateIcons();
41 HRESULT ProcessIconMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult);
42
43 HRESULT InitNetShell();
44 HRESULT ShutdownNetShell();
45
46 public:
47 HRESULT NotifyIcon(INT code, UINT uId, HICON hIcon, LPCWSTR szTip, DWORD dwstate = 0);
48
49 HWND GetHWnd() { return m_hWnd; }
50
51 protected:
52 BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID = 0);
53
54 public:
55 CSysTray();
56 virtual ~CSysTray();
57
58 // *** IOleCommandTarget methods ***
59 virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText);
60 virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
61
62 DECLARE_WND_CLASS_EX(_T("SystemTray_Main"), CS_GLOBALCLASS, COLOR_3DFACE)
63
64 DECLARE_REGISTRY_RESOURCEID(IDR_SYSTRAY)
65 DECLARE_NOT_AGGREGATABLE(CSysTray)
66 DECLARE_PROTECT_FINAL_CONSTRUCT()
67
68 BEGIN_COM_MAP(CSysTray)
69 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
70 END_COM_MAP()
71
72 };