ReactOS  0.4.15-dev-1148-g8a4273b
trayclock.cpp
Go to the documentation of this file.
1 /*
2  * ReactOS Explorer
3  *
4  * Copyright 2006 - 2007 Thomas Weidenmueller <w3seek@reactos.org>
5  * Copyright 2018 Ged Murphy <gedmurphy@reactos.org>
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 #include "precomp.h"
23 
24 /*
25  * TrayClockWnd
26  */
27 
28 const struct
29 {
33 } ClockWndFormats[] = {
34  { TRUE, 0, NULL },
35  { FALSE, 0, L"dddd" },
37 };
39 
40 #define CLOCKWND_FORMAT_COUNT ClockWndFormatsCount
41 
42 static const WCHAR szTrayClockWndClass[] = L"TrayClockWClass";
43 
45  public CComCoClass<CTrayClockWnd>,
46  public CComObjectRootEx<CComMultiThreadModelNoCS>,
47  public CWindowImpl < CTrayClockWnd, CWindow, CControlWinTraits >,
48  public IOleWindow
49 {
55 
56  union
57  {
59  struct
60  {
65  };
66  };
72 
73 public:
74  CTrayClockWnd();
75  virtual ~CTrayClockWnd();
76 
77 private:
80 
82  WORD GetMinimumSize(IN BOOL Horizontal, IN OUT PSIZE pSize);
83  VOID UpdateWnd();
84  VOID Update();
86  BOOL ResetTime();
88  LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
89  LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
90  VOID SetFont(IN HFONT hNewFont, IN BOOL bRedraw);
93  LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
96  LRESULT OnSetFont(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
97  LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
98  LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
101 
102 public:
103 
105  {
106  if (!phwnd)
107  return E_INVALIDARG;
108  *phwnd = m_hWnd;
109  return S_OK;
110  }
111 
113  {
114  return E_NOTIMPL;
115  }
116 
118 
122  END_COM_MAP()
123 
125 
133  MESSAGE_HANDLER(WM_THEMECHANGED, OnThemeChanged)
140  END_MSG_MAP()
141 
143 };
144 
145 #define ID_TRAYCLOCK_TIMER 0
146 #define ID_TRAYCLOCK_TIMER_INIT 1
147 
148 #define TRAY_CLOCK_WND_SPACING_X 5
149 #define TRAY_CLOCK_WND_SPACING_Y 0
150 
152  hFont(NULL),
153  dwFlags(0),
154  LineSpacing(0),
155  VisibleLines(0)
156 {
157  ZeroMemory(&textColor, sizeof(textColor));
158  ZeroMemory(&rcText, sizeof(rcText));
159  ZeroMemory(&LocalTime, sizeof(LocalTime));
161  ZeroMemory(LineSizes, sizeof(LineSizes));
162  ZeroMemory(szLines, sizeof(szLines));
163 }
165 
167 {
168  LOGFONTW clockFont;
169  HTHEME clockTheme;
170  HFONT hFont;
171 
172  clockTheme = OpenThemeData(m_hWnd, L"Clock");
173 
174  if (clockTheme)
175  {
176  GetThemeFont(clockTheme,
177  NULL,
178  CLP_TIME,
179  0,
180  TMT_FONT,
181  &clockFont);
182 
183  hFont = CreateFontIndirectW(&clockFont);
184 
185  GetThemeColor(clockTheme,
186  CLP_TIME,
187  0,
189  &textColor);
190 
191  if (this->hFont != NULL)
192  DeleteObject(this->hFont);
193 
194  SetFont(hFont, FALSE);
195  }
196  else
197  {
198  /* We don't need to set a font here, our parent will use
199  * WM_SETFONT to set the right one when themes are not enabled. */
200  textColor = RGB(0, 0, 0);
201  }
202 
203  CloseThemeData(clockTheme);
204 
205  return TRUE;
206 }
207 
209 {
210  return OnThemeChanged();
211 }
212 
214 {
215  HDC hDC;
216  HFONT hPrevFont;
217  UINT c, i;
218  BOOL bRet = TRUE;
219 
220  hDC = GetDC();
221  if (hDC != NULL)
222  {
223  if (hFont)
224  hPrevFont = (HFONT) SelectObject(hDC, hFont);
225 
226  for (i = 0; i < CLOCKWND_FORMAT_COUNT && bRet; i++)
227  {
228  if (szLines[i][0] != L'\0' &&
230  &LineSizes[i]))
231  {
232  bRet = FALSE;
233  break;
234  }
235  }
236 
237  if (hFont)
238  SelectObject(hDC, hPrevFont);
239 
240  ReleaseDC(hDC);
241 
242  if (bRet)
243  {
244  LineSpacing = 0;
245 
246  /* calculate the line spacing */
247  for (i = 0, c = 0; i < CLOCKWND_FORMAT_COUNT; i++)
248  {
249  if (LineSizes[i].cx > 0)
250  {
252  c++;
253  }
254  }
255 
256  if (c > 0)
257  {
258  /* We want a spacing of 1/2 line */
259  LineSpacing = (LineSpacing / c) / 2;
260  }
261 
262  return TRUE;
263  }
264  }
265 
266  return FALSE;
267 }
268 
270 {
271  WORD iLinesVisible = 0;
272  UINT i;
273  SIZE szMax = { 0, 0 };
274 
275  if (!LinesMeasured)
277 
278  if (!LinesMeasured)
279  return 0;
280 
281  for (i = 0; i < CLOCKWND_FORMAT_COUNT; i++)
282  {
283  if (LineSizes[i].cx != 0)
284  {
285  if (iLinesVisible > 0)
286  {
287  if (Horizontal)
288  {
289  if (szMax.cy + LineSizes[i].cy + (LONG) LineSpacing >
290  pSize->cy - (2 * TRAY_CLOCK_WND_SPACING_Y))
291  {
292  break;
293  }
294  }
295  else
296  {
297  if (LineSizes[i].cx > pSize->cx - (2 * TRAY_CLOCK_WND_SPACING_X))
298  break;
299  }
300 
301  /* Add line spacing */
302  szMax.cy += LineSpacing;
303  }
304 
305  iLinesVisible++;
306 
307  /* Increase maximum rectangle */
308  szMax.cy += LineSizes[i].cy;
309  if (LineSizes[i].cx > szMax.cx)
310  szMax.cx = LineSizes[i].cx;
311  }
312  }
313 
314  szMax.cx += 2 * TRAY_CLOCK_WND_SPACING_X;
315  szMax.cy += 2 * TRAY_CLOCK_WND_SPACING_Y;
316 
317  *pSize = szMax;
318 
319  return iLinesVisible;
320 }
321 
323 {
324  SIZE szPrevCurrent;
325  UINT BufSize, i;
326  INT iRet;
327  RECT rcClient;
328 
329  ZeroMemory(LineSizes, sizeof(LineSizes));
330 
331  szPrevCurrent = CurrentSize;
332 
333  for (i = 0; i < CLOCKWND_FORMAT_COUNT; i++)
334  {
335  szLines[i][0] = L'\0';
336  BufSize = _countof(szLines[0]);
337 
338  if (ClockWndFormats[i].IsTime)
339  {
342  &LocalTime,
343  ClockWndFormats[i].lpFormat,
344  szLines[i],
345  BufSize);
346  }
347  else
348  {
351  &LocalTime,
353  szLines[i],
354  BufSize);
355  }
356 
357  if (iRet != 0 && i == 0)
358  {
359  /* Set the window text to the time only */
361  }
362  }
363 
365 
366  if (LinesMeasured &&
367  GetClientRect(&rcClient))
368  {
369  SIZE szWnd;
370 
371  szWnd.cx = rcClient.right;
372  szWnd.cy = rcClient.bottom;
373 
375  CurrentSize = szWnd;
376  }
377 
378  if (IsWindowVisible())
379  {
381 
382  if (szPrevCurrent.cx != CurrentSize.cx ||
383  szPrevCurrent.cy != CurrentSize.cy)
384  {
385  /* Ask the parent to resize */
386  NMHDR nmh = {GetParent(), 0, NTNWM_REALIGN};
387  GetParent().SendMessage(WM_NOTIFY, 0, (LPARAM) &nmh);
388  }
389  }
390 
391  int iDateLength = GetDateFormat(LOCALE_USER_DEFAULT,
393  &LocalTime,
394  NULL,
395  NULL,
396  0);
397  if (iDateLength <= 0)
398  {
399  return;
400  }
401 
402  WCHAR* szDate = new WCHAR[iDateLength];
405  &LocalTime,
406  NULL,
407  szDate,
408  iDateLength) > 0)
409  {
411  reinterpret_cast<UINT_PTR>(m_hWnd),
412  szDate);
413  }
414  delete[] szDate;
415 }
416 
418 {
420  UpdateWnd();
421 }
422 
424 {
425  UINT uiDueTime;
426 
428  uiDueTime = 1000 - (UINT) LocalTime.wMilliseconds;
430  uiDueTime += (59 - (UINT) LocalTime.wSecond) * 1000;
431 
432  if (uiDueTime < USER_TIMER_MINIMUM || uiDueTime > USER_TIMER_MAXIMUM)
433  uiDueTime = 1000;
434  else
435  {
436  /* Add an artificial delay of 0.05 seconds to make sure the timer
437  doesn't fire too early*/
438  uiDueTime += 50;
439  }
440 
441  return uiDueTime;
442 }
443 
445 {
446  UINT uiDueTime;
447  BOOL Ret;
448 
449  /* Disable all timers */
450  if (IsTimerEnabled)
451  {
454  }
455  else if (IsInitTimerEnabled)
456  {
458  }
459 
460  uiDueTime = CalculateDueTime();
461 
462  /* Set the new timer */
463  Ret = SetTimer(ID_TRAYCLOCK_TIMER_INIT, uiDueTime, NULL) != 0;
464  IsInitTimerEnabled = Ret;
465 
466  return Ret;
467 }
468 
470 {
471  UINT uiDueTime;
472  BOOL Ret;
473  UINT uiWait1, uiWait2;
474 
475  /* Kill the initialization timer */
478 
479  uiDueTime = CalculateDueTime();
480 
482  {
483  uiWait1 = 1000 - 200;
484  uiWait2 = 1000;
485  }
486  else
487  {
488  uiWait1 = 60 * 1000 - 200;
489  uiWait2 = 60 * 1000;
490  }
491 
492  if (uiDueTime > uiWait1)
493  {
494  /* The update of the clock will be up to 200 ms late, but that's
495  acceptable. We're going to setup a timer that fires depending
496  uiWait2. */
497  Ret = SetTimer(ID_TRAYCLOCK_TIMER, uiWait2, NULL) != 0;
498  IsTimerEnabled = Ret;
499  }
500  else
501  {
502  /* Recalibrate the timer and recalculate again when the current
503  minute/second ends. */
504  ResetTime();
505  }
506 
507  /* Update the time */
508  Update();
509 }
510 
512 {
513  /* Disable all timers */
514  if (IsTimerEnabled)
515  {
517  }
518  else if (IsInitTimerEnabled)
519  {
521  }
522 
523  return TRUE;
524 }
525 
527 {
528  RECT rcClient;
529  HFONT hPrevFont;
530  INT iPrevBkMode;
531  UINT i, line;
532 
533  PAINTSTRUCT ps;
534  HDC hDC = (HDC) wParam;
535 
536  if (wParam == 0)
537  {
538  hDC = BeginPaint(&ps);
539  }
540 
541  if (hDC == NULL)
542  return FALSE;
543 
544  if (LinesMeasured &&
545  GetClientRect(&rcClient))
546  {
547  iPrevBkMode = SetBkMode(hDC, TRANSPARENT);
548 
550 
551  hPrevFont = (HFONT) SelectObject(hDC, hFont);
552 
553  rcClient.top = (rcClient.bottom - CurrentSize.cy) / 2;
554  rcClient.bottom = rcClient.top + CurrentSize.cy;
555 
556  for (i = 0, line = 0;
558  i++)
559  {
560  if (LineSizes[i].cx != 0)
561  {
562  TextOut(hDC,
563  (rcClient.right - LineSizes[i].cx) / 2,
564  rcClient.top + TRAY_CLOCK_WND_SPACING_Y,
565  szLines[i],
566  wcslen(szLines[i]));
567 
568  rcClient.top += LineSizes[i].cy + LineSpacing;
569  line++;
570  }
571  }
572 
573  SelectObject(hDC, hPrevFont);
574 
575  SetBkMode(hDC, iPrevBkMode);
576  }
577 
578  if (wParam == 0)
579  {
580  EndPaint(&ps);
581  }
582 
583  return TRUE;
584 }
585 
587 {
588  hFont = hNewFont;
590  if (bRedraw)
591  {
593  }
594 }
595 
597 {
598  RECT rect;
599 
602 
603  return TRUE;
604 }
605 
607 {
608  HDC hdc = (HDC) wParam;
609 
610  if (!IsAppThemed())
611  {
612  bHandled = FALSE;
613  return 0;
614  }
615 
616  return DrawBackground(hdc);
617 }
618 
620 {
621  switch (wParam)
622  {
623  case ID_TRAYCLOCK_TIMER:
624  Update();
625  break;
626 
628  CalibrateTimer();
629  break;
630  }
631  return TRUE;
632 }
633 
635 {
637 
638  return (LRESULT) GetMinimumSize((BOOL) wParam, (PSIZE) lParam) != 0;
639 }
640 
642 {
643  return GetParent().SendMessage(uMsg, wParam, lParam);
644 }
645 
647 {
649  return TRUE;
650 }
651 
653 {
655 
656  TOOLINFOW ti = { 0 };
657  ti.cbSize = TTTOOLINFOW_V1_SIZE;
658  ti.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
659  ti.hwnd = m_hWnd;
660  ti.uId = reinterpret_cast<UINT_PTR>(m_hWnd);
661  ti.lpszText = NULL;
662  ti.lParam = NULL;
663 
664  m_tooltip.AddTool(&ti);
665 
667  {
668  ResetTime();
669  }
670 
671  /* Update the time */
672  Update();
673 
674  return TRUE;
675 }
676 
678 {
679  SIZE szClient;
680 
681  szClient.cx = LOWORD(lParam);
682  szClient.cy = HIWORD(lParam);
683 
685  CurrentSize = szClient;
686 
688  return TRUE;
689 }
690 
692 {
693  BOOL bRealign = FALSE;
694 
695  TaskbarSettings* newSettings = (TaskbarSettings*)lParam;
696  if (newSettings->bShowSeconds != g_TaskbarSettings.bShowSeconds)
697  {
700  {
701  bRealign = TRUE;
702 
703  ResetTime();
704  }
705  }
706 
707  if (newSettings->sr.HideClock != g_TaskbarSettings.sr.HideClock)
708  {
709  g_TaskbarSettings.sr.HideClock = newSettings->sr.HideClock;
711  bRealign = TRUE;
712 
714  {
715  /* Disable all timers */
716  if (IsTimerEnabled)
717  {
720  }
721  else if (IsInitTimerEnabled)
722  {
725  }
726  }
727  else
728  {
729  ResetTime();
730  }
731  }
732 
733  if (bRealign)
734  {
735  /* Ask the parent to resize */
736  NMHDR nmh = {GetParent(), 0, NTNWM_REALIGN};
737  GetParent().SendMessage(WM_NOTIFY, 0, (LPARAM) &nmh);
738  Update();
739  }
740  return 0;
741 }
742 
744 {
745  if (IsWindowVisible())
746  {
747  //FIXME: use SHRunControlPanel
748  ShellExecuteW(m_hWnd, NULL, L"timedate.cpl", NULL, NULL, SW_NORMAL);
749  }
750  return TRUE;
751 }
752 
754 {
755  IsHorizontal = TRUE;
756 
757  /* Create the window. The tray window is going to move it to the correct
758  position and resize it as needed. */
759  DWORD dwStyle = WS_CHILD | WS_CLIPSIBLINGS;
761  dwStyle |= WS_VISIBLE;
762 
763  Create(hWndParent, 0, NULL, dwStyle);
764  if (!m_hWnd)
765  return E_FAIL;
766 
767  SetWindowTheme(m_hWnd, L"TrayNotify", NULL);
768 
769  return S_OK;
770 
771 };
772 
774 {
775  return ShellObjectCreatorInit<CTrayClockWnd>(hwndParent, riid, ppv);
776 }
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: trayclock.cpp:641
#define IN
Definition: typedefs.h:39
#define SW_NORMAL
Definition: winuser.h:763
const struct @84 ClockWndFormats[]
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: trayclock.cpp:511
DWORD dwFormatFlags
Definition: trayclock.cpp:31
#define REFIID
Definition: guiddef.h:118
DWORD HideClock
Definition: precomp.h:195
#define WM_CONTEXTMENU
Definition: richedit.h:64
static const WCHAR szTrayClockWndClass[]
Definition: trayclock.cpp:42
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define RGB(r, g, b)
Definition: precomp.h:62
WORD GetMinimumSize(IN BOOL Horizontal, IN OUT PSIZE pSize)
Definition: trayclock.cpp:269
DWORD IsHorizontal
Definition: trayclock.cpp:64
#define TRUE
Definition: types.h:120
#define SW_HIDE
Definition: winuser.h:762
REFIID riid
Definition: precomp.h:44
HWND Create(HWND hWndParent, _U_RECT rect=NULL, LPCTSTR szWindowName=NULL, DWORD dwStyle=0, DWORD dwExStyle=0, _U_MENUorID MenuOrID=0U, LPVOID lpCreateParam=NULL)
Definition: atlwin.h:1637
#define LOCALE_USER_DEFAULT
#define DATE_SHORTDATE
Definition: winnls.h:193
#define _ARRAYSIZE(A)
Definition: ntbasedef.h:702
LRESULT OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: trayclock.cpp:606
BOOL AddTool(IN CONST TTTOOLINFOW *pInfo)
Definition: rosctrls.h:635
#define TNWM_GETMINIMUMSIZE
Definition: precomp.h:333
HRESULT WINAPI ContextSensitiveHelp(BOOL fEnterMode)
Definition: trayclock.cpp:112
static HDC
Definition: imagelist.c:92
BOOL IsTime
Definition: trayclock.cpp:30
#define DECLARE_WND_CLASS_EX(WndClassName, style, bkgnd)
Definition: atlwin.h:1886
REFIID LPVOID * ppv
Definition: atlbase.h:39
LONG top
Definition: windef.h:307
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1499
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
#define ZeroMemory
Definition: winbase.h:1648
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
#define DECLARE_NOT_AGGREGATABLE(x)
Definition: atlcom.h:611
UINT_PTR WPARAM
Definition: windef.h:207
void EndPaint(LPPAINTSTRUCT lpPaint)
Definition: atlwin.h:495
HRESULT WINAPI GetThemeFont(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, int iPropId, LOGFONTW *pFont)
Definition: property.c:108
#define WS_CHILD
Definition: pedump.c:617
BOOL bShowSeconds
Definition: precomp.h:207
#define ID_TRAYCLOCK_TIMER_INIT
Definition: trayclock.cpp:146
BOOL SetWindowText(LPCTSTR lpszString)
Definition: atlwin.h:1232
LONG right
Definition: windef.h:308
#define E_FAIL
Definition: ddrawi.h:102
#define BOOL
Definition: nt_native.h:43
int32_t INT
Definition: typedefs.h:58
TW_STRUCKRECTS2 sr
Definition: precomp.h:209
& rect
Definition: startmenu.cpp:1413
WPARAM wParam
Definition: combotst.c:138
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: trayclock.cpp:652
#define WM_PRINTCLIENT
Definition: richedit.h:70
BOOL InvalidateRect(LPCRECT lpRect, BOOL bErase=TRUE)
Definition: atlwin.h:834
#define TTTOOLINFOW_V1_SIZE
Definition: commctrl.h:1717
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1034
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define COLOR_3DFACE
Definition: winuser.h:919
CTooltips m_tooltip
Definition: trayclock.cpp:54
#define FALSE
Definition: types.h:117
VOID UpdateTipText(IN HWND hwndToolOwner, IN UINT uId, IN PCWSTR szText, IN HINSTANCE hinstResourceOwner=NULL)
Definition: rosctrls.h:683
#define TWM_SETTINGSCHANGED
Definition: precomp.h:132
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
BOOL WINAPI IsAppThemed(void)
Definition: system.c:596
#define TTS_ALWAYSTIP
Definition: commctrl.h:1753
UINT_PTR SetTimer(UINT_PTR nIDEvent, UINT nElapse, void(CALLBACK *lpfnTimer)(HWND, UINT, UINT_PTR, DWORD)=NULL)
Definition: atlwin.h:1190
BOOL GetClientRect(LPRECT lpRect) const
Definition: atlwin.h:507
VOID UpdateWnd()
Definition: trayclock.cpp:322
#define TTF_IDISHWND
Definition: commctrl.h:1760
VOID SetFont(IN HFONT hNewFont, IN BOOL bRedraw)
Definition: trayclock.cpp:586
HRESULT WINAPI SetWindowTheme(_In_ HWND hwnd, _In_ LPCWSTR pszSubAppName, _In_ LPCWSTR pszSubIdList)
Definition: uxthemesupp.c:69
#define TRANSPARENT
Definition: wingdi.h:949
BOOL KillTimer(UINT_PTR nIDEvent)
Definition: atlwin.h:908
SIZE LineSizes[CLOCKWND_FORMAT_COUNT]
Definition: trayclock.cpp:70
#define TMT_TEXTCOLOR
Definition: vssym32.h:328
#define E_INVALIDARG
Definition: ddrawi.h:101
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: trayclock.cpp:677
smooth NULL
Definition: ftsmooth.c:416
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
TaskbarSettings g_TaskbarSettings
Definition: settings.cpp:23
static HWND hwndParent
Definition: cryptui.c:300
LONG cx
Definition: windef.h:334
#define TMT_FONT
Definition: vssym32.h:144
LONG_PTR LPARAM
Definition: windef.h:208
Definition: parser.c:48
#define TOOLINFOW
Definition: commctrl.h:1711
HRESULT WINAPI GetWindow(HWND *phwnd)
Definition: trayclock.cpp:104
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:286
#define BufSize
Definition: FsRtlTunnel.c:28
DWORD LineSpacing
Definition: trayclock.cpp:67
#define SW_SHOW
Definition: winuser.h:769
LRESULT OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: trayclock.cpp:526
#define WM_DESTROY
Definition: winuser.h:1591
HRESULT WINAPI DrawThemeParentBackground(HWND hwnd, HDC hdc, RECT *prc)
Definition: draw.c:72
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:541
#define NTNWM_REALIGN
Definition: precomp.h:336
HRESULT Initialize(IN HWND hWndParent)
Definition: trayclock.cpp:753
SIZE CurrentSize
Definition: trayclock.cpp:68
if(!(yy_init))
Definition: macro.lex.yy.c:714
HDC BeginPaint(LPPAINTSTRUCT lpPaint)
Definition: atlwin.h:297
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define WM_SIZE
Definition: winuser.h:1593
#define TRAY_CLOCK_WND_SPACING_X
Definition: trayclock.cpp:148
LONG HRESULT
Definition: typedefs.h:79
#define END_MSG_MAP()
Definition: atlwin.h:1799
DWORD COLORREF
Definition: windef.h:300
#define _countof(array)
Definition: sndvol32.h:68
LRESULT OnGetMinimumSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: trayclock.cpp:634
UINT CalculateDueTime()
Definition: trayclock.cpp:423
#define WM_TIMER
Definition: winuser.h:1724
#define WINAPI
Definition: msvc.h:6
const GLubyte * c
Definition: glext.h:8905
#define ID_TRAYCLOCK_TIMER
Definition: trayclock.cpp:145
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
#define CLOCKWND_FORMAT_COUNT
Definition: trayclock.cpp:40
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
Definition: system.c:835
WORD wSecond
Definition: winbase.h:889
#define WM_PAINT
Definition: winuser.h:1602
WORD wMilliseconds
Definition: winbase.h:890
const UINT ClockWndFormatsCount
Definition: trayclock.cpp:38
char line[200]
Definition: main.c:97
static const WCHAR L[]
Definition: oid.c:1250
#define USER_TIMER_MAXIMUM
Definition: winuser.h:895
HDC hdc
Definition: main.c:9
DWORD LinesMeasured
Definition: trayclock.cpp:63
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
static const WCHAR szDate[]
Definition: http.c:100
LRESULT DrawBackground(HDC hdc)
Definition: trayclock.cpp:596
COLORREF textColor
Definition: trayclock.cpp:51
#define WM_LBUTTONDBLCLK
Definition: winuser.h:1760
HWND m_hWnd
Definition: atlwin.h:268
LPCWSTR lpFormat
Definition: trayclock.cpp:32
#define CS_DBLCLKS
Definition: winuser.h:646
HRESULT WINAPI GetThemeColor(HTHEME hTheme, int iPartId, int iStateId, int iPropId, COLORREF *pColor)
Definition: property.c:45
LRESULT OnTaskbarSettingsChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: trayclock.cpp:691
HWND Create(HWND hWndParent, DWORD dwStyles=WS_POPUP|TTS_NOPREFIX, DWORD dwExStyles=WS_EX_TOPMOST)
Definition: rosctrls.h:614
int ReleaseDC(HDC hDC)
Definition: atlwin.h:1006
#define GetTimeFormat
Definition: winnls.h:1186
WCHAR szLines[CLOCKWND_FORMAT_COUNT][48]
Definition: trayclock.cpp:71
BOOL MeasureLines()
Definition: trayclock.cpp:213
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:888
static HDC hDC
Definition: 3dtext.c:33
#define S_OK
Definition: intsafe.h:51
DWORD IsInitTimerEnabled
Definition: trayclock.cpp:62
#define TRAY_CLOCK_WND_SPACING_Y
Definition: trayclock.cpp:149
BOOL ShowWindow(int nCmdShow)
Definition: atlwin.h:1265
#define GetDateFormat
Definition: winnls.h:1181
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:561
#define DATE_LONGDATE
Definition: winnls.h:194
#define E_NOTIMPL
Definition: ddrawi.h:99
HRESULT CTrayClockWnd_CreateInstance(HWND hwndParent, REFIID riid, void **ppv)
Definition: trayclock.cpp:773
#define WS_POPUP
Definition: pedump.c:616
unsigned int UINT
Definition: ndis.h:50
#define WM_SETFONT
Definition: winuser.h:1632
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1780
LRESULT OnSetFont(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: trayclock.cpp:646
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define DECLARE_PROTECT_FINAL_CONSTRUCT()
Definition: atlcom.h:639
#define MESSAGE_HANDLER(msg, func)
Definition: atlwin.h:1808
_Out_opt_ int * cx
Definition: commctrl.h:581
#define OUT
Definition: typedefs.h:40
#define WM_CREATE
Definition: winuser.h:1590
LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: trayclock.cpp:619
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2274
const GUID IID_IOleWindow
#define c
Definition: ke_i.h:80
#define HIWORD(l)
Definition: typedefs.h:247
LRESULT SendMessage(UINT message, WPARAM wParam=0, LPARAM lParam=0)
Definition: atlwin.h:1048
#define TextOut
Definition: wingdi.h:4482
LONG bottom
Definition: windef.h:309
LRESULT OnThemeChanged()
Definition: trayclock.cpp:166
WORD VisibleLines
Definition: trayclock.cpp:69
VOID CalibrateTimer()
Definition: trayclock.cpp:469
#define TIME_NOSECONDS
Definition: winnls.h:275
SYSTEMTIME LocalTime
Definition: trayclock.cpp:53
CWindow GetParent() const
Definition: atlwin.h:654
#define END_COM_MAP()
Definition: atlcom.h:552
#define WM_ERASEBKGND
Definition: winuser.h:1607
LONG_PTR LRESULT
Definition: windef.h:209
#define WS_VISIBLE
Definition: pedump.c:620
LONG cy
Definition: windef.h:335
LPARAM lParam
Definition: combotst.c:139
#define TTS_NOPREFIX
Definition: commctrl.h:1754
#define LOWORD(l)
Definition: pedump.c:82
#define TTF_SUBCLASS
Definition: commctrl.h:1763
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
HDC GetDC()
Definition: atlwin.h:513
DWORD IsTimerEnabled
Definition: trayclock.cpp:61
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
Definition: system.c:950
#define WM_NOTIFY
Definition: richedit.h:61
BOOL WINAPI GetTextExtentPointW(_In_ HDC hdc, _In_reads_(c) LPCWSTR lpString, _In_ int c, _Out_ LPSIZE lpsz)
BOOL IsWindowVisible() const
Definition: atlwin.h:890
LRESULT OnLButtonDblClick(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
Definition: trayclock.cpp:743
virtual ~CTrayClockWnd()
Definition: trayclock.cpp:164
BOOL ResetTime()
Definition: trayclock.cpp:444