Module: wine Branch: refs/heads/master Commit: 1b9fc2a170b17888e71fa229657d02240f37ffb5 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=1b9fc2a170b17888e71fa229...
Author: Phil Krylov phil@newstar.rinet.ru Date: Tue Jan 10 19:58:24 2006 +0100
comctl32: Fix emitting of NM_CUSTOMDRAW header notifications. Emit NM_CUSTOMDRAW header notifications for all headers, not only ownerdrawn. Allow to change item text and background colors in an application's NM_CUSTOMDRAW handler.
---
dlls/comctl32/header.c | 40 +++++++++++++++++++++++++--------------- 1 files changed, 25 insertions(+), 15 deletions(-)
diff --git a/dlls/comctl32/header.c b/dlls/comctl32/header.c index 4b533fc..5e1c4c8 100644 --- a/dlls/comctl32/header.c +++ b/dlls/comctl32/header.c @@ -166,6 +166,7 @@ HEADER_DrawItem (HWND hwnd, HDC hdc, INT RECT r; INT oldBkMode, cxEdge = GetSystemMetrics(SM_CXEDGE); HTHEME theme = GetWindowTheme (hwnd); + NMCUSTOMDRAW nmcd;
TRACE("DrawItem(iItem %d bHotTrack %d unicode flag %d)\n", iItem, bHotTrack, infoPtr->bUnicode);
@@ -205,22 +206,24 @@ HEADER_DrawItem (HWND hwnd, HDC hdc, INT r.left -= cxEdge; r.right += cxEdge;
+ /* Set the colors before sending NM_CUSTOMDRAW so that it can change them */ + SetTextColor (hdc, (bHotTrack && !theme) ? COLOR_HIGHLIGHT : COLOR_BTNTEXT); + SetBkColor(hdc, GetSysColor(COLOR_3DFACE)); + + nmcd.hdr.hwndFrom = hwnd; + nmcd.hdr.idFrom = GetWindowLongPtrW (hwnd, GWLP_ID); + nmcd.hdr.code = NM_CUSTOMDRAW; + nmcd.dwDrawStage = CDDS_PREPAINT | CDDS_ITEM | CDDS_ITEMPOSTERASE; + nmcd.hdc = hdc; + nmcd.dwItemSpec = iItem; + nmcd.rc = r; + nmcd.uItemState = phdi->bDown ? CDIS_SELECTED : 0; + nmcd.lItemlParam = phdi->lParam; + + SendMessageW (infoPtr->hwndNotify, WM_NOTIFY, nmcd.hdr.idFrom, (LPARAM)&nmcd); + if (phdi->fmt & HDF_OWNERDRAW) { DRAWITEMSTRUCT dis; - NMCUSTOMDRAW nmcd; - - nmcd.hdr.hwndFrom = hwnd; - nmcd.hdr.idFrom = GetWindowLongPtrW (hwnd, GWLP_ID); - nmcd.hdr.code = NM_CUSTOMDRAW; - nmcd.dwDrawStage = CDDS_PREPAINT | CDDS_ITEM | CDDS_ITEMPOSTERASE; - nmcd.hdc = hdc; - nmcd.dwItemSpec = iItem; - nmcd.rc = r; - nmcd.uItemState = phdi->bDown ? CDIS_SELECTED : 0; - nmcd.lItemlParam = phdi->lParam; - - SendMessageW (infoPtr->hwndNotify, WM_NOTIFY, - (WPARAM)nmcd.hdr.idFrom, (LPARAM)&nmcd);
dis.CtlType = ODT_HEADER; dis.CtlID = GetWindowLongPtrW (hwnd, GWLP_ID); @@ -249,6 +252,14 @@ HEADER_DrawItem (HWND hwnd, HDC hdc, INT rw = r.right - r.left; rh = r.bottom - r.top;
+ if (theme == NULL) { + HBRUSH hbr = CreateSolidBrush(GetBkColor(hdc)); + RECT rcBackground = r; + + rcBackground.right -= cxEdge; + FillRect(hdc, &rcBackground, hbr); + DeleteObject(hbr); + } if (phdi->fmt & HDF_STRING) { RECT textRect;
@@ -344,7 +355,6 @@ HEADER_DrawItem (HWND hwnd, HDC hdc, INT HDF_BITMAP_ON_RIGHT|HDF_IMAGE)))) /* no explicit format specified? */ && (phdi->pszText)) { oldBkMode = SetBkMode(hdc, TRANSPARENT); - SetTextColor (hdc, (bHotTrack && !theme) ? COLOR_HIGHLIGHT : COLOR_BTNTEXT); r.left = tx; r.right = tx + tw; DrawTextW (hdc, phdi->pszText, -1,