comctl32: Send a WM_CTLCOLORSTATIC message and erase the background while painting.
authorFrancois Gouget <fgouget@codeweavers.com>
Mon, 26 Sep 2011 14:22:40 +0000 (16:22 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 26 Sep 2011 20:42:02 +0000 (22:42 +0200)
dlls/comctl32/syslink.c

index 01d638c25261d7c973df47832ae99ebae21a9ffb..b2dfdad8efe38e3a512fdff30a42c77e813aba64 100644 (file)
@@ -832,6 +832,7 @@ static LRESULT SYSLINK_Draw (const SYSLINK_INFO *infoPtr, HDC hdc)
     PDOC_ITEM Current;
     HFONT hOldFont;
     COLORREF OldTextColor, OldBkColor;
+    HBRUSH hBrush;
 
     hOldFont = SelectObject(hdc, infoPtr->Font);
     OldTextColor = SetTextColor(hdc, infoPtr->TextColor);
@@ -843,6 +844,13 @@ static LRESULT SYSLINK_Draw (const SYSLINK_INFO *infoPtr, HDC hdc)
 
     if(rc.right < 0 || rc.bottom < 0) return 0;
 
+    hBrush = (HBRUSH)SendMessageW(infoPtr->Notify, WM_CTLCOLORSTATIC,
+                                  (WPARAM)hdc, (LPARAM)infoPtr->Self);
+    if (!hBrush)
+        hBrush = CreateSolidBrush(infoPtr->BackColor);
+    FillRect(hdc, &rc, hBrush);
+    DeleteObject(hBrush);
+
     for(Current = infoPtr->Items; Current != NULL; Current = Current->Next)
     {
         int n;
@@ -910,23 +918,6 @@ static LRESULT SYSLINK_Paint (const SYSLINK_INFO *infoPtr, HDC hdcParam)
     return 0;
 }
 
-/***********************************************************************
- * SYSLINK_EraseBkgnd
- * Handles the WM_ERASEBKGND message.
- */
-static LRESULT SYSLINK_EraseBkgnd (const SYSLINK_INFO *infoPtr, HDC hdc)
-{
-   HBRUSH hbr;
-   RECT r;
-
-   GetClientRect(infoPtr->Self, &r);
-   hbr = CreateSolidBrush(infoPtr->BackColor);
-   FillRect(hdc, &r, hbr);
-   DeleteObject(hbr);
-
-   return 1;
-}
-
 /***********************************************************************
  *           SYSLINK_SetFont
  * Set new Font for the SysLink control.
@@ -1572,7 +1563,7 @@ static LRESULT WINAPI SysLinkWindowProc(HWND hwnd, UINT message,
         return SYSLINK_Paint (infoPtr, (HDC)wParam);
 
     case WM_ERASEBKGND:
-        return SYSLINK_EraseBkgnd(infoPtr, (HDC)wParam);
+        return 0;
 
     case WM_SETCURSOR:
     {
@@ -1752,7 +1743,7 @@ static LRESULT WINAPI SysLinkWindowProc(HWND hwnd, UINT message,
         infoPtr->HasFocus = FALSE;
         infoPtr->MouseDownID = -1;
         infoPtr->TextColor = comctl32_color.clrWindowText;
-        infoPtr->LinkColor = comctl32_color.clrHotTrackingColor;
+        infoPtr->LinkColor = comctl32_color.clrHighlight;
         infoPtr->VisitedColor = comctl32_color.clrHighlight;
         infoPtr->BackColor = infoPtr->Style & LWS_TRANSPARENT ?
                              comctl32_color.clrWindow : comctl32_color.clrBtnFace;