Reactos
at master 111 lines 3.2 kB view raw
1/* 2 * Copyright 2018 Hermes Belusca-Maito 3 * 4 * Pass on icon notification messages to the systray implementation 5 * in the currently running shell. 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22#ifndef _USERNOTIFICATION_H_ 23#define _USERNOTIFICATION_H_ 24 25#undef PlaySound 26 27class CUserNotification : 28 public CComCoClass<CUserNotification, &CLSID_UserNotification>, 29 public CComObjectRootEx<CComMultiThreadModelNoCS>, 30 public IUserNotification 31// public IUserNotification2 // On Vista+ 32{ 33private: 34 HWND m_hWorkerWnd; 35 HICON m_hIcon; 36 DWORD m_dwInfoFlags; 37 UINT m_uShowTime; 38 UINT m_uInterval; 39 UINT m_cRetryCount; 40 UINT m_uContinuePoolInterval; 41 BOOL m_bIsShown; 42 HRESULT m_hRes; 43 IQueryContinue* m_pqc; 44 CStringW m_szTip; 45 CStringW m_szInfo; 46 CStringW m_szInfoTitle; 47 48private: 49 VOID RemoveIcon(); 50 VOID DelayRemoveIcon(IN HRESULT hRes); 51 VOID TimeoutIcon(); 52 53 VOID SetUpNotifyData( 54 IN UINT uFlags, 55 IN OUT PNOTIFYICONDATAW pnid); 56 57 static LRESULT CALLBACK 58 WorkerWndProc( 59 IN HWND hWnd, 60 IN UINT uMsg, 61 IN WPARAM wParam, 62 IN LPARAM lParam); 63 64public: 65 CUserNotification(); 66 ~CUserNotification(); 67 68 // IUserNotification 69 STDMETHOD(SetBalloonInfo)( 70 IN LPCWSTR pszTitle, 71 IN LPCWSTR pszText, 72 IN DWORD dwInfoFlags) override; 73 74 STDMETHOD(SetBalloonRetry)( 75 IN DWORD dwShowTime, // Time intervals in milliseconds 76 IN DWORD dwInterval, 77 IN UINT cRetryCount) override; 78 79 STDMETHOD(SetIconInfo)( 80 IN HICON hIcon, 81 IN LPCWSTR pszToolTip) override; 82 83 // Blocks until the notification times out. 84 STDMETHOD(Show)( 85 IN IQueryContinue* pqc, 86 IN DWORD dwContinuePollInterval) override; 87 88 STDMETHOD(PlaySound)( 89 IN LPCWSTR pszSoundName) override; 90 91#if 0 92 // IUserNotification2 93 // Blocks until the notification times out. 94 STDMETHOD(Show)( 95 IN IQueryContinue* pqc, 96 IN DWORD dwContinuePollInterval, 97 IN IUserNotificationCallback* pSink) override; 98#endif 99 100 DECLARE_REGISTRY_RESOURCEID(IDR_USERNOTIFICATION) 101 DECLARE_NOT_AGGREGATABLE(CUserNotification) 102 103 DECLARE_PROTECT_FINAL_CONSTRUCT() 104 105 BEGIN_COM_MAP(CUserNotification) 106 COM_INTERFACE_ENTRY_IID(IID_IUserNotification , IUserNotification ) 107 // COM_INTERFACE_ENTRY_IID(IID_IUserNotification2, IUserNotification2) 108 END_COM_MAP() 109}; 110 111#endif /* _USERNOTIFICATION_H_ */