user32: Use custom window procs instead of DefWindowProcA/W in the IsWindowUnicode test
Dmitry Timoshkov
dmitry at codeweavers.com
Thu Feb 14 02:35:03 CST 2008
Hello,
looks like at some point DefWindowProcA/W treatment in XP has changed after
the introduction of IsWindowUnicode test (at that time the test passed), even
a trick we use in class.c with GetProcAddress("DefWindowProcA") doesn't help
anymore.
Thanks to Dan Kegel and Maarten Lankhorst for pointing this out.
Changelog:
user32: Use custom window procs instead of DefWindowProcA/W in
the IsWindowUnicode test.
---
dlls/user32/tests/win.c | 40 +++++++++++++++++++++++++---------------
1 files changed, 25 insertions(+), 15 deletions(-)
diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 7e4c98c..2ddbe59 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -3597,6 +3597,16 @@ static void test_csparentdc(void)
DestroyWindow(hwnd2);
}
+static LRESULT WINAPI def_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+ return DefWindowProcA(hwnd, msg, wparam, lparam);
+}
+
+static LRESULT WINAPI def_window_procW(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+ return DefWindowProcW(hwnd, msg, wparam, lparam);
+}
+
static void test_IsWindowUnicode(void)
{
static const char ansi_class_nameA[] = "ansi class name";
@@ -3609,13 +3619,13 @@ static void test_IsWindowUnicode(void)
memset(&classW, 0, sizeof(classW));
classW.hInstance = GetModuleHandleA(0);
- classW.lpfnWndProc = DefWindowProcW;
+ classW.lpfnWndProc = def_window_procW;
classW.lpszClassName = unicode_class_nameW;
- if (!RegisterClassW(&classW)) return;
+ if (!RegisterClassW(&classW)) return; /* this catches a Win9x as well */
memset(&classA, 0, sizeof(classA));
classA.hInstance = GetModuleHandleA(0);
- classA.lpfnWndProc = DefWindowProcA;
+ classA.lpfnWndProc = def_window_procA;
classA.lpszClassName = ansi_class_nameA;
assert(RegisterClassA(&classA));
@@ -3625,9 +3635,9 @@ static void test_IsWindowUnicode(void)
assert(hwnd);
ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n");
- SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)DefWindowProcA);
+ SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procA);
ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n");
- SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (ULONG_PTR)DefWindowProcW);
+ SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procW);
ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n");
DestroyWindow(hwnd);
@@ -3637,9 +3647,9 @@ static void test_IsWindowUnicode(void)
assert(hwnd);
ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n");
- SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)DefWindowProcA);
+ SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procA);
ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n");
- SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (ULONG_PTR)DefWindowProcW);
+ SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procW);
ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n");
DestroyWindow(hwnd);
@@ -3650,9 +3660,9 @@ static void test_IsWindowUnicode(void)
assert(hwnd);
ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n");
- SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (ULONG_PTR)DefWindowProcW);
+ SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procW);
ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n");
- SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)DefWindowProcA);
+ SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procA);
ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n");
DestroyWindow(hwnd);
@@ -3662,9 +3672,9 @@ static void test_IsWindowUnicode(void)
assert(hwnd);
ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n");
- SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (ULONG_PTR)DefWindowProcW);
+ SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procW);
ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n");
- SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)DefWindowProcA);
+ SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (ULONG_PTR)def_window_procA);
ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n");
DestroyWindow(hwnd);
@@ -3675,7 +3685,7 @@ static void test_IsWindowUnicode(void)
assert(hwnd);
ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n");
- SetClassLongPtrA(hwnd, GCLP_WNDPROC, (ULONG_PTR)DefWindowProcA);
+ SetClassLongPtrA(hwnd, GCLP_WNDPROC, (ULONG_PTR)def_window_procA);
ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n");
/* do not restore class window proc back to unicode */
@@ -3686,7 +3696,7 @@ static void test_IsWindowUnicode(void)
assert(hwnd);
ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n");
- SetClassLongPtrW(hwnd, GCLP_WNDPROC, (ULONG_PTR)DefWindowProcW);
+ SetClassLongPtrW(hwnd, GCLP_WNDPROC, (ULONG_PTR)def_window_procW);
ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n");
DestroyWindow(hwnd);
@@ -3697,7 +3707,7 @@ static void test_IsWindowUnicode(void)
assert(hwnd);
ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n");
- SetClassLongPtrW(hwnd, GCLP_WNDPROC, (ULONG_PTR)DefWindowProcW);
+ SetClassLongPtrW(hwnd, GCLP_WNDPROC, (ULONG_PTR)def_window_procW);
ok(!IsWindowUnicode(hwnd), "IsWindowUnicode expected to return FALSE\n");
/* do not restore class window proc back to ansi */
@@ -3708,7 +3718,7 @@ static void test_IsWindowUnicode(void)
assert(hwnd);
ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n");
- SetClassLongPtrA(hwnd, GCLP_WNDPROC, (ULONG_PTR)DefWindowProcA);
+ SetClassLongPtrA(hwnd, GCLP_WNDPROC, (ULONG_PTR)def_window_procA);
ok(IsWindowUnicode(hwnd), "IsWindowUnicode expected to return TRUE\n");
DestroyWindow(hwnd);
--
1.5.4.1
More information about the wine-patches
mailing list