From 8bdfe2be19eace13fff714256e451e0928aea4d1 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Mon, 28 Nov 2022 21:29:43 +0100 Subject: [PATCH] win32u: Move NtUserGetWindowDC implementation from user32. --- dlls/user32/painting.c | 9 --------- dlls/user32/user32.spec | 2 +- dlls/win32u/dce.c | 8 ++++++++ dlls/win32u/defwnd.c | 6 +++--- dlls/win32u/syscall.c | 1 + dlls/win32u/win32u.spec | 2 +- dlls/wow64win/syscall.h | 1 + dlls/wow64win/user.c | 7 +++++++ include/ntuser.h | 1 + 9 files changed, 23 insertions(+), 14 deletions(-) diff --git a/dlls/user32/painting.c b/dlls/user32/painting.c index a231dd68a3d..c962f0dccf2 100644 --- a/dlls/user32/painting.c +++ b/dlls/user32/painting.c @@ -22,15 +22,6 @@ #include "user_private.h" -/*********************************************************************** - * GetWindowDC (USER32.@) - */ -HDC WINAPI GetWindowDC( HWND hwnd ) -{ - return NtUserGetDCEx( hwnd, 0, DCX_USESTYLE | DCX_WINDOW ); -} - - /*********************************************************************** * UpdateWindow (USER32.@) */ diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec index 464348201cb..e71370e9761 100644 --- a/dlls/user32/user32.spec +++ b/dlls/user32/user32.spec @@ -405,7 +405,7 @@ # @ stub GetWinStationInfo @ stdcall GetWindow(long long) @ stdcall GetWindowContextHelpId(long) -@ stdcall GetWindowDC(long) +@ stdcall GetWindowDC(long) NtUserGetWindowDC @ stdcall GetWindowDisplayAffinity(long ptr) @ stdcall GetWindowDpiAwarenessContext(long) @ stdcall GetWindowInfo(long ptr) diff --git a/dlls/win32u/dce.c b/dlls/win32u/dce.c index 360b985c339..9b5f87589c6 100644 --- a/dlls/win32u/dce.c +++ b/dlls/win32u/dce.c @@ -1038,6 +1038,14 @@ HDC WINAPI NtUserGetDC( HWND hwnd ) return NtUserGetDCEx( hwnd, 0, DCX_USESTYLE ); } +/*********************************************************************** + * NtUserGetWindowDC (win32u.@) + */ +HDC WINAPI NtUserGetWindowDC( HWND hwnd ) +{ + return NtUserGetDCEx( hwnd, 0, DCX_USESTYLE | DCX_WINDOW ); +} + /********************************************************************** * NtUserWindowFromDC (win32u.@) */ diff --git a/dlls/win32u/defwnd.c b/dlls/win32u/defwnd.c index 04953508cf2..e58d4e5a793 100644 --- a/dlls/win32u/defwnd.c +++ b/dlls/win32u/defwnd.c @@ -2067,7 +2067,7 @@ LRESULT handle_nc_hit_test( HWND hwnd, POINT pt ) static void track_min_max_box( HWND hwnd, WORD wparam ) { - HDC hdc = NtUserGetDCEx( hwnd, 0, DCX_USESTYLE | DCX_WINDOW ); + HDC hdc = NtUserGetWindowDC( hwnd ); DWORD style = get_window_long( hwnd, GWL_STYLE ); HMENU sys_menu = NtUserGetSystemMenu(hwnd, FALSE); void (*paint_button)( HWND, HDC, BOOL, BOOL ); @@ -2141,7 +2141,7 @@ static void track_close_button( HWND hwnd, WPARAM wparam, LPARAM lparam ) /* If the close item of the sysmenu is disabled or not present do nothing */ if((state & MF_DISABLED) || (state & MF_GRAYED) || state == 0xFFFFFFFF) return; - hdc = NtUserGetDCEx( hwnd, 0, DCX_USESTYLE | DCX_WINDOW ); + hdc = NtUserGetWindowDC( hwnd ); NtUserSetCapture( hwnd ); draw_close_button( hwnd, hdc, TRUE, FALSE ); @@ -2191,7 +2191,7 @@ static LRESULT handle_nc_lbutton_down( HWND hwnd, WPARAM wparam, LPARAM lparam ) case HTSYSMENU: if (style & WS_SYSMENU) { - HDC hdc = NtUserGetDCEx( hwnd, 0, DCX_USESTYLE | DCX_WINDOW ); + HDC hdc = NtUserGetWindowDC( hwnd ); draw_nc_sys_button( hwnd, hdc, TRUE ); NtUserReleaseDC( hwnd, hdc ); send_message( hwnd, WM_SYSCOMMAND, SC_MOUSEMENU + HTSYSMENU, lparam ); diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c index 8c603dbf81e..3e029f413e5 100644 --- a/dlls/win32u/syscall.c +++ b/dlls/win32u/syscall.c @@ -209,6 +209,7 @@ static void * const syscalls[] = NtUserGetUpdateRect, NtUserGetUpdateRgn, NtUserGetUpdatedClipboardFormats, + NtUserGetWindowDC, NtUserGetWindowPlacement, NtUserGetWindowRgnEx, NtUserHideCaret, diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index 43d9b3904d0..9a987045868 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -1009,7 +1009,7 @@ @ stub NtUserGetWindowBand @ stub NtUserGetWindowCompositionAttribute @ stub NtUserGetWindowCompositionInfo -@ stub NtUserGetWindowDC +@ stdcall -syscall NtUserGetWindowDC(long) @ stub NtUserGetWindowDisplayAffinity @ stub NtUserGetWindowFeedbackSetting @ stub NtUserGetWindowGroupId diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h index 288dd593c2f..25d8d42e575 100644 --- a/dlls/wow64win/syscall.h +++ b/dlls/wow64win/syscall.h @@ -195,6 +195,7 @@ SYSCALL_ENTRY( NtUserGetUpdateRect ) \ SYSCALL_ENTRY( NtUserGetUpdateRgn ) \ SYSCALL_ENTRY( NtUserGetUpdatedClipboardFormats ) \ + SYSCALL_ENTRY( NtUserGetWindowDC ) \ SYSCALL_ENTRY( NtUserGetWindowPlacement ) \ SYSCALL_ENTRY( NtUserGetWindowRgnEx ) \ SYSCALL_ENTRY( NtUserHideCaret ) \ diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 934612dce8a..78ffc34e68e 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -2570,6 +2570,13 @@ NTSTATUS WINAPI wow64_NtUserGetUpdatedClipboardFormats( UINT *args ) return NtUserGetUpdatedClipboardFormats( formats, size, out_size ); } +NTSTATUS WINAPI wow64_NtUserGetWindowDC( UINT *args ) +{ + HWND hwnd = get_handle( &args ); + + return HandleToUlong( NtUserGetWindowDC( hwnd )); +} + NTSTATUS WINAPI wow64_NtUserGetWindowPlacement( UINT *args ) { HWND hwnd = get_handle( &args ); diff --git a/include/ntuser.h b/include/ntuser.h index c27af731f29..cff2b6633a5 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -777,6 +777,7 @@ BOOL WINAPI NtUserGetTitleBarInfo( HWND hwnd, TITLEBARINFO *info ); INT WINAPI NtUserGetUpdateRgn( HWND hwnd, HRGN hrgn, BOOL erase ); BOOL WINAPI NtUserGetUpdatedClipboardFormats( UINT *formats, UINT size, UINT *out_size ); BOOL WINAPI NtUserGetUpdateRect( HWND hwnd, RECT *rect, BOOL erase ); +HDC WINAPI NtUserGetWindowDC( HWND hwnd ); BOOL WINAPI NtUserGetWindowPlacement( HWND hwnd, WINDOWPLACEMENT *placement ); int WINAPI NtUserGetWindowRgnEx( HWND hwnd, HRGN hrgn, UINT unk ); BOOL WINAPI NtUserHideCaret( HWND hwnd );