Index: dll/cpl/timedate/clock.c =================================================================== --- dll/cpl/timedate/clock.c (revision 72835) +++ dll/cpl/timedate/clock.c (working copy) @@ -182,20 +182,18 @@ 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 @@ 0, SRCCOPY); - SelectObject(hdcMem, hWinBrushOld); SelectObject(hdcMem, hBmpOld); DeleteObject(hBmp); } @@ -232,6 +229,10 @@ 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);