[TIMEDATE] Make the custom clock control aware of the theming. By Carlo Bramini....
authorAmine Khaldi <amine.khaldi@reactos.org>
Sat, 12 Nov 2016 20:24:07 +0000 (20:24 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Sat, 12 Nov 2016 20:24:07 +0000 (20:24 +0000)
svn path=/trunk/; revision=73214

reactos/dll/cpl/timedate/clock.c

index d435950..ebf9e8d 100644 (file)
@@ -182,20 +182,18 @@ ClockWndProc(HWND hwnd,
                                               pClockData->cyClient);
                 if (hBmp)
                 {
-                    HBRUSH hWinBrush, hWinBrushOld;
+                    RECT rcParent;
+                    HWND hParentWnd = GetParent(hwnd);
                     INT oldMap, Radius;
                     POINT oldOrg;
 
                     hBmpOld = SelectObject(hdcMem, hBmp);
 
-                    hWinBrush = GetSysColorBrush(COLOR_BTNFACE);
-                    hWinBrushOld = SelectObject(hdcMem, hWinBrush);
-                    PatBlt(hdcMem,
-                           0,
-                           0,
-                           pClockData->cxClient,
-                           pClockData->cyClient,
-                           PATCOPY);
+                    SetRect(&rcParent, 0, 0, pClockData->cxClient, pClockData->cyClient);
+                    MapWindowPoints(hwnd, hParentWnd, (POINT*)&rcParent, 2);
+                    OffsetViewportOrgEx(hdcMem, -rcParent.left, -rcParent.top, &oldOrg);
+                    SendMessage(hParentWnd, WM_PRINT, (WPARAM)hdcMem, PRF_ERASEBKGND | PRF_CLIENT);
+                    SetViewportOrgEx(hdcMem, oldOrg.x, oldOrg.y, NULL);
 
                     oldMap = SetMapMode(hdcMem, MM_ISOTROPIC);
                     SetWindowExtEx(hdcMem, 3600, 2700, NULL);
@@ -221,7 +219,6 @@ ClockWndProc(HWND hwnd,
                            0,
                            SRCCOPY);
 
-                    SelectObject(hdcMem, hWinBrushOld);
                     SelectObject(hdcMem, hBmpOld);
                     DeleteObject(hBmp);
                 }
@@ -232,6 +229,10 @@ ClockWndProc(HWND hwnd,
             EndPaint(hwnd, &ps);
             break;
 
+        /* No need to erase background, handled during paint */
+        case WM_ERASEBKGND:
+            return 1;
+
         case WM_DESTROY:
             DeleteObject(pClockData->hGreyPen);
             DeleteObject(pClockData->hGreyBrush);