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:
parent
336f34f652
commit
a20d033627
|
@ -912,34 +912,6 @@ static HBRUSH COMBO_PrepareColors(
|
|||
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
|
||||
|
@ -965,6 +937,8 @@ static LRESULT COMBO_Paint(LPHEADCOMBO lphc, HDC hParamDC)
|
|||
hBkgBrush = COMBO_PrepareColors(lphc, hDC);
|
||||
|
||||
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
|
||||
|
@ -1606,7 +1580,7 @@ static void CBResetPos(
|
|||
/***********************************************************************
|
||||
* COMBO_Size
|
||||
*/
|
||||
static void COMBO_Size( LPHEADCOMBO lphc )
|
||||
static void COMBO_Size( LPHEADCOMBO lphc, BOOL bRedraw )
|
||||
{
|
||||
CBCalcPlacement(lphc->self,
|
||||
lphc,
|
||||
|
@ -1614,7 +1588,7 @@ static void COMBO_Size( LPHEADCOMBO lphc )
|
|||
&lphc->buttonRect,
|
||||
&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:
|
||||
if (lParam & PRF_ERASEBKGND)
|
||||
COMBO_EraseBackground(hwnd, lphc, (HDC)wParam);
|
||||
|
||||
/* Fallthrough */
|
||||
case WM_PAINT:
|
||||
/* wParam may contain a valid HDC! */
|
||||
return COMBO_Paint(lphc, (HDC)wParam);
|
||||
|
||||
case WM_ERASEBKGND:
|
||||
return COMBO_EraseBackground(hwnd, lphc, (HDC)wParam);
|
||||
/* do all painting in WM_PAINT like Windows does */
|
||||
return 1;
|
||||
|
||||
case WM_GETDLGCODE:
|
||||
{
|
||||
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
|
||||
* do it here.
|
||||
*/
|
||||
/* we should not force repainting on WM_WINDOWPOSCHANGED, it breaks
|
||||
* Z-order based painting.
|
||||
*/
|
||||
/* fall through */
|
||||
case WM_SIZE:
|
||||
if( lphc->hWndLBox &&
|
||||
!(lphc->wState & CBF_NORESIZE) ) COMBO_Size( lphc );
|
||||
!(lphc->wState & CBF_NORESIZE) ) COMBO_Size( lphc, message == WM_SIZE );
|
||||
return TRUE;
|
||||
case WM_SETFONT:
|
||||
COMBO_Font( lphc, (HFONT)wParam, (BOOL)lParam );
|
||||
|
|
Loading…
Reference in New Issue