mirror of
https://github.com/reactos/reactos.git
synced 2026-05-22 23:30:07 +08:00
[EXPLORER] -Make CSysPagerWnd, CTaskSwitchWnd, CTrayClockWnd and CTrayNotifyWnd proper com objects so that their lifetime is managed properly.
This commit is contained in:
@@ -25,6 +25,123 @@
|
||||
* TrayClockWnd
|
||||
*/
|
||||
|
||||
const struct
|
||||
{
|
||||
BOOL IsTime;
|
||||
DWORD dwFormatFlags;
|
||||
LPCWSTR lpFormat;
|
||||
} ClockWndFormats[] = {
|
||||
{ TRUE, 0, NULL },
|
||||
{ FALSE, 0, L"dddd" },
|
||||
{ FALSE, DATE_SHORTDATE, NULL }
|
||||
};
|
||||
const UINT ClockWndFormatsCount = _ARRAYSIZE(ClockWndFormats);
|
||||
|
||||
#define CLOCKWND_FORMAT_COUNT ClockWndFormatsCount
|
||||
|
||||
extern const WCHAR szTrayClockWndClass[];
|
||||
|
||||
class CTrayClockWnd :
|
||||
public CComCoClass<CTrayClockWnd>,
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public CWindowImpl < CTrayClockWnd, CWindow, CControlWinTraits >,
|
||||
public IOleWindow
|
||||
{
|
||||
HWND hWndNotify;
|
||||
HFONT hFont;
|
||||
COLORREF textColor;
|
||||
RECT rcText;
|
||||
SYSTEMTIME LocalTime;
|
||||
|
||||
union
|
||||
{
|
||||
DWORD dwFlags;
|
||||
struct
|
||||
{
|
||||
DWORD IsTimerEnabled : 1;
|
||||
DWORD IsInitTimerEnabled : 1;
|
||||
DWORD LinesMeasured : 1;
|
||||
DWORD IsHorizontal : 1;
|
||||
};
|
||||
};
|
||||
DWORD LineSpacing;
|
||||
SIZE CurrentSize;
|
||||
WORD VisibleLines;
|
||||
SIZE LineSizes[CLOCKWND_FORMAT_COUNT];
|
||||
WCHAR szLines[CLOCKWND_FORMAT_COUNT][48];
|
||||
|
||||
public:
|
||||
CTrayClockWnd();
|
||||
virtual ~CTrayClockWnd();
|
||||
|
||||
private:
|
||||
LRESULT OnThemeChanged();
|
||||
LRESULT OnThemeChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
|
||||
BOOL MeasureLines();
|
||||
WORD GetMinimumSize(IN BOOL Horizontal, IN OUT PSIZE pSize);
|
||||
VOID UpdateWnd();
|
||||
VOID Update();
|
||||
UINT CalculateDueTime();
|
||||
BOOL ResetTime();
|
||||
VOID CalibrateTimer();
|
||||
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
VOID SetFont(IN HFONT hNewFont, IN BOOL bRedraw);
|
||||
LRESULT DrawBackground(HDC hdc);
|
||||
LRESULT OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
LRESULT OnGetMinimumSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
LRESULT OnSetFont(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
LRESULT OnTaskbarSettingsChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
LRESULT OnNcLButtonDblClick(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||
|
||||
public:
|
||||
|
||||
HRESULT WINAPI GetWindow(HWND* phwnd)
|
||||
{
|
||||
if (!phwnd)
|
||||
return E_INVALIDARG;
|
||||
*phwnd = m_hWnd;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT WINAPI ContextSensitiveHelp(BOOL fEnterMode)
|
||||
{
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
DECLARE_NOT_AGGREGATABLE(CTrayClockWnd)
|
||||
|
||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||
BEGIN_COM_MAP(CTrayClockWnd)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow)
|
||||
END_COM_MAP()
|
||||
|
||||
DECLARE_WND_CLASS_EX(szTrayClockWndClass, CS_DBLCLKS, COLOR_3DFACE)
|
||||
|
||||
BEGIN_MSG_MAP(CTrayClockWnd)
|
||||
MESSAGE_HANDLER(WM_CREATE, OnCreate)
|
||||
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
|
||||
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
|
||||
MESSAGE_HANDLER(WM_SIZE, OnSize)
|
||||
MESSAGE_HANDLER(WM_PAINT, OnPaint)
|
||||
MESSAGE_HANDLER(WM_PRINTCLIENT, OnPaint)
|
||||
MESSAGE_HANDLER(WM_THEMECHANGED, OnThemeChanged)
|
||||
MESSAGE_HANDLER(WM_TIMER, OnTimer)
|
||||
MESSAGE_HANDLER(WM_NCHITTEST, OnNcHitTest)
|
||||
MESSAGE_HANDLER(WM_SETFONT, OnSetFont)
|
||||
MESSAGE_HANDLER(TNWM_GETMINIMUMSIZE, OnGetMinimumSize)
|
||||
MESSAGE_HANDLER(TWM_SETTINGSCHANGED, OnTaskbarSettingsChanged)
|
||||
MESSAGE_HANDLER(WM_NCLBUTTONDBLCLK, OnNcLButtonDblClick)
|
||||
END_MSG_MAP()
|
||||
|
||||
HRESULT Initialize(IN HWND hWndParent);
|
||||
};
|
||||
|
||||
const WCHAR szTrayClockWndClass[] = L"TrayClockWClass";
|
||||
|
||||
#define ID_TRAYCLOCK_TIMER 0
|
||||
@@ -578,7 +695,7 @@ LRESULT CTrayClockWnd::OnNcLButtonDblClick(UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HWND CTrayClockWnd::_Init(IN HWND hWndParent)
|
||||
HRESULT CTrayClockWnd::Initialize(IN HWND hWndParent)
|
||||
{
|
||||
IsHorizontal = TRUE;
|
||||
|
||||
@@ -589,10 +706,16 @@ HWND CTrayClockWnd::_Init(IN HWND hWndParent)
|
||||
dwStyle |= WS_VISIBLE;
|
||||
|
||||
Create(hWndParent, 0, NULL, dwStyle);
|
||||
if (!m_hWnd)
|
||||
return E_FAIL;
|
||||
|
||||
if (m_hWnd != NULL)
|
||||
SetWindowTheme(m_hWnd, L"TrayNotify", NULL);
|
||||
SetWindowTheme(m_hWnd, L"TrayNotify", NULL);
|
||||
|
||||
return m_hWnd;
|
||||
return S_OK;
|
||||
|
||||
};
|
||||
|
||||
HRESULT CTrayClockWnd_CreateInstance(HWND hwndParent, REFIID riid, void **ppv)
|
||||
{
|
||||
return ShellObjectCreatorInit<CTrayClockWnd>(hwndParent, riid, ppv);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user