comctl32/listbox: Actually draw themed frame.

Previously, LISTBOX_NCPaint() is called and themed frame is drawn. And then DefWindowProcW() is
called with original clip region, overwriting the drawn themed frame.

Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zhiyi Zhang 2021-03-01 11:09:40 +08:00 committed by Alexandre Julliard
parent 76f87fe30c
commit 7fba4ebba3
1 changed files with 8 additions and 4 deletions

View File

@ -1186,7 +1186,7 @@ static LRESULT LISTBOX_Paint( LB_DESCR *descr, HDC hdc )
return 0; return 0;
} }
static void LISTBOX_NCPaint( LB_DESCR *descr, HRGN region ) static LRESULT LISTBOX_NCPaint( LB_DESCR *descr, HRGN region )
{ {
DWORD exstyle = GetWindowLongW( descr->self, GWL_EXSTYLE); DWORD exstyle = GetWindowLongW( descr->self, GWL_EXSTYLE);
HTHEME theme = GetWindowTheme( descr->self ); HTHEME theme = GetWindowTheme( descr->self );
@ -1196,7 +1196,7 @@ static void LISTBOX_NCPaint( LB_DESCR *descr, HRGN region )
RECT r; RECT r;
if (!theme || !(exstyle & WS_EX_CLIENTEDGE)) if (!theme || !(exstyle & WS_EX_CLIENTEDGE))
return; return DefWindowProcW(descr->self, WM_NCPAINT, (WPARAM)region, 0);
cxEdge = GetSystemMetrics(SM_CXEDGE); cxEdge = GetSystemMetrics(SM_CXEDGE);
cyEdge = GetSystemMetrics(SM_CYEDGE); cyEdge = GetSystemMetrics(SM_CYEDGE);
@ -1217,6 +1217,11 @@ static void LISTBOX_NCPaint( LB_DESCR *descr, HRGN region )
DrawThemeParentBackground(descr->self, hdc, &r); DrawThemeParentBackground(descr->self, hdc, &r);
DrawThemeBackground (theme, hdc, 0, 0, &r, 0); DrawThemeBackground (theme, hdc, 0, 0, &r, 0);
ReleaseDC(descr->self, hdc); ReleaseDC(descr->self, hdc);
/* Call default proc to get the scrollbars etc. also painted */
DefWindowProcW(descr->self, WM_NCPAINT, (WPARAM)cliprgn, 0);
DeleteObject(cliprgn);
return 0;
} }
/*********************************************************************** /***********************************************************************
@ -2976,8 +2981,7 @@ static LRESULT CALLBACK LISTBOX_WindowProc( HWND hwnd, UINT msg, WPARAM wParam,
return ret; return ret;
case WM_NCPAINT: case WM_NCPAINT:
LISTBOX_NCPaint( descr, (HRGN)wParam ); return LISTBOX_NCPaint( descr, (HRGN)wParam );
break;
case WM_SIZE: case WM_SIZE:
LISTBOX_UpdateSize( descr ); LISTBOX_UpdateSize( descr );