xref: /reactos/dll/shellext/stobject/csystray.h (revision 7e069ccd)
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 
11 #pragma once
12 
13 extern const GUID CLSID_SysTray;
14 
15 
16 typedef CWinTraits <
17     WS_POPUP | WS_DLGFRAME | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
18     WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_PALETTEWINDOW
19 > CMessageWndClass;
20 
21 class CSysTray :
22     public CComCoClass<CSysTray, &CLSID_SysTray>,
23     public CComObjectRootEx<CComMultiThreadModelNoCS>,
24     public CWindowImpl<CSysTray, CWindow, CMessageWndClass>,
25     public IOleCommandTarget
26 {
27     CComPtr<IOleCommandTarget> pctNetShell;
28 
29     // TODO: keep icon handlers here
30 
31     DWORD dwServicesEnabled;
32     HWND hwndSysTray;
33 
34     static DWORD WINAPI s_SysTrayThreadProc(PVOID param);
35     HRESULT SysTrayMessageLoop();
36     HRESULT SysTrayThreadProc();
37     HRESULT CreateSysTrayThread();
38     HRESULT DestroySysTrayWindow();
39 
40     HRESULT InitIcons();
41     HRESULT ShutdownIcons();
42     HRESULT UpdateIcons();
43     HRESULT ProcessIconMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult);
44 
45     HRESULT InitNetShell();
46     HRESULT ShutdownNetShell();
47 
48     VOID GetServicesEnabled();
49 
50 public:
51     HRESULT NotifyIcon(INT code, UINT uId, HICON hIcon, LPCWSTR szTip, DWORD dwstate = 0);
52 
53     HWND GetHWnd() { return m_hWnd; }
54 
55     VOID EnableService(DWORD dwServiceFlag, BOOL bEnable);
56     BOOL IsServiceEnabled(DWORD dwServiceFlag);
57 
58 protected:
59     BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID = 0);
60 
61 public:
62     CSysTray();
63     virtual ~CSysTray();
64 
65     // *** IOleCommandTarget methods ***
66     virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText);
67     virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
68 
69     DECLARE_WND_CLASS_EX(_T("SystemTray_Main"), CS_GLOBALCLASS, COLOR_3DFACE)
70 
71     DECLARE_REGISTRY_RESOURCEID(IDR_SYSTRAY)
72     DECLARE_NOT_AGGREGATABLE(CSysTray)
73     DECLARE_PROTECT_FINAL_CONSTRUCT()
74 
75     BEGIN_COM_MAP(CSysTray)
76         COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
77     END_COM_MAP()
78 
79 };