4c152098cda0cef6ddc382383e90bf2372ca29b3
[reactos.git] / base / shell / explorer / trayclock.h
1 #pragma once
2
3 const struct
4 {
5 BOOL IsTime;
6 DWORD dwFormatFlags;
7 LPCWSTR lpFormat;
8 } ClockWndFormats[] = {
9 { TRUE, 0, NULL },
10 { FALSE, 0, L"dddd" },
11 { FALSE, DATE_SHORTDATE, NULL }
12 };
13 const UINT ClockWndFormatsCount = _ARRAYSIZE(ClockWndFormats);
14
15 #define CLOCKWND_FORMAT_COUNT ClockWndFormatsCount
16
17 extern const WCHAR szTrayClockWndClass[];
18 class CTrayClockWnd :
19 public CComObjectRootEx<CComMultiThreadModelNoCS>,
20 public CWindowImpl < CTrayClockWnd, CWindow, CControlWinTraits >
21 {
22 HWND hWndNotify;
23 HFONT hFont;
24 COLORREF textColor;
25 RECT rcText;
26 SYSTEMTIME LocalTime;
27
28 union
29 {
30 DWORD dwFlags;
31 struct
32 {
33 DWORD IsTimerEnabled : 1;
34 DWORD IsInitTimerEnabled : 1;
35 DWORD LinesMeasured : 1;
36 DWORD IsHorizontal : 1;
37 };
38 };
39 DWORD LineSpacing;
40 SIZE CurrentSize;
41 WORD VisibleLines;
42 SIZE LineSizes[CLOCKWND_FORMAT_COUNT];
43 WCHAR szLines[CLOCKWND_FORMAT_COUNT][48];
44
45 public:
46 CTrayClockWnd();
47 virtual ~CTrayClockWnd();
48
49 private:
50 LRESULT OnThemeChanged();
51 LRESULT OnThemeChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
52
53 BOOL MeasureLines();
54 WORD GetMinimumSize(IN BOOL Horizontal, IN OUT PSIZE pSize);
55 VOID UpdateWnd();
56 VOID Update();
57 UINT CalculateDueTime();
58 BOOL ResetTime();
59 VOID CalibrateTimer();
60 LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
61 LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
62 VOID SetFont(IN HFONT hNewFont, IN BOOL bRedraw);
63 LRESULT DrawBackground(HDC hdc);
64 LRESULT OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
65 LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
66 LRESULT OnGetMinimumSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
67 LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
68 LRESULT OnSetFont(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
69 LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
70 LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
71 LRESULT OnTaskbarSettingsChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
72 LRESULT OnNcLButtonDblClick(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
73
74 public:
75 DECLARE_WND_CLASS_EX(szTrayClockWndClass, CS_DBLCLKS, COLOR_3DFACE)
76
77 BEGIN_MSG_MAP(CTrayClockWnd)
78 MESSAGE_HANDLER(WM_CREATE, OnCreate)
79 MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
80 MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
81 MESSAGE_HANDLER(WM_SIZE, OnSize)
82 MESSAGE_HANDLER(WM_PAINT, OnPaint)
83 MESSAGE_HANDLER(WM_PRINTCLIENT, OnPaint)
84 MESSAGE_HANDLER(WM_THEMECHANGED, OnThemeChanged)
85 MESSAGE_HANDLER(WM_TIMER, OnTimer)
86 MESSAGE_HANDLER(WM_NCHITTEST, OnNcHitTest)
87 MESSAGE_HANDLER(WM_SETFONT, OnSetFont)
88 MESSAGE_HANDLER(TCWM_GETMINIMUMSIZE, OnGetMinimumSize)
89 MESSAGE_HANDLER(TWM_SETTINGSCHANGED, OnTaskbarSettingsChanged)
90 MESSAGE_HANDLER(WM_NCLBUTTONDBLCLK, OnNcLButtonDblClick)
91 END_MSG_MAP()
92
93 HWND _Init(IN HWND hWndParent);
94 };