diff --git a/reactos/lib/user32/windows/message.c b/reactos/lib/user32/windows/message.c index 038353f8b7b..1024aafe81f 100644 --- a/reactos/lib/user32/windows/message.c +++ b/reactos/lib/user32/windows/message.c @@ -1,4 +1,4 @@ -/* $Id: message.c,v 1.22 2003/08/02 16:55:59 gdalsnes Exp $ +/* $Id: message.c,v 1.23 2003/08/11 10:30:19 gvg Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS user32.dll @@ -221,6 +221,16 @@ CallWindowProcA(WNDPROC lpPrevWndFunc, WPARAM wParam, LPARAM lParam) { + BOOL IsHandle; + if ((DWORD)lpPrevWndFunc > 0x80000000) + { + lpPrevWndFunc -= 0x80000000; + IsHandle = TRUE; + } + else + { + IsHandle = FALSE; + } if (IsWindowUnicode(hWnd)) { LRESULT Result; @@ -246,6 +256,16 @@ CallWindowProcW(WNDPROC lpPrevWndFunc, WPARAM wParam, LPARAM lParam) { + BOOL IsHandle; + if ((DWORD)lpPrevWndFunc > 0x80000000) + { + lpPrevWndFunc-= 0x80000000; + IsHandle = TRUE; + } + else + { + IsHandle = FALSE; + } if (!IsWindowUnicode(hWnd)) { LRESULT Result; diff --git a/reactos/lib/user32/windows/window.c b/reactos/lib/user32/windows/window.c index 7534234edec..2c59fe18de5 100644 --- a/reactos/lib/user32/windows/window.c +++ b/reactos/lib/user32/windows/window.c @@ -1,4 +1,4 @@ -/* $Id: window.c,v 1.54 2003/08/09 07:09:57 jimtabor Exp $ +/* $Id: window.c,v 1.55 2003/08/11 10:30:19 gvg Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS user32.dll @@ -45,14 +45,7 @@ User32SendNCCALCSIZEMessageForKernel(PVOID Arguments, ULONG ArgumentLength) DPRINT("Wrong length.\n"); return(STATUS_INFO_LENGTH_MISMATCH); } - if (IsWindowUnicode(CallbackArgs->Wnd)) - { - Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); - } - else - { - Proc = (WNDPROC)GetWindowLongA(CallbackArgs->Wnd, GWL_WNDPROC); - } + Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); DPRINT("Proc %X\n", Proc); /* Call the window procedure; notice kernel messages are always unicode. */ if (CallbackArgs->Validate) @@ -87,14 +80,7 @@ User32SendGETMINMAXINFOMessageForKernel(PVOID Arguments, ULONG ArgumentLength) DPRINT("Wrong length.\n"); return(STATUS_INFO_LENGTH_MISMATCH); } - if (IsWindowUnicode(CallbackArgs->Wnd)) - { - Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); - } - else - { - Proc = (WNDPROC)GetWindowLongA(CallbackArgs->Wnd, GWL_WNDPROC); - } + Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); DPRINT("Proc %X\n", Proc); /* Call the window procedure; notice kernel messages are always unicode. */ Result.Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_GETMINMAXINFO, @@ -119,14 +105,7 @@ User32SendCREATEMessageForKernel(PVOID Arguments, ULONG ArgumentLength) DPRINT("Wrong length.\n"); return(STATUS_INFO_LENGTH_MISMATCH); } - if (IsWindowUnicode(CallbackArgs->Wnd)) - { - Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); - } - else - { - Proc = (WNDPROC)GetWindowLongA(CallbackArgs->Wnd, GWL_WNDPROC); - } + Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); DPRINT("Proc %X\n", Proc); /* Call the window procedure; notice kernel messages are always unicode. */ Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_CREATE, 0, @@ -150,14 +129,7 @@ User32SendNCCREATEMessageForKernel(PVOID Arguments, ULONG ArgumentLength) DPRINT("Wrong length.\n"); return(STATUS_INFO_LENGTH_MISMATCH); } - if (IsWindowUnicode(CallbackArgs->Wnd)) - { - Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); - } - else - { - Proc = (WNDPROC)GetWindowLongA(CallbackArgs->Wnd, GWL_WNDPROC); - } + Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); DPRINT("Proc %X\n", Proc); /* Call the window procedure; notice kernel messages are always unicode. */ Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_NCCREATE, 0, @@ -181,14 +153,7 @@ User32SendWINDOWPOSCHANGINGMessageForKernel(PVOID Arguments, ULONG ArgumentLengt DPRINT("Wrong length.\n"); return(STATUS_INFO_LENGTH_MISMATCH); } - if (IsWindowUnicode(CallbackArgs->Wnd)) - { - Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); - } - else - { - Proc = (WNDPROC)GetWindowLongA(CallbackArgs->Wnd, GWL_WNDPROC); - } + Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); DPRINT("Proc %X\n", Proc); /* Call the window procedure; notice kernel messages are always unicode. */ Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_WINDOWPOSCHANGING, 0, @@ -212,14 +177,7 @@ User32SendWINDOWPOSCHANGEDMessageForKernel(PVOID Arguments, ULONG ArgumentLength DPRINT("Wrong length.\n"); return(STATUS_INFO_LENGTH_MISMATCH); } - if (IsWindowUnicode(CallbackArgs->Wnd)) - { - Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); - } - else - { - Proc = (WNDPROC)GetWindowLongA(CallbackArgs->Wnd, GWL_WNDPROC); - } + Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); DPRINT("Proc %X\n", Proc); /* Call the window procedure; notice kernel messages are always unicode. */ Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_WINDOWPOSCHANGED, 0, @@ -243,14 +201,7 @@ User32SendSTYLECHANGINGMessageForKernel(PVOID Arguments, ULONG ArgumentLength) DPRINT("Wrong length.\n"); return(STATUS_INFO_LENGTH_MISMATCH); } - if (IsWindowUnicode(CallbackArgs->Wnd)) - { - Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); - } - else - { - Proc = (WNDPROC)GetWindowLongA(CallbackArgs->Wnd, GWL_WNDPROC); - } + Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); DPRINT("Proc %X\n", Proc); /* Call the window procedure; notice kernel messages are always unicode. */ Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_STYLECHANGING, CallbackArgs->WhichStyle, @@ -274,14 +225,7 @@ User32SendSTYLECHANGEDMessageForKernel(PVOID Arguments, ULONG ArgumentLength) DPRINT("Wrong length.\n"); return(STATUS_INFO_LENGTH_MISMATCH); } - if (IsWindowUnicode(CallbackArgs->Wnd)) - { - Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); - } - else - { - Proc = (WNDPROC)GetWindowLongA(CallbackArgs->Wnd, GWL_WNDPROC); - } + Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); DPRINT("Proc %X\n", Proc); /* Call the window procedure; notice kernel messages are always unicode. */ Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_STYLECHANGED, CallbackArgs->WhichStyle, @@ -321,14 +265,7 @@ User32CallWindowProcFromKernel(PVOID Arguments, ULONG ArgumentLength) } if (CallbackArgs->Proc == NULL) { - if (IsWindowUnicode(CallbackArgs->Wnd)) - { - CallbackArgs->Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); - } - else - { - CallbackArgs->Proc = (WNDPROC)GetWindowLongA(CallbackArgs->Wnd, GWL_WNDPROC); - } + CallbackArgs->Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); } Result = CallWindowProcW(CallbackArgs->Proc, CallbackArgs->Wnd, CallbackArgs->Msg, CallbackArgs->wParam, diff --git a/reactos/subsys/win32k/ntuser/class.c b/reactos/subsys/win32k/ntuser/class.c index c9b76fd5c43..c8a87181d97 100644 --- a/reactos/subsys/win32k/ntuser/class.c +++ b/reactos/subsys/win32k/ntuser/class.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: class.c,v 1.26 2003/08/09 07:09:57 jimtabor Exp $ +/* $Id: class.c,v 1.27 2003/08/11 10:30:19 gvg Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -165,10 +165,6 @@ NtUserGetClassInfo(HINSTANCE hInst, SetLastNtError(Status); return 0; } - if (Class->hInstance != hInst) - { - return 0; - } wcex->cbSize = sizeof(LPWNDCLASSEXW); wcex->style = Class->style; if (Ansi) @@ -302,19 +298,20 @@ W32kCreateClass(CONST WNDCLASSEXW *lpwcx, if (bUnicodeClass) { ClassObject->lpfnWndProcW = lpwcx->lpfnWndProc; - ClassObject->lpfnWndProcA = (WNDPROC)0xCCCCCCCC; + ClassObject->lpfnWndProcA = lpwcx->lpfnWndProc+0x80000000; } else { ClassObject->lpfnWndProcA = lpwcx->lpfnWndProc; - ClassObject->lpfnWndProcW = (WNDPROC)0xCCCCCCCC; + ClassObject->lpfnWndProcW = lpwcx->lpfnWndProc+0x80000000; } if (IS_INTRESOURCE(lpwcx->lpszMenuName)) { ClassObject->lpszMenuName = (PUNICODE_STRING)lpwcx->lpszMenuName; } else - { + { + ClassObject->lpszMenuName = ExAllocatePool(NonPagedPool,sizeof(UNICODE_STRING)); RtlCreateUnicodeString(ClassObject->lpszMenuName,(LPWSTR)lpwcx->lpszMenuName); } return(ClassObject); @@ -504,12 +501,12 @@ W32kSetClassLong(PWINDOW_OBJECT WindowObject, ULONG Offset, LONG dwNewLong, BOOL if (Ansi) { WindowObject->Class->lpfnWndProcA = (WNDPROC)dwNewLong; - WindowObject->Class->lpfnWndProcW = (WNDPROC)0xCCCCCCCC; + WindowObject->Class->lpfnWndProcW = (WNDPROC)dwNewLong+0x80000000; } else { WindowObject->Class->lpfnWndProcW = (WNDPROC)dwNewLong; - WindowObject->Class->lpfnWndProcA = (WNDPROC)0xCCCCCCCC; + WindowObject->Class->lpfnWndProcA = (WNDPROC)dwNewLong+0x80000000; } break; } diff --git a/reactos/subsys/win32k/ntuser/window.c b/reactos/subsys/win32k/ntuser/window.c index b79a0b1d7bf..44882021e6c 100644 --- a/reactos/subsys/win32k/ntuser/window.c +++ b/reactos/subsys/win32k/ntuser/window.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: window.c,v 1.84 2003/08/09 21:13:14 gvg Exp $ +/* $Id: window.c,v 1.85 2003/08/11 10:30:19 gvg Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -1856,13 +1856,13 @@ NtUserSetWindowLong(HWND hWnd, DWORD Index, LONG NewValue, BOOL Ansi) { OldValue = (LONG) WindowObject->WndProcA; WindowObject->WndProcA = (WNDPROC) NewValue; - WindowObject->WndProcW = (WNDPROC)0xCCCCCCCC; + WindowObject->WndProcW = (WNDPROC) NewValue+0x80000000; } else { OldValue = (LONG) WindowObject->WndProcW; WindowObject->WndProcW = (WNDPROC) NewValue; - WindowObject->WndProcA = (WNDPROC)0xCCCCCCCC; + WindowObject->WndProcA = (WNDPROC) NewValue+0x80000000; } break;