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 };