mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
Repairs to WNDPROC and class handling by Jonathan Wilson
svn path=/trunk/; revision=5526
This commit is contained in:
parent
aee5041a87
commit
4fa73ed4a8
4 changed files with 41 additions and 87 deletions
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue