[PATCH 4/7] win32u: Move default WM_CTL* window message implementation from user32.
Jacek Caban
wine at gitlab.winehq.org
Mon Jun 20 08:21:42 CDT 2022
From: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
---
dlls/user32/defwnd.c | 12 ------------
dlls/win32u/defwnd.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 44 insertions(+), 12 deletions(-)
diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c
index c40d2ebedab..be41f6c47a0 100644
--- a/dlls/user32/defwnd.c
+++ b/dlls/user32/defwnd.c
@@ -161,18 +161,6 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa
DEFWND_Print(hwnd, (HDC)wParam, lParam);
return 0;
- case WM_CTLCOLORMSGBOX:
- case WM_CTLCOLOREDIT:
- case WM_CTLCOLORLISTBOX:
- case WM_CTLCOLORBTN:
- case WM_CTLCOLORDLG:
- case WM_CTLCOLORSTATIC:
- case WM_CTLCOLORSCROLLBAR:
- return (LRESULT)DEFWND_ControlColor( (HDC)wParam, msg - WM_CTLCOLORMSGBOX );
-
- case WM_CTLCOLOR:
- return (LRESULT)DEFWND_ControlColor( (HDC)wParam, HIWORD(lParam) );
-
case WM_SYSCOMMAND:
return NC_HandleSysCommand( hwnd, wParam, lParam );
diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c
index e367a769401..506ff0f9fd9 100644
--- a/dlls/win32u/defwnd.c
+++ b/dlls/win32u/defwnd.c
@@ -2261,6 +2261,38 @@ static LRESULT handle_nc_button_dbl_click( HWND hwnd, WPARAM wparam, LPARAM lpar
return 0;
}
+static HBRUSH handle_control_color( HDC hdc, UINT type )
+{
+ if (type == CTLCOLOR_SCROLLBAR)
+ {
+ HBRUSH hb = get_sys_color_brush( COLOR_SCROLLBAR );
+ COLORREF bk = get_sys_color( COLOR_3DHILIGHT );
+ NtGdiGetAndSetDCDword( hdc, NtGdiSetTextColor, get_sys_color( COLOR_3DFACE ), NULL );
+ NtGdiGetAndSetDCDword( hdc, NtGdiSetBkColor, bk, NULL );
+
+ /* if COLOR_WINDOW happens to be the same as COLOR_3DHILIGHT
+ * we better use 0x55aa bitmap brush to make scrollbar's background
+ * look different from the window background.
+ */
+ if (bk == get_sys_color( COLOR_WINDOW )) return get_55aa_brush();
+
+ NtGdiUnrealizeObject( hb );
+ return hb;
+ }
+
+ NtGdiGetAndSetDCDword( hdc, NtGdiSetTextColor, get_sys_color( COLOR_WINDOWTEXT ), NULL );
+
+ if (type == CTLCOLOR_EDIT || type == CTLCOLOR_LISTBOX)
+ NtGdiGetAndSetDCDword( hdc, NtGdiSetBkColor, get_sys_color( COLOR_WINDOW ), NULL );
+ else
+ {
+ NtGdiGetAndSetDCDword( hdc, NtGdiSetBkColor, get_sys_color( COLOR_3DFACE ), NULL);
+ return get_sys_color_brush( COLOR_3DFACE );
+ }
+
+ return get_sys_color_brush( COLOR_WINDOW );
+}
+
LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL ansi )
{
LRESULT result = 0;
@@ -2474,6 +2506,18 @@ LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam,
handle_set_cursor( hwnd, wparam, lparam );
break;
+ case WM_CTLCOLORMSGBOX:
+ case WM_CTLCOLOREDIT:
+ case WM_CTLCOLORLISTBOX:
+ case WM_CTLCOLORBTN:
+ case WM_CTLCOLORDLG:
+ case WM_CTLCOLORSTATIC:
+ case WM_CTLCOLORSCROLLBAR:
+ return (LRESULT)handle_control_color( (HDC)wparam, msg - WM_CTLCOLORMSGBOX );
+
+ case WM_CTLCOLOR:
+ return (LRESULT)handle_control_color( (HDC)wparam, HIWORD( lparam ));
+
case WM_SYSCOMMAND:
result = handle_sys_command( hwnd, wparam, lparam );
break;
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/285
More information about the wine-devel
mailing list