[PATCH] user.exe16: Releasing DC does not disable it.
whydoubt at gmail.com
Sun Jan 12 14:54:10 CST 2020
ReleaseDC in user32 marks cache DCs as disabled. For user.exe (the
16-bit equivalent), this causes DCs to become inaccessible after
release. On Windows, they are still accessible after release.
Work around this in user.exe by re-enabling the DC immediately after
calling the user32 ReleaseDC.
Signed-off-by: Jeff Smith <whydoubt at gmail.com>
Tested with the program referenced in the bug report. I also wrote
and ran some tests on WinXP to compare how user32.dll and user.exe
dlls/user.exe16/window.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/dlls/user.exe16/window.c b/dlls/user.exe16/window.c
index 10f1389f0a..bf86719325 100644
@@ -23,6 +23,7 @@
@@ -675,7 +676,9 @@ HDC16 WINAPI GetWindowDC16( HWND16 hwnd )
INT16 WINAPI ReleaseDC16( HWND16 hwnd, HDC16 hdc )
- return (INT16)ReleaseDC( WIN_Handle32(hwnd), HDC_32(hdc) );
+ INT16 ret = (INT16)ReleaseDC( WIN_Handle32(hwnd), HDC_32(hdc) );
+ SetHookFlags( HDC_32(hdc), DCHF_ENABLEDC );
+ return ret;
More information about the wine-devel