mirror of
https://github.com/reactos/reactos.git
synced 2024-06-28 17:01:28 +00:00
- Move GetWindowInfo support into user32. Use HWNDPARAM for SetWindowContextHelpId.
svn path=/trunk/; revision=42637
This commit is contained in:
parent
9e804e5230
commit
09286edbce
|
@ -119,3 +119,4 @@ PWND FASTCALL ValidateHwndNoErr(HWND hwnd);
|
|||
VOID FASTCALL GetConnected(VOID);
|
||||
BOOL FASTCALL DefSetText(HWND hWnd, PCWSTR String, BOOL Ansi);
|
||||
BOOL FASTCALL TestWindowProcess(PWND);
|
||||
VOID UserGetWindowBorders(DWORD, DWORD, SIZE *, BOOL);
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
(BOOL)NtUserCallTwoParam((DWORD)hWnd, (DWORD)hRgn, TWOPARAM_ROUTINE_VALIDATERGN)
|
||||
|
||||
#define NtUserSetWindowContextHelpId(hWnd, dwContextHelpId) \
|
||||
(BOOL)NtUserCallTwoParam((DWORD)hwnd, dwContextHelpId, TWOPARAM_ROUTINE_SETWNDCONTEXTHLPID)
|
||||
(BOOL)NtUserCallTwoParam((DWORD)hwnd, dwContextHelpId, HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID)
|
||||
|
||||
#define NtUserSetCaretPos(X, Y) \
|
||||
(BOOL)NtUserCallTwoParam((DWORD)X, (DWORD)Y, TWOPARAM_ROUTINE_SETCARETPOS)
|
||||
|
@ -55,9 +55,6 @@
|
|||
#define NtUserSetMenuBarHeight(menu, height) \
|
||||
(BOOL)NtUserCallTwoParam((DWORD)menu, (DWORD)height, TWOPARAM_ROUTINE_SETMENUBARHEIGHT)
|
||||
|
||||
#define NtUserGetWindowInfo(hwnd, pwi) \
|
||||
(BOOL)NtUserCallTwoParam((DWORD)hwnd, (DWORD)pwi, TWOPARAM_ROUTINE_GETWINDOWINFO)
|
||||
|
||||
#define NtUserRegisterLogonProcess(hproc, x) \
|
||||
(BOOL)NtUserCallTwoParam((DWORD)hproc, (DWORD)x, TWOPARAM_ROUTINE_REGISTERLOGONPROC)
|
||||
|
||||
|
|
|
@ -1043,10 +1043,63 @@ GetTopWindow(HWND hWnd)
|
|||
* @implemented
|
||||
*/
|
||||
BOOL WINAPI
|
||||
GetWindowInfo(HWND hwnd,
|
||||
GetWindowInfo(HWND hWnd,
|
||||
PWINDOWINFO pwi)
|
||||
{
|
||||
return NtUserGetWindowInfo(hwnd, pwi);
|
||||
PWND pWnd;
|
||||
PCLS pCls = NULL;
|
||||
SIZE Size = {0,0};
|
||||
BOOL Ret = FALSE;
|
||||
|
||||
if ( !pwi || pwi->cbSize != sizeof(WINDOWINFO))
|
||||
SetLastError(ERROR_INVALID_PARAMETER); // Just set the error and go!
|
||||
|
||||
pWnd = ValidateHwnd(hWnd);
|
||||
if (!pWnd)
|
||||
return Ret;
|
||||
|
||||
UserGetWindowBorders(pWnd->style, pWnd->ExStyle, &Size, FALSE);
|
||||
|
||||
_SEH2_TRY
|
||||
{
|
||||
pCls = DesktopPtrToUser(pWnd->pcls);
|
||||
pwi->rcWindow = pWnd->rcWindow;
|
||||
pwi->rcClient = pWnd->rcClient;
|
||||
pwi->dwStyle = pWnd->style;
|
||||
pwi->dwExStyle = pWnd->ExStyle;
|
||||
pwi->cxWindowBorders = Size.cx;
|
||||
pwi->cyWindowBorders = Size.cy;
|
||||
pwi->dwWindowStatus = 0;
|
||||
if (pWnd->state & WNDS_ACTIVEFRAME)
|
||||
pwi->dwWindowStatus = WS_ACTIVECAPTION;
|
||||
pwi->atomWindowType = (pCls ? pCls->atomClassName : 0 );
|
||||
|
||||
if ( pWnd->state2 & WNDS2_WIN50COMPAT )
|
||||
{
|
||||
pwi->wCreatorVersion = 0x500;
|
||||
}
|
||||
else if ( pWnd->state2 & WNDS2_WIN40COMPAT )
|
||||
{
|
||||
pwi->wCreatorVersion = 0x400;
|
||||
}
|
||||
else if ( pWnd->state2 & WNDS2_WIN31COMPAT )
|
||||
{
|
||||
pwi->wCreatorVersion = 0x30A;
|
||||
}
|
||||
else
|
||||
{
|
||||
pwi->wCreatorVersion = 0x300;
|
||||
}
|
||||
|
||||
Ret = TRUE;
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
/* Do nothing */
|
||||
}
|
||||
_SEH2_END;
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -3051,9 +3051,7 @@ typedef struct tagKMDDELPARAM
|
|||
#define MSQ_STATE_MENUOWNER 0x4
|
||||
#define MSQ_STATE_MOVESIZE 0x5
|
||||
#define MSQ_STATE_CARET 0x6
|
||||
#define TWOPARAM_ROUTINE_SETWNDCONTEXTHLPID 0xfffd0058 // use HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID
|
||||
#define TWOPARAM_ROUTINE_SETCARETPOS 0xfffd0060
|
||||
#define TWOPARAM_ROUTINE_GETWINDOWINFO 0xfffd0061
|
||||
#define TWOPARAM_ROUTINE_REGISTERLOGONPROC 0xfffd0062
|
||||
#define TWOPARAM_ROUTINE_ROS_ISACTIVEICON 0x1001
|
||||
#define TWOPARAM_ROUTINE_ROS_NCDESTROY 0x1002
|
||||
|
|
|
@ -514,65 +514,10 @@ NtUserCallTwoParam(
|
|||
UNIMPLEMENTED
|
||||
RETURN( 0);
|
||||
|
||||
case TWOPARAM_ROUTINE_SETWNDCONTEXTHLPID:
|
||||
|
||||
if(!(Window = UserGetWindowObject((HWND)Param1)))
|
||||
{
|
||||
RETURN( (DWORD)FALSE);
|
||||
}
|
||||
|
||||
if ( Param2 )
|
||||
IntSetProp(Window, gpsi->atomContextHelpIdProp, (HANDLE)Param2);
|
||||
else
|
||||
IntRemoveProp(Window, gpsi->atomContextHelpIdProp);
|
||||
|
||||
RETURN( (DWORD)TRUE);
|
||||
|
||||
case TWOPARAM_ROUTINE_SETCARETPOS:
|
||||
RETURN( (DWORD)co_IntSetCaretPos((int)Param1, (int)Param2));
|
||||
|
||||
case TWOPARAM_ROUTINE_GETWINDOWINFO:
|
||||
{
|
||||
WINDOWINFO wi;
|
||||
DWORD Ret;
|
||||
|
||||
if(!(Window = UserGetWindowObject((HWND)Param1)))
|
||||
{
|
||||
RETURN( FALSE);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* According to WINE, Windows' doesn't check the cbSize field
|
||||
*/
|
||||
|
||||
Status = MmCopyFromCaller(&wi.cbSize, (PVOID)Param2, sizeof(wi.cbSize));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
RETURN( FALSE);
|
||||
}
|
||||
|
||||
if(wi.cbSize != sizeof(WINDOWINFO))
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
RETURN( FALSE);
|
||||
}
|
||||
#endif
|
||||
|
||||
if((Ret = (DWORD)IntGetWindowInfo(Window, &wi)))
|
||||
{
|
||||
Status = MmCopyToCaller((PVOID)Param2, &wi, sizeof(WINDOWINFO));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
RETURN( FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
RETURN( Ret);
|
||||
}
|
||||
|
||||
case TWOPARAM_ROUTINE_REGISTERLOGONPROC:
|
||||
RETURN( (DWORD)co_IntRegisterLogonProcess((HANDLE)Param1, (BOOL)Param2));
|
||||
|
||||
|
@ -803,6 +748,26 @@ NtUserCallHwndParam(
|
|||
case HWNDPARAM_ROUTINE_KILLSYSTEMTIMER:
|
||||
return IntKillTimer(hWnd, (UINT_PTR)Param, TRUE);
|
||||
|
||||
case HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID:
|
||||
{
|
||||
PWINDOW_OBJECT Window;
|
||||
|
||||
UserEnterExclusive();
|
||||
if(!(Window = UserGetWindowObject(hWnd)))
|
||||
{
|
||||
UserLeave();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( Param )
|
||||
IntSetProp(Window, gpsi->atomContextHelpIdProp, (HANDLE)Param);
|
||||
else
|
||||
IntRemoveProp(Window, gpsi->atomContextHelpIdProp);
|
||||
|
||||
UserLeave();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
case HWNDPARAM_ROUTINE_SETDIALOGPOINTER:
|
||||
{
|
||||
PWINDOW_OBJECT Window;
|
||||
|
|
|
@ -1678,6 +1678,7 @@ co_IntCreateWindowEx(DWORD dwExStyle,
|
|||
Wnd->head.pti = ti;
|
||||
Wnd->head.rpdesk = pti->Desktop;
|
||||
Wnd->hWndLastActive = hWnd;
|
||||
Wnd->state2 |= WNDS2_WIN40COMPAT;
|
||||
}
|
||||
|
||||
DPRINT("Created object with handle %X\n", hWnd);
|
||||
|
|
Loading…
Reference in a new issue