user: Do not force repainting on WM_WINDOWPOSCHANGED in combobox.

- do not force repainting on WM_WINDOWPOSCHANGED in combobox, it
  breaks Z-order based painting.
- do nothing in the combobox WM_ERASEBKGND handler do all painting in
  WM_PAINT like Windows does.
This commit is contained in:
Dmitry Timoshkov 2006-08-27 17:54:05 +09:00 committed by Alexandre Julliard
parent 336f34f652
commit a20d033627
1 changed files with 12 additions and 35 deletions

View File

@ -912,34 +912,6 @@ static HBRUSH COMBO_PrepareColors(
return hBkgBrush; return hBkgBrush;
} }
/***********************************************************************
* COMBO_EraseBackground
*/
static LRESULT COMBO_EraseBackground(
HWND hwnd,
LPHEADCOMBO lphc,
HDC hParamDC)
{
HBRUSH hBkgBrush;
HDC hDC;
if(lphc->wState & CBF_EDIT)
return TRUE;
hDC = (hParamDC) ? hParamDC
: GetDC(hwnd);
/*
* Retrieve the background brush
*/
hBkgBrush = COMBO_PrepareColors(lphc, hDC);
FillRect(hDC, &lphc->textRect, hBkgBrush);
if (!hParamDC)
ReleaseDC(hwnd, hDC);
return TRUE;
}
/*********************************************************************** /***********************************************************************
* COMBO_Paint * COMBO_Paint
@ -965,6 +937,8 @@ static LRESULT COMBO_Paint(LPHEADCOMBO lphc, HDC hParamDC)
hBkgBrush = COMBO_PrepareColors(lphc, hDC); hBkgBrush = COMBO_PrepareColors(lphc, hDC);
hPrevBrush = SelectObject( hDC, hBkgBrush ); hPrevBrush = SelectObject( hDC, hBkgBrush );
if (!(lphc->wState & CBF_EDIT))
FillRect(hDC, &lphc->textRect, hBkgBrush);
/* /*
* In non 3.1 look, there is a sunken border on the combobox * In non 3.1 look, there is a sunken border on the combobox
@ -1606,7 +1580,7 @@ static void CBResetPos(
/*********************************************************************** /***********************************************************************
* COMBO_Size * COMBO_Size
*/ */
static void COMBO_Size( LPHEADCOMBO lphc ) static void COMBO_Size( LPHEADCOMBO lphc, BOOL bRedraw )
{ {
CBCalcPlacement(lphc->self, CBCalcPlacement(lphc->self,
lphc, lphc,
@ -1614,7 +1588,7 @@ static void COMBO_Size( LPHEADCOMBO lphc )
&lphc->buttonRect, &lphc->buttonRect,
&lphc->droppedRect); &lphc->droppedRect);
CBResetPos( lphc, &lphc->textRect, &lphc->droppedRect, TRUE ); CBResetPos( lphc, &lphc->textRect, &lphc->droppedRect, bRedraw );
} }
@ -1907,15 +1881,15 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
} }
case WM_PRINTCLIENT: case WM_PRINTCLIENT:
if (lParam & PRF_ERASEBKGND)
COMBO_EraseBackground(hwnd, lphc, (HDC)wParam);
/* Fallthrough */ /* Fallthrough */
case WM_PAINT: case WM_PAINT:
/* wParam may contain a valid HDC! */ /* wParam may contain a valid HDC! */
return COMBO_Paint(lphc, (HDC)wParam); return COMBO_Paint(lphc, (HDC)wParam);
case WM_ERASEBKGND: case WM_ERASEBKGND:
return COMBO_EraseBackground(hwnd, lphc, (HDC)wParam); /* do all painting in WM_PAINT like Windows does */
return 1;
case WM_GETDLGCODE: case WM_GETDLGCODE:
{ {
LRESULT result = DLGC_WANTARROWS | DLGC_WANTCHARS; LRESULT result = DLGC_WANTARROWS | DLGC_WANTCHARS;
@ -1936,10 +1910,13 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
* get a WM_SIZE. Since we still want to update the Listbox, we have to * get a WM_SIZE. Since we still want to update the Listbox, we have to
* do it here. * do it here.
*/ */
/* we should not force repainting on WM_WINDOWPOSCHANGED, it breaks
* Z-order based painting.
*/
/* fall through */ /* fall through */
case WM_SIZE: case WM_SIZE:
if( lphc->hWndLBox && if( lphc->hWndLBox &&
!(lphc->wState & CBF_NORESIZE) ) COMBO_Size( lphc ); !(lphc->wState & CBF_NORESIZE) ) COMBO_Size( lphc, message == WM_SIZE );
return TRUE; return TRUE;
case WM_SETFONT: case WM_SETFONT:
COMBO_Font( lphc, (HFONT)wParam, (BOOL)lParam ); COMBO_Font( lphc, (HFONT)wParam, (BOOL)lParam );