user32: Send WM_CTLCOLOR* message only for visible buttons.
Signed-off-by: Sebastian Lackner <sebastian@fds-team.de> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
2c180741e1
commit
bc3f40e21a
|
@ -385,31 +385,34 @@ LRESULT ButtonWndProc_common(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
|
|||
case WM_SETTEXT:
|
||||
{
|
||||
/* Clear an old text here as Windows does */
|
||||
HDC hdc = GetDC(hWnd);
|
||||
HBRUSH hbrush;
|
||||
RECT client, rc;
|
||||
HWND parent = GetParent(hWnd);
|
||||
UINT message = (btn_type == BS_PUSHBUTTON ||
|
||||
btn_type == BS_DEFPUSHBUTTON ||
|
||||
btn_type == BS_USERBUTTON ||
|
||||
btn_type == BS_OWNERDRAW) ?
|
||||
WM_CTLCOLORBTN : WM_CTLCOLORSTATIC;
|
||||
if (IsWindowVisible(hWnd))
|
||||
{
|
||||
HDC hdc = GetDC(hWnd);
|
||||
HBRUSH hbrush;
|
||||
RECT client, rc;
|
||||
HWND parent = GetParent(hWnd);
|
||||
UINT message = (btn_type == BS_PUSHBUTTON ||
|
||||
btn_type == BS_DEFPUSHBUTTON ||
|
||||
btn_type == BS_USERBUTTON ||
|
||||
btn_type == BS_OWNERDRAW) ?
|
||||
WM_CTLCOLORBTN : WM_CTLCOLORSTATIC;
|
||||
|
||||
if (!parent) parent = hWnd;
|
||||
hbrush = (HBRUSH)SendMessageW(parent, message,
|
||||
(WPARAM)hdc, (LPARAM)hWnd);
|
||||
if (!hbrush) /* did the app forget to call DefWindowProc ? */
|
||||
hbrush = (HBRUSH)DefWindowProcW(parent, message,
|
||||
(WPARAM)hdc, (LPARAM)hWnd);
|
||||
if (!parent) parent = hWnd;
|
||||
hbrush = (HBRUSH)SendMessageW(parent, message,
|
||||
(WPARAM)hdc, (LPARAM)hWnd);
|
||||
if (!hbrush) /* did the app forget to call DefWindowProc ? */
|
||||
hbrush = (HBRUSH)DefWindowProcW(parent, message,
|
||||
(WPARAM)hdc, (LPARAM)hWnd);
|
||||
|
||||
GetClientRect(hWnd, &client);
|
||||
rc = client;
|
||||
BUTTON_CalcLabelRect(hWnd, hdc, &rc);
|
||||
/* Clip by client rect bounds */
|
||||
if (rc.right > client.right) rc.right = client.right;
|
||||
if (rc.bottom > client.bottom) rc.bottom = client.bottom;
|
||||
FillRect(hdc, &rc, hbrush);
|
||||
ReleaseDC(hWnd, hdc);
|
||||
GetClientRect(hWnd, &client);
|
||||
rc = client;
|
||||
BUTTON_CalcLabelRect(hWnd, hdc, &rc);
|
||||
/* Clip by client rect bounds */
|
||||
if (rc.right > client.right) rc.right = client.right;
|
||||
if (rc.bottom > client.bottom) rc.bottom = client.bottom;
|
||||
FillRect(hdc, &rc, hbrush);
|
||||
ReleaseDC(hWnd, hdc);
|
||||
}
|
||||
|
||||
if (unicode) DefWindowProcW( hWnd, WM_SETTEXT, wParam, lParam );
|
||||
else DefWindowProcA( hWnd, WM_SETTEXT, wParam, lParam );
|
||||
|
|
|
@ -5938,7 +5938,7 @@ static void test_button_messages(void)
|
|||
|
||||
SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)"Text 2");
|
||||
sprintf(desc, "button[%i]: WM_SETTEXT on an invisible button", i);
|
||||
ok_sequence(WmSetTextInvisibleSeq, desc, TRUE);
|
||||
ok_sequence(WmSetTextInvisibleSeq, desc, FALSE);
|
||||
|
||||
ShowWindow(hwnd, SW_SHOW);
|
||||
ShowWindow(parent, SW_HIDE);
|
||||
|
@ -5947,7 +5947,7 @@ static void test_button_messages(void)
|
|||
|
||||
SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)"Text 3");
|
||||
sprintf(desc, "button[%i]: WM_SETTEXT on an invisible button", i);
|
||||
ok_sequence(WmSetTextInvisibleSeq, desc, TRUE);
|
||||
ok_sequence(WmSetTextInvisibleSeq, desc, FALSE);
|
||||
|
||||
ShowWindow(parent, SW_SHOW);
|
||||
flush_events();
|
||||
|
|
Loading…
Reference in New Issue