[EXPLORER] Minor cleanup/comment fixes.
[reactos.git] / base / shell / explorer / trayclock.cpp
index 9575783..f21ba2c 100644 (file)
@@ -39,7 +39,7 @@ const UINT ClockWndFormatsCount = _ARRAYSIZE(ClockWndFormats);
 
 #define CLOCKWND_FORMAT_COUNT ClockWndFormatsCount
 
-extern const WCHAR szTrayClockWndClass[];
+static const WCHAR szTrayClockWndClass[] = L"TrayClockWClass";
 
 class CTrayClockWnd :
     public CComCoClass<CTrayClockWnd>,
@@ -51,6 +51,7 @@ class CTrayClockWnd :
     COLORREF textColor;
     RECT rcText;
     SYSTEMTIME LocalTime;
+    CTooltips m_tooltip;
 
     union
     {
@@ -96,7 +97,7 @@ private:
     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);
+    LRESULT OnLButtonDblClick(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
 public:
 
@@ -135,14 +136,12 @@ public:
         MESSAGE_HANDLER(WM_SETFONT, OnSetFont)
         MESSAGE_HANDLER(TNWM_GETMINIMUMSIZE, OnGetMinimumSize)
         MESSAGE_HANDLER(TWM_SETTINGSCHANGED, OnTaskbarSettingsChanged)
-        MESSAGE_HANDLER(WM_NCLBUTTONDBLCLK, OnNcLButtonDblClick)
+        MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnLButtonDblClick)
     END_MSG_MAP()
 
     HRESULT Initialize(IN HWND hWndParent);
 };
 
-const WCHAR szTrayClockWndClass[] = L"TrayClockWClass";
-
 #define ID_TRAYCLOCK_TIMER  0
 #define ID_TRAYCLOCK_TIMER_INIT 1
 
@@ -388,6 +387,31 @@ VOID CTrayClockWnd::UpdateWnd()
             GetParent().SendMessage(WM_NOTIFY, 0, (LPARAM) &nmh);
         }
     }
+
+    int iDateLength = GetDateFormat(LOCALE_USER_DEFAULT,
+                                          DATE_LONGDATE,
+                                          &LocalTime,
+                                          NULL,
+                                          NULL,
+                                          0);
+    if (iDateLength <= 0)
+    {
+        return;
+    }
+
+    WCHAR* szDate = new WCHAR[iDateLength];
+    if (GetDateFormat(LOCALE_USER_DEFAULT,
+                      DATE_LONGDATE,
+                      &LocalTime,
+                      NULL,
+                      szDate,
+                      iDateLength) > 0)
+    {
+        m_tooltip.UpdateTipText(m_hWnd,
+                                reinterpret_cast<UINT_PTR>(m_hWnd),
+                                szDate);
+    }
+    delete[] szDate;
 }
 
 VOID CTrayClockWnd::Update()
@@ -534,7 +558,7 @@ LRESULT CTrayClockWnd::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
 
         hPrevFont = (HFONT) SelectObject(hDC, hFont);
 
-        rcClient.top = (rcClient.bottom / 2) - (CurrentSize.cy / 2);
+        rcClient.top = (rcClient.bottom - CurrentSize.cy) / 2;
         rcClient.bottom = rcClient.top + CurrentSize.cy;
 
         for (i = 0, line = 0;
@@ -624,7 +648,8 @@ LRESULT CTrayClockWnd::OnGetMinimumSize(UINT uMsg, WPARAM wParam, LPARAM lParam,
 
 LRESULT CTrayClockWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
 {
-    return HTTRANSPARENT;
+    // HTCLIENT is returned to receive WM_MOUSEMOVE messages for the tooltip
+    return HTCLIENT;
 }
 
 LRESULT CTrayClockWnd::OnSetFont(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
@@ -635,6 +660,18 @@ LRESULT CTrayClockWnd::OnSetFont(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL&
 
 LRESULT CTrayClockWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
 {
+    m_tooltip.Create(m_hWnd, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP);
+
+    TOOLINFOW ti = { 0 };
+    ti.cbSize = TTTOOLINFOW_V1_SIZE;
+    ti.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
+    ti.hwnd = m_hWnd;
+    ti.uId = reinterpret_cast<UINT_PTR>(m_hWnd);
+    ti.lpszText = NULL;
+    ti.lParam = NULL;
+
+    m_tooltip.AddTool(&ti);
+
     ResetTime();
     return TRUE;
 }
@@ -681,23 +718,12 @@ LRESULT CTrayClockWnd::OnTaskbarSettingsChanged(UINT uMsg, WPARAM wParam, LPARAM
     return 0;
 }
 
-LRESULT CTrayClockWnd::OnNcLButtonDblClick(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+LRESULT CTrayClockWnd::OnLButtonDblClick(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
 {
     if (IsWindowVisible())
     {
-        /* We get all WM_NCLBUTTONDBLCLK for the taskbar so we need to check if it is on the clock*/
-        RECT rcClock;
-        if (GetWindowRect(&rcClock))
-        {
-            POINT ptClick;
-            ptClick.x = MAKEPOINTS(lParam).x;
-            ptClick.y = MAKEPOINTS(lParam).y;
-            if (PtInRect(&rcClock, ptClick))
-            {
-                //FIXME: use SHRunControlPanel
-                ShellExecuteW(m_hWnd, NULL, L"timedate.cpl", NULL, NULL, SW_NORMAL);
-            }
-        }
+        //FIXME: use SHRunControlPanel
+        ShellExecuteW(m_hWnd, NULL, L"timedate.cpl", NULL, NULL, SW_NORMAL);
     }
     return TRUE;
 }