2003-08-07 04:03:25 +00:00
|
|
|
/* $Id: window.c,v 1.52 2003/08/07 04:03:24 royce Exp $
|
2001-06-12 17:51:51 +00:00
|
|
|
*
|
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS user32.dll
|
|
|
|
* FILE: lib/user32/windows/window.c
|
|
|
|
* PURPOSE: Window management
|
|
|
|
* PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
|
|
|
|
* UPDATE HISTORY:
|
|
|
|
* 06-06-2001 CSH Created
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
|
|
|
|
/* INCLUDES ******************************************************************/
|
|
|
|
|
2002-09-08 10:23:54 +00:00
|
|
|
#include <windows.h>
|
2001-06-12 17:51:51 +00:00
|
|
|
#include <user32.h>
|
2002-09-08 10:23:54 +00:00
|
|
|
#include <window.h>
|
|
|
|
#include <user32/callback.h>
|
2003-06-16 13:46:26 +00:00
|
|
|
#include <user32/regcontrol.h>
|
2001-06-12 17:51:51 +00:00
|
|
|
|
2003-05-04 15:41:40 +00:00
|
|
|
#define NDEBUG
|
|
|
|
#include <debug.h>
|
|
|
|
|
2003-06-16 13:46:26 +00:00
|
|
|
static BOOL ControlsInitCalled = FALSE;
|
|
|
|
|
2002-01-13 22:52:08 +00:00
|
|
|
/* FUNCTIONS *****************************************************************/
|
2003-03-28 19:25:00 +00:00
|
|
|
ULONG
|
2003-07-27 11:54:42 +00:00
|
|
|
WinHasThickFrameStyle(ULONG Style, ULONG ExStyle)
|
2003-03-28 19:25:00 +00:00
|
|
|
{
|
|
|
|
return((Style & WS_THICKFRAME) &&
|
|
|
|
(!((Style & (WS_DLGFRAME | WS_BORDER)) == WS_DLGFRAME)));
|
|
|
|
}
|
2001-06-12 17:51:51 +00:00
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
2002-08-31 23:18:47 +00:00
|
|
|
NTSTATUS STDCALL
|
|
|
|
User32SendNCCALCSIZEMessageForKernel(PVOID Arguments, ULONG ArgumentLength)
|
|
|
|
{
|
|
|
|
PSENDNCCALCSIZEMESSAGE_CALLBACK_ARGUMENTS CallbackArgs;
|
|
|
|
SENDNCCALCSIZEMESSAGE_CALLBACK_RESULT Result;
|
|
|
|
WNDPROC Proc;
|
|
|
|
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("User32SendNCCALCSIZEMessageForKernel.\n");
|
2002-08-31 23:18:47 +00:00
|
|
|
CallbackArgs = (PSENDNCCALCSIZEMESSAGE_CALLBACK_ARGUMENTS)Arguments;
|
|
|
|
if (ArgumentLength != sizeof(SENDNCCALCSIZEMESSAGE_CALLBACK_ARGUMENTS))
|
|
|
|
{
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("Wrong length.\n");
|
2002-08-31 23:18:47 +00:00
|
|
|
return(STATUS_INFO_LENGTH_MISMATCH);
|
|
|
|
}
|
2003-08-05 15:41:03 +00:00
|
|
|
/* FIXME: handle ANSI windows vs Unicode windows */
|
2002-08-31 23:18:47 +00:00
|
|
|
Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC);
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("Proc %X\n", Proc);
|
2002-08-31 23:18:47 +00:00
|
|
|
/* Call the window procedure; notice kernel messages are always unicode. */
|
|
|
|
if (CallbackArgs->Validate)
|
|
|
|
{
|
|
|
|
Result.Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_NCCALCSIZE,
|
|
|
|
TRUE,
|
|
|
|
(LPARAM)&CallbackArgs->Params);
|
|
|
|
Result.Params = CallbackArgs->Params;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Result.Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_NCCALCSIZE,
|
|
|
|
FALSE, (LPARAM)&CallbackArgs->Rect);
|
|
|
|
Result.Rect = CallbackArgs->Rect;
|
|
|
|
}
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("Returning result %d.\n", Result);
|
2002-09-17 23:46:23 +00:00
|
|
|
return(ZwCallbackReturn(&Result, sizeof(Result), STATUS_SUCCESS));
|
2002-08-31 23:18:47 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
2002-07-17 21:04:57 +00:00
|
|
|
NTSTATUS STDCALL
|
|
|
|
User32SendGETMINMAXINFOMessageForKernel(PVOID Arguments, ULONG ArgumentLength)
|
|
|
|
{
|
|
|
|
PSENDGETMINMAXINFO_CALLBACK_ARGUMENTS CallbackArgs;
|
|
|
|
SENDGETMINMAXINFO_CALLBACK_RESULT Result;
|
|
|
|
WNDPROC Proc;
|
|
|
|
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("User32SendGETMINAXINFOMessageForKernel.\n");
|
2002-07-17 21:04:57 +00:00
|
|
|
CallbackArgs = (PSENDGETMINMAXINFO_CALLBACK_ARGUMENTS)Arguments;
|
|
|
|
if (ArgumentLength != sizeof(SENDGETMINMAXINFO_CALLBACK_ARGUMENTS))
|
|
|
|
{
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("Wrong length.\n");
|
2002-07-17 21:04:57 +00:00
|
|
|
return(STATUS_INFO_LENGTH_MISMATCH);
|
|
|
|
}
|
2003-08-05 15:41:03 +00:00
|
|
|
/* FIXME: handle ANSI windows vs Unicode windows */
|
2002-07-17 21:04:57 +00:00
|
|
|
Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC);
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("Proc %X\n", Proc);
|
2002-07-17 21:04:57 +00:00
|
|
|
/* Call the window procedure; notice kernel messages are always unicode. */
|
|
|
|
Result.Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_GETMINMAXINFO,
|
|
|
|
0, (LPARAM)&CallbackArgs->MinMaxInfo);
|
|
|
|
Result.MinMaxInfo = CallbackArgs->MinMaxInfo;
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("Returning result %d.\n", Result);
|
2002-09-17 23:46:23 +00:00
|
|
|
return(ZwCallbackReturn(&Result, sizeof(Result), STATUS_SUCCESS));
|
2002-07-17 21:04:57 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
2002-06-18 21:51:11 +00:00
|
|
|
NTSTATUS STDCALL
|
|
|
|
User32SendCREATEMessageForKernel(PVOID Arguments, ULONG ArgumentLength)
|
|
|
|
{
|
|
|
|
PSENDCREATEMESSAGE_CALLBACK_ARGUMENTS CallbackArgs;
|
|
|
|
WNDPROC Proc;
|
|
|
|
LRESULT Result;
|
|
|
|
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("User32SendCREATEMessageForKernel.\n");
|
2002-06-18 21:51:11 +00:00
|
|
|
CallbackArgs = (PSENDCREATEMESSAGE_CALLBACK_ARGUMENTS)Arguments;
|
|
|
|
if (ArgumentLength != sizeof(SENDCREATEMESSAGE_CALLBACK_ARGUMENTS))
|
|
|
|
{
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("Wrong length.\n");
|
2002-06-18 21:51:11 +00:00
|
|
|
return(STATUS_INFO_LENGTH_MISMATCH);
|
|
|
|
}
|
2003-08-05 15:41:03 +00:00
|
|
|
/* FIXME: handle ANSI windows vs Unicode windows */
|
2002-06-18 21:51:11 +00:00
|
|
|
Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC);
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("Proc %X\n", Proc);
|
2002-06-18 21:51:11 +00:00
|
|
|
/* Call the window procedure; notice kernel messages are always unicode. */
|
|
|
|
Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_CREATE, 0,
|
|
|
|
(LPARAM)&CallbackArgs->CreateStruct);
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("Returning result %d.\n", Result);
|
2002-09-17 23:46:23 +00:00
|
|
|
return(ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS));
|
2002-06-18 21:51:11 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
2002-05-06 22:20:32 +00:00
|
|
|
NTSTATUS STDCALL
|
|
|
|
User32SendNCCREATEMessageForKernel(PVOID Arguments, ULONG ArgumentLength)
|
|
|
|
{
|
|
|
|
PSENDNCCREATEMESSAGE_CALLBACK_ARGUMENTS CallbackArgs;
|
|
|
|
WNDPROC Proc;
|
|
|
|
LRESULT Result;
|
|
|
|
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("User32SendNCCREATEMessageForKernel.\n");
|
2002-05-06 22:20:32 +00:00
|
|
|
CallbackArgs = (PSENDNCCREATEMESSAGE_CALLBACK_ARGUMENTS)Arguments;
|
|
|
|
if (ArgumentLength != sizeof(SENDNCCREATEMESSAGE_CALLBACK_ARGUMENTS))
|
|
|
|
{
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("Wrong length.\n");
|
2002-05-06 22:20:32 +00:00
|
|
|
return(STATUS_INFO_LENGTH_MISMATCH);
|
|
|
|
}
|
2003-08-05 15:41:03 +00:00
|
|
|
/* FIXME: handle ANSI windows vs Unicode windows */
|
2002-06-18 21:51:11 +00:00
|
|
|
Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC);
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("Proc %X\n", Proc);
|
2002-06-18 21:51:11 +00:00
|
|
|
/* Call the window procedure; notice kernel messages are always unicode. */
|
|
|
|
Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_NCCREATE, 0,
|
|
|
|
(LPARAM)&CallbackArgs->CreateStruct);
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("Returning result %d.\n", Result);
|
2002-09-17 23:46:23 +00:00
|
|
|
return(ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS));
|
2002-05-06 22:20:32 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
2003-05-17 14:37:23 +00:00
|
|
|
NTSTATUS STDCALL
|
|
|
|
User32SendWINDOWPOSCHANGINGMessageForKernel(PVOID Arguments, ULONG ArgumentLength)
|
|
|
|
{
|
|
|
|
PSENDWINDOWPOSCHANGING_CALLBACK_ARGUMENTS CallbackArgs;
|
|
|
|
WNDPROC Proc;
|
|
|
|
LRESULT Result;
|
|
|
|
|
|
|
|
DPRINT("User32SendWINDOWPOSCHANGINGMessageForKernel.\n");
|
|
|
|
CallbackArgs = (PSENDWINDOWPOSCHANGING_CALLBACK_ARGUMENTS)Arguments;
|
|
|
|
if (ArgumentLength != sizeof(SENDWINDOWPOSCHANGING_CALLBACK_ARGUMENTS))
|
|
|
|
{
|
|
|
|
DPRINT("Wrong length.\n");
|
|
|
|
return(STATUS_INFO_LENGTH_MISMATCH);
|
|
|
|
}
|
2003-08-05 15:41:03 +00:00
|
|
|
/* FIXME: handle ANSI windows vs Unicode windows */
|
2003-05-17 14:37:23 +00:00
|
|
|
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,
|
|
|
|
(LPARAM)&CallbackArgs->WindowPos);
|
|
|
|
DPRINT("Returning result %d.\n", Result);
|
|
|
|
return(ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS));
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
2003-05-17 14:37:23 +00:00
|
|
|
NTSTATUS STDCALL
|
|
|
|
User32SendWINDOWPOSCHANGEDMessageForKernel(PVOID Arguments, ULONG ArgumentLength)
|
|
|
|
{
|
|
|
|
PSENDWINDOWPOSCHANGED_CALLBACK_ARGUMENTS CallbackArgs;
|
|
|
|
WNDPROC Proc;
|
|
|
|
LRESULT Result;
|
|
|
|
|
|
|
|
DPRINT("User32SendWINDOWPOSCHANGEDMessageForKernel.\n");
|
|
|
|
CallbackArgs = (PSENDWINDOWPOSCHANGED_CALLBACK_ARGUMENTS)Arguments;
|
|
|
|
if (ArgumentLength != sizeof(SENDWINDOWPOSCHANGED_CALLBACK_ARGUMENTS))
|
|
|
|
{
|
|
|
|
DPRINT("Wrong length.\n");
|
|
|
|
return(STATUS_INFO_LENGTH_MISMATCH);
|
|
|
|
}
|
2003-08-05 15:41:03 +00:00
|
|
|
/* FIXME: handle ANSI windows vs Unicode windows */
|
2003-05-17 14:37:23 +00:00
|
|
|
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,
|
|
|
|
(LPARAM)&CallbackArgs->WindowPos);
|
|
|
|
DPRINT("Returning result %d.\n", Result);
|
|
|
|
return(ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS));
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
2003-06-05 03:55:36 +00:00
|
|
|
NTSTATUS STDCALL
|
|
|
|
User32SendSTYLECHANGINGMessageForKernel(PVOID Arguments, ULONG ArgumentLength)
|
|
|
|
{
|
|
|
|
PSENDSTYLECHANGING_CALLBACK_ARGUMENTS CallbackArgs;
|
|
|
|
WNDPROC Proc;
|
|
|
|
LRESULT Result;
|
|
|
|
|
|
|
|
DPRINT("User32SendSTYLECHANGINGMessageForKernel.\n");
|
|
|
|
CallbackArgs = (PSENDSTYLECHANGING_CALLBACK_ARGUMENTS)Arguments;
|
|
|
|
if (ArgumentLength != sizeof(SENDSTYLECHANGING_CALLBACK_ARGUMENTS))
|
|
|
|
{
|
|
|
|
DPRINT("Wrong length.\n");
|
|
|
|
return(STATUS_INFO_LENGTH_MISMATCH);
|
|
|
|
}
|
2003-08-05 15:41:03 +00:00
|
|
|
/* FIXME: handle ANSI windows vs Unicode windows */
|
2003-06-05 03:55:36 +00:00
|
|
|
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,
|
|
|
|
(LPARAM)&CallbackArgs->Style);
|
|
|
|
DPRINT("Returning result %d.\n", Result);
|
|
|
|
return(ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS));
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
2003-06-05 03:55:36 +00:00
|
|
|
NTSTATUS STDCALL
|
|
|
|
User32SendSTYLECHANGEDMessageForKernel(PVOID Arguments, ULONG ArgumentLength)
|
|
|
|
{
|
|
|
|
PSENDSTYLECHANGED_CALLBACK_ARGUMENTS CallbackArgs;
|
|
|
|
WNDPROC Proc;
|
|
|
|
LRESULT Result;
|
|
|
|
|
|
|
|
DPRINT("User32SendSTYLECHANGEDGMessageForKernel.\n");
|
|
|
|
CallbackArgs = (PSENDSTYLECHANGED_CALLBACK_ARGUMENTS)Arguments;
|
|
|
|
if (ArgumentLength != sizeof(SENDSTYLECHANGED_CALLBACK_ARGUMENTS))
|
|
|
|
{
|
|
|
|
DPRINT("Wrong length.\n");
|
|
|
|
return(STATUS_INFO_LENGTH_MISMATCH);
|
|
|
|
}
|
2003-08-05 15:41:03 +00:00
|
|
|
/* FIXME: handle ANSI windows vs Unicode windows */
|
2003-06-05 03:55:36 +00:00
|
|
|
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,
|
|
|
|
(LPARAM)&CallbackArgs->Style);
|
|
|
|
DPRINT("Returning result %d.\n", Result);
|
|
|
|
return(ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS));
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
2002-05-06 22:20:32 +00:00
|
|
|
NTSTATUS STDCALL
|
|
|
|
User32CallSendAsyncProcForKernel(PVOID Arguments, ULONG ArgumentLength)
|
|
|
|
{
|
|
|
|
PSENDASYNCPROC_CALLBACK_ARGUMENTS CallbackArgs;
|
2002-06-18 21:51:11 +00:00
|
|
|
|
2003-05-04 15:41:40 +00:00
|
|
|
DPRINT("User32CallSendAsyncProcKernel()\n");
|
2002-05-06 22:20:32 +00:00
|
|
|
CallbackArgs = (PSENDASYNCPROC_CALLBACK_ARGUMENTS)Arguments;
|
|
|
|
if (ArgumentLength != sizeof(WINDOWPROC_CALLBACK_ARGUMENTS))
|
|
|
|
{
|
|
|
|
return(STATUS_INFO_LENGTH_MISMATCH);
|
|
|
|
}
|
2002-07-04 19:56:38 +00:00
|
|
|
CallbackArgs->Callback(CallbackArgs->Wnd, CallbackArgs->Msg,
|
|
|
|
CallbackArgs->Context, CallbackArgs->Result);
|
2002-05-06 22:20:32 +00:00
|
|
|
return(STATUS_SUCCESS);
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
2002-01-27 01:11:24 +00:00
|
|
|
NTSTATUS STDCALL
|
|
|
|
User32CallWindowProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
|
|
|
|
{
|
|
|
|
PWINDOWPROC_CALLBACK_ARGUMENTS CallbackArgs;
|
|
|
|
LRESULT Result;
|
|
|
|
|
|
|
|
CallbackArgs = (PWINDOWPROC_CALLBACK_ARGUMENTS)Arguments;
|
|
|
|
if (ArgumentLength != sizeof(WINDOWPROC_CALLBACK_ARGUMENTS))
|
|
|
|
{
|
|
|
|
return(STATUS_INFO_LENGTH_MISMATCH);
|
|
|
|
}
|
2002-05-06 22:20:32 +00:00
|
|
|
if (CallbackArgs->Proc == NULL)
|
|
|
|
{
|
2003-08-05 15:41:03 +00:00
|
|
|
/* FIXME: handle ANSI windows vs Unicode windows */
|
2003-08-07 04:03:25 +00:00
|
|
|
CallbackArgs->Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd,
|
2002-05-06 22:20:32 +00:00
|
|
|
GWL_WNDPROC);
|
|
|
|
}
|
2002-06-18 21:51:11 +00:00
|
|
|
Result = CallWindowProcW(CallbackArgs->Proc, CallbackArgs->Wnd,
|
|
|
|
CallbackArgs->Msg, CallbackArgs->wParam,
|
|
|
|
CallbackArgs->lParam);
|
2002-09-17 23:46:23 +00:00
|
|
|
return(ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS));
|
2002-01-27 01:11:24 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
2003-03-28 19:25:00 +00:00
|
|
|
static void NC_AdjustRectOuter95 (LPRECT rect, DWORD style, BOOL menu, DWORD exStyle)
|
|
|
|
{
|
|
|
|
int adjust;
|
|
|
|
if(style & WS_ICONIC) return;
|
|
|
|
|
|
|
|
if ((exStyle & (WS_EX_STATICEDGE|WS_EX_DLGMODALFRAME)) ==
|
|
|
|
WS_EX_STATICEDGE)
|
|
|
|
{
|
|
|
|
adjust = 1; /* for the outer frame always present */
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
adjust = 0;
|
|
|
|
if ((exStyle & WS_EX_DLGMODALFRAME) ||
|
|
|
|
(style & (WS_THICKFRAME|WS_DLGFRAME))) adjust = 2; /* outer */
|
|
|
|
}
|
|
|
|
if (style & WS_THICKFRAME)
|
|
|
|
adjust += ( GetSystemMetrics (SM_CXFRAME)
|
|
|
|
- GetSystemMetrics (SM_CXDLGFRAME)); /* The resize border */
|
|
|
|
if ((style & (WS_BORDER|WS_DLGFRAME)) ||
|
|
|
|
(exStyle & WS_EX_DLGMODALFRAME))
|
|
|
|
adjust++; /* The other border */
|
|
|
|
|
|
|
|
InflateRect (rect, adjust, adjust);
|
|
|
|
|
|
|
|
if ((style & WS_CAPTION) == WS_CAPTION)
|
|
|
|
{
|
|
|
|
if (exStyle & WS_EX_TOOLWINDOW)
|
|
|
|
rect->top -= GetSystemMetrics(SM_CYSMCAPTION);
|
|
|
|
else
|
|
|
|
rect->top -= GetSystemMetrics(SM_CYCAPTION);
|
|
|
|
}
|
|
|
|
if (menu) rect->top -= GetSystemMetrics(SM_CYMENU);
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
2003-03-28 19:25:00 +00:00
|
|
|
static void
|
|
|
|
NC_AdjustRectInner95 (LPRECT rect, DWORD style, DWORD exStyle)
|
|
|
|
{
|
|
|
|
if(style & WS_ICONIC) return;
|
|
|
|
|
|
|
|
if (exStyle & WS_EX_CLIENTEDGE)
|
|
|
|
InflateRect(rect, GetSystemMetrics(SM_CXEDGE), GetSystemMetrics(SM_CYEDGE));
|
|
|
|
|
|
|
|
if (style & WS_VSCROLL)
|
|
|
|
{
|
|
|
|
if((exStyle & WS_EX_LEFTSCROLLBAR) != 0)
|
|
|
|
rect->left -= GetSystemMetrics(SM_CXVSCROLL);
|
|
|
|
else
|
|
|
|
rect->right += GetSystemMetrics(SM_CXVSCROLL);
|
|
|
|
}
|
|
|
|
if (style & WS_HSCROLL) rect->bottom += GetSystemMetrics(SM_CYHSCROLL);
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
AdjustWindowRect(LPRECT lpRect,
|
|
|
|
DWORD dwStyle,
|
|
|
|
WINBOOL bMenu)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2002-01-13 22:52:08 +00:00
|
|
|
return(AdjustWindowRectEx(lpRect, dwStyle, bMenu, 0));
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
AdjustWindowRectEx(LPRECT lpRect,
|
|
|
|
DWORD dwStyle,
|
|
|
|
WINBOOL bMenu,
|
|
|
|
DWORD dwExStyle)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-03-28 19:25:00 +00:00
|
|
|
dwStyle &= (WS_DLGFRAME | WS_BORDER | WS_THICKFRAME | WS_CHILD);
|
|
|
|
dwExStyle &= (WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE |
|
|
|
|
WS_EX_STATICEDGE | WS_EX_TOOLWINDOW);
|
|
|
|
if (dwExStyle & WS_EX_DLGMODALFRAME) dwStyle &= ~WS_THICKFRAME;
|
|
|
|
|
|
|
|
NC_AdjustRectOuter95( lpRect, dwStyle, bMenu, dwExStyle );
|
|
|
|
NC_AdjustRectInner95( lpRect, dwStyle, dwExStyle );
|
|
|
|
lpRect->right += 2;
|
|
|
|
lpRect->bottom += 2;
|
|
|
|
return TRUE;
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
AllowSetForegroundWindow(DWORD dwProcessId)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2002-01-13 22:52:08 +00:00
|
|
|
return(FALSE);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
AnimateWindow(HWND hwnd,
|
|
|
|
DWORD dwTime,
|
|
|
|
DWORD dwFlags)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
UINT STDCALL
|
|
|
|
ArrangeIconicWindows(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HDWP STDCALL
|
|
|
|
BeginDeferWindowPos(int nNumWindows)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return (HDWP)0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
BringWindowToTop(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WORD STDCALL
|
|
|
|
CascadeWindows(HWND hwndParent,
|
|
|
|
UINT wHow,
|
|
|
|
CONST RECT *lpRect,
|
|
|
|
UINT cKids,
|
|
|
|
const HWND *lpKids)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
|
|
|
ChildWindowFromPoint(HWND hWndParent,
|
|
|
|
POINT Point)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return (HWND)0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
|
|
|
ChildWindowFromPointEx(HWND hwndParent,
|
|
|
|
POINT pt,
|
|
|
|
UINT uFlags)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return (HWND)0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
CloseWindow(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-03-18 07:01:09 +00:00
|
|
|
SendMessageA(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
|
2003-05-12 19:30:00 +00:00
|
|
|
|
2003-03-18 07:01:09 +00:00
|
|
|
return (WINBOOL)(hWnd);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
|
|
|
CreateWindowExA(DWORD dwExStyle,
|
|
|
|
LPCSTR lpClassName,
|
|
|
|
LPCSTR lpWindowName,
|
|
|
|
DWORD dwStyle,
|
|
|
|
int x,
|
|
|
|
int y,
|
|
|
|
int nWidth,
|
|
|
|
int nHeight,
|
|
|
|
HWND hWndParent,
|
|
|
|
HMENU hMenu,
|
|
|
|
HINSTANCE hInstance,
|
|
|
|
LPVOID lpParam)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
|
|
|
UNICODE_STRING WindowName;
|
|
|
|
UNICODE_STRING ClassName;
|
|
|
|
HWND Handle;
|
2002-05-06 22:20:32 +00:00
|
|
|
INT sw;
|
2003-05-12 18:52:14 +00:00
|
|
|
|
2003-06-16 13:46:26 +00:00
|
|
|
/* Register built-in controls if not already done */
|
|
|
|
if (! ControlsInitCalled)
|
|
|
|
{
|
|
|
|
ControlsInit();
|
|
|
|
ControlsInitCalled = TRUE;
|
|
|
|
}
|
|
|
|
|
2003-05-12 19:30:00 +00:00
|
|
|
if (IS_ATOM(lpClassName))
|
2002-01-13 22:52:08 +00:00
|
|
|
{
|
|
|
|
RtlInitUnicodeString(&ClassName, NULL);
|
|
|
|
ClassName.Buffer = (LPWSTR)lpClassName;
|
2003-05-12 19:30:00 +00:00
|
|
|
}
|
|
|
|
else
|
2002-01-13 22:52:08 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
if (!RtlCreateUnicodeStringFromAsciiz(&(ClassName), (PCSZ)lpClassName))
|
2002-01-13 22:52:08 +00:00
|
|
|
{
|
|
|
|
SetLastError(ERROR_OUTOFMEMORY);
|
|
|
|
return (HWND)0;
|
|
|
|
}
|
|
|
|
}
|
2001-06-12 17:51:51 +00:00
|
|
|
|
2003-05-12 19:30:00 +00:00
|
|
|
if (!RtlCreateUnicodeStringFromAsciiz(&WindowName, (PCSZ)lpWindowName))
|
2002-01-13 22:52:08 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
if (!IS_ATOM(lpClassName))
|
2002-01-13 22:52:08 +00:00
|
|
|
{
|
|
|
|
RtlFreeUnicodeString(&ClassName);
|
|
|
|
}
|
2001-06-12 17:51:51 +00:00
|
|
|
SetLastError(ERROR_OUTOFMEMORY);
|
|
|
|
return (HWND)0;
|
|
|
|
}
|
|
|
|
|
2002-05-06 22:20:32 +00:00
|
|
|
/* Fixup default coordinates. */
|
|
|
|
sw = SW_SHOW;
|
2002-11-10 18:17:43 +00:00
|
|
|
if (x == (LONG) CW_USEDEFAULT || nWidth == (LONG) CW_USEDEFAULT)
|
2002-05-06 22:20:32 +00:00
|
|
|
{
|
|
|
|
if (dwStyle & (WS_CHILD | WS_POPUP))
|
|
|
|
{
|
2002-11-10 18:17:43 +00:00
|
|
|
if (x == (LONG) CW_USEDEFAULT)
|
2002-05-06 22:20:32 +00:00
|
|
|
{
|
|
|
|
x = y = 0;
|
|
|
|
}
|
2002-11-10 18:17:43 +00:00
|
|
|
if (nWidth == (LONG) CW_USEDEFAULT)
|
2002-05-06 22:20:32 +00:00
|
|
|
{
|
|
|
|
nWidth = nHeight = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
STARTUPINFOA info;
|
|
|
|
|
|
|
|
GetStartupInfoA(&info);
|
|
|
|
|
2002-11-10 18:17:43 +00:00
|
|
|
if (x == (LONG) CW_USEDEFAULT)
|
2002-05-06 22:20:32 +00:00
|
|
|
{
|
2002-11-10 18:17:43 +00:00
|
|
|
if (y != (LONG) CW_USEDEFAULT)
|
2002-05-06 22:20:32 +00:00
|
|
|
{
|
|
|
|
sw = y;
|
|
|
|
}
|
|
|
|
x = (info.dwFlags & STARTF_USEPOSITION) ? info.dwX : 0;
|
|
|
|
y = (info.dwFlags & STARTF_USEPOSITION) ? info.dwY : 0;
|
|
|
|
}
|
|
|
|
|
2002-11-10 18:17:43 +00:00
|
|
|
if (nWidth == (LONG) CW_USEDEFAULT)
|
2002-05-06 22:20:32 +00:00
|
|
|
{
|
|
|
|
if (info.dwFlags & STARTF_USESIZE)
|
|
|
|
{
|
|
|
|
nWidth = info.dwXSize;
|
|
|
|
nHeight = info.dwYSize;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
RECT r;
|
|
|
|
|
|
|
|
SystemParametersInfoA(SPI_GETWORKAREA, 0, &r, 0);
|
|
|
|
nWidth = (((r.right - r.left) * 3) / 4) - x;
|
|
|
|
nHeight = (((r.bottom - r.top) * 3) / 4) - y;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-01-13 22:52:08 +00:00
|
|
|
Handle = NtUserCreateWindowEx(dwExStyle,
|
|
|
|
&ClassName,
|
|
|
|
&WindowName,
|
|
|
|
dwStyle,
|
|
|
|
x,
|
|
|
|
y,
|
|
|
|
nWidth,
|
|
|
|
nHeight,
|
|
|
|
hWndParent,
|
|
|
|
hMenu,
|
|
|
|
hInstance,
|
|
|
|
lpParam,
|
2002-05-06 22:20:32 +00:00
|
|
|
sw);
|
2001-06-12 17:51:51 +00:00
|
|
|
|
|
|
|
RtlFreeUnicodeString(&WindowName);
|
|
|
|
|
2002-01-13 22:52:08 +00:00
|
|
|
if (!IS_ATOM(lpClassName))
|
|
|
|
{
|
|
|
|
RtlFreeUnicodeString(&ClassName);
|
|
|
|
}
|
|
|
|
|
2001-06-12 17:51:51 +00:00
|
|
|
return Handle;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
|
|
|
CreateWindowExW(DWORD dwExStyle,
|
|
|
|
LPCWSTR lpClassName,
|
|
|
|
LPCWSTR lpWindowName,
|
|
|
|
DWORD dwStyle,
|
|
|
|
int x,
|
|
|
|
int y,
|
|
|
|
int nWidth,
|
|
|
|
int nHeight,
|
|
|
|
HWND hWndParent,
|
|
|
|
HMENU hMenu,
|
|
|
|
HINSTANCE hInstance,
|
|
|
|
LPVOID lpParam)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
|
|
|
UNICODE_STRING WindowName;
|
|
|
|
UNICODE_STRING ClassName;
|
|
|
|
HANDLE Handle;
|
2002-05-06 22:20:32 +00:00
|
|
|
UINT sw;
|
2001-06-12 17:51:51 +00:00
|
|
|
|
2003-06-16 13:46:26 +00:00
|
|
|
/* Register built-in controls if not already done */
|
|
|
|
if (! ControlsInitCalled)
|
|
|
|
{
|
|
|
|
ControlsInit();
|
|
|
|
ControlsInitCalled = TRUE;
|
|
|
|
}
|
|
|
|
|
2002-01-13 22:52:08 +00:00
|
|
|
if (IS_ATOM(lpClassName))
|
|
|
|
{
|
|
|
|
RtlInitUnicodeString(&ClassName, NULL);
|
|
|
|
ClassName.Buffer = (LPWSTR)lpClassName;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
RtlInitUnicodeString(&ClassName, lpClassName);
|
|
|
|
}
|
2001-06-12 17:51:51 +00:00
|
|
|
|
|
|
|
RtlInitUnicodeString(&WindowName, lpWindowName);
|
|
|
|
|
2002-05-06 22:20:32 +00:00
|
|
|
/* Fixup default coordinates. */
|
|
|
|
sw = SW_SHOW;
|
2002-11-10 18:17:43 +00:00
|
|
|
if (x == (LONG) CW_USEDEFAULT || nWidth == (LONG) CW_USEDEFAULT)
|
2002-05-06 22:20:32 +00:00
|
|
|
{
|
|
|
|
if (dwStyle & (WS_CHILD | WS_POPUP))
|
|
|
|
{
|
2002-11-10 18:17:43 +00:00
|
|
|
if (x == (LONG) CW_USEDEFAULT)
|
2002-05-06 22:20:32 +00:00
|
|
|
{
|
|
|
|
x = y = 0;
|
|
|
|
}
|
2002-11-10 18:17:43 +00:00
|
|
|
if (nWidth == (LONG) CW_USEDEFAULT)
|
2002-05-06 22:20:32 +00:00
|
|
|
{
|
|
|
|
nWidth = nHeight = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
STARTUPINFOW info;
|
|
|
|
|
|
|
|
GetStartupInfoW(&info);
|
|
|
|
|
2002-11-10 18:17:43 +00:00
|
|
|
if (x == (LONG) CW_USEDEFAULT)
|
2002-05-06 22:20:32 +00:00
|
|
|
{
|
2002-11-10 18:17:43 +00:00
|
|
|
if (y != (LONG) CW_USEDEFAULT)
|
2002-05-06 22:20:32 +00:00
|
|
|
{
|
|
|
|
sw = y;
|
|
|
|
}
|
|
|
|
x = (info.dwFlags & STARTF_USEPOSITION) ? info.dwX : 0;
|
|
|
|
y = (info.dwFlags & STARTF_USEPOSITION) ? info.dwY : 0;
|
|
|
|
}
|
|
|
|
|
2002-11-10 18:17:43 +00:00
|
|
|
if (nWidth == (LONG) CW_USEDEFAULT)
|
2002-05-06 22:20:32 +00:00
|
|
|
{
|
|
|
|
if (info.dwFlags & STARTF_USESIZE)
|
|
|
|
{
|
|
|
|
nWidth = info.dwXSize;
|
|
|
|
nHeight = info.dwYSize;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
RECT r;
|
|
|
|
|
|
|
|
SystemParametersInfoW(SPI_GETWORKAREA, 0, &r, 0);
|
|
|
|
nWidth = (((r.right - r.left) * 3) / 4) - x;
|
|
|
|
nHeight = (((r.bottom - r.top) * 3) / 4) - y;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-01-13 22:52:08 +00:00
|
|
|
Handle = NtUserCreateWindowEx(dwExStyle,
|
|
|
|
&ClassName,
|
|
|
|
&WindowName,
|
|
|
|
dwStyle,
|
|
|
|
x,
|
|
|
|
y,
|
|
|
|
nWidth,
|
|
|
|
nHeight,
|
|
|
|
hWndParent,
|
|
|
|
hMenu,
|
|
|
|
hInstance,
|
|
|
|
lpParam,
|
|
|
|
0);
|
2001-06-12 17:51:51 +00:00
|
|
|
|
|
|
|
return (HWND)Handle;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HDWP STDCALL
|
|
|
|
DeferWindowPos(HDWP hWinPosInfo,
|
|
|
|
HWND hWnd,
|
|
|
|
HWND hWndInsertAfter,
|
|
|
|
int x,
|
|
|
|
int y,
|
|
|
|
int cx,
|
|
|
|
int cy,
|
|
|
|
UINT uFlags)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-08-04 16:56:49 +00:00
|
|
|
return NtUserDeferWindowPos(hWinPosInfo, hWnd, hWndInsertAfter, x, y, cx, cy, uFlags);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
DestroyWindow(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-03-06 23:57:03 +00:00
|
|
|
return NtUserDestroyWindow(hWnd);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
EndDeferWindowPos(HDWP hWinPosInfo)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
2003-07-25 23:02:21 +00:00
|
|
|
WINBOOL
|
|
|
|
STATIC
|
|
|
|
User32EnumWindows (
|
|
|
|
HDESK hDesktop,
|
|
|
|
HWND hWndparent,
|
|
|
|
ENUMWINDOWSPROC lpfn,
|
|
|
|
LPARAM lParam,
|
|
|
|
DWORD dwThreadId,
|
|
|
|
BOOL bChildren )
|
|
|
|
{
|
|
|
|
DWORD i, dwCount = 0;
|
|
|
|
HWND* pHwnd = NULL;
|
|
|
|
HANDLE hHeap;
|
|
|
|
|
|
|
|
if ( !lpfn )
|
|
|
|
{
|
|
|
|
SetLastError ( ERROR_INVALID_PARAMETER );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* FIXME instead of always making two calls, should we use some
|
|
|
|
sort of persistent buffer and only grow it ( requiring a 2nd
|
|
|
|
call ) when the buffer wasn't already big enough? */
|
|
|
|
/* first get how many window entries there are */
|
|
|
|
SetLastError(0);
|
|
|
|
dwCount = NtUserBuildHwndList (
|
|
|
|
hDesktop, hWndparent, bChildren, dwThreadId, lParam, NULL, 0 );
|
|
|
|
if ( !dwCount || GetLastError() )
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
/* allocate buffer to receive HWND handles */
|
|
|
|
hHeap = GetProcessHeap();
|
|
|
|
pHwnd = HeapAlloc ( hHeap, 0, sizeof(HWND)*(dwCount+1) );
|
|
|
|
if ( !pHwnd )
|
|
|
|
{
|
|
|
|
SetLastError ( ERROR_NOT_ENOUGH_MEMORY );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* now call kernel again to fill the buffer this time */
|
|
|
|
dwCount = NtUserBuildHwndList (
|
|
|
|
hDesktop, hWndparent, bChildren, dwThreadId, lParam, pHwnd, dwCount );
|
|
|
|
if ( !dwCount || GetLastError() )
|
|
|
|
{
|
|
|
|
if ( pHwnd )
|
|
|
|
HeapFree ( hHeap, 0, pHwnd );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* call the user's callback function until we're done or
|
|
|
|
they tell us to quit */
|
|
|
|
for ( i = 0; i < dwCount; i++ )
|
|
|
|
{
|
|
|
|
/* FIXME I'm only getting NULLs from Thread Enumeration, and it's
|
|
|
|
* probably because I'm not doing it right in NtUserBuildHwndList.
|
|
|
|
* Once that's fixed, we shouldn't have to check for a NULL HWND
|
|
|
|
* here
|
|
|
|
*/
|
|
|
|
if ( !(ULONG)pHwnd[i] ) /* don't enumerate a NULL HWND */
|
|
|
|
continue;
|
|
|
|
if ( !(*lpfn)( pHwnd[i], lParam ) )
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if ( pHwnd )
|
|
|
|
HeapFree ( hHeap, 0, pHwnd );
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
/*
|
2003-07-25 23:02:21 +00:00
|
|
|
* @implemented
|
2003-07-10 21:04:32 +00:00
|
|
|
*/
|
2003-07-25 23:02:21 +00:00
|
|
|
WINBOOL
|
|
|
|
STDCALL
|
|
|
|
EnumChildWindows(
|
|
|
|
HWND hWndParent,
|
|
|
|
ENUMWINDOWSPROC lpEnumFunc,
|
|
|
|
LPARAM lParam)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-07-25 23:02:21 +00:00
|
|
|
if ( !hWndParent )
|
|
|
|
hWndParent = GetDesktopWindow();
|
|
|
|
return User32EnumWindows ( NULL, hWndParent, lpEnumFunc, lParam, 0, FALSE );
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
2003-07-25 23:02:21 +00:00
|
|
|
* @implemented
|
2003-07-10 21:04:32 +00:00
|
|
|
*/
|
2003-07-25 23:02:21 +00:00
|
|
|
WINBOOL
|
|
|
|
STDCALL
|
2002-01-13 22:52:08 +00:00
|
|
|
EnumThreadWindows(DWORD dwThreadId,
|
|
|
|
ENUMWINDOWSPROC lpfn,
|
|
|
|
LPARAM lParam)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-07-25 23:02:21 +00:00
|
|
|
if ( !dwThreadId )
|
|
|
|
dwThreadId = GetCurrentThreadId();
|
|
|
|
return User32EnumWindows ( NULL, NULL, lpfn, lParam, dwThreadId, FALSE );
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
2003-07-25 23:02:21 +00:00
|
|
|
* @implemented
|
2003-07-10 21:04:32 +00:00
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
EnumWindows(ENUMWINDOWSPROC lpEnumFunc,
|
|
|
|
LPARAM lParam)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-07-25 23:02:21 +00:00
|
|
|
return User32EnumWindows ( NULL, NULL, lpEnumFunc, lParam, 0, FALSE );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
|
|
|
WINBOOL
|
|
|
|
STDCALL
|
|
|
|
EnumDesktopWindows(
|
|
|
|
HDESK hDesktop,
|
|
|
|
ENUMWINDOWSPROC lpfn,
|
|
|
|
LPARAM lParam)
|
|
|
|
{
|
|
|
|
return User32EnumWindows ( hDesktop, NULL, lpfn, lParam, 0, FALSE );
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
2001-07-06 00:05:05 +00:00
|
|
|
FindWindowA(LPCSTR lpClassName, LPCSTR lpWindowName)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2001-07-06 00:05:05 +00:00
|
|
|
//FIXME: FindWindow does not search children, but FindWindowEx does.
|
|
|
|
// what should we do about this?
|
|
|
|
return FindWindowExA (NULL, NULL, lpClassName, lpWindowName);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
|
|
|
FindWindowExA(HWND hwndParent,
|
|
|
|
HWND hwndChildAfter,
|
|
|
|
LPCSTR lpszClass,
|
|
|
|
LPCSTR lpszWindow)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return (HWND)0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
2001-07-06 00:05:05 +00:00
|
|
|
FindWindowW(LPCWSTR lpClassName, LPCWSTR lpWindowName)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-07-10 00:24:04 +00:00
|
|
|
/*
|
|
|
|
|
|
|
|
There was a FIXME here earlier, but I think it is just a documentation unclarity.
|
|
|
|
|
|
|
|
FindWindow only searches top level windows. What they mean is that child
|
|
|
|
windows of other windows than the desktop can be searched.
|
|
|
|
FindWindowExW never does a recursive search.
|
|
|
|
|
|
|
|
/ Joakim
|
|
|
|
*/
|
|
|
|
|
2001-07-06 00:05:05 +00:00
|
|
|
return FindWindowExW (NULL, NULL, lpClassName, lpWindowName);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
|
|
|
FindWindowExW(HWND hwndParent,
|
|
|
|
HWND hwndChildAfter,
|
|
|
|
LPCWSTR lpszClass,
|
|
|
|
LPCWSTR lpszWindow)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-07-10 00:24:04 +00:00
|
|
|
UNICODE_STRING ucClassName;
|
|
|
|
UNICODE_STRING ucWindowName;
|
2003-06-15 04:25:34 +00:00
|
|
|
|
|
|
|
if (IS_ATOM(lpszClass))
|
|
|
|
{
|
2003-07-10 00:24:04 +00:00
|
|
|
RtlInitUnicodeString(&ucClassName, NULL);
|
|
|
|
ucClassName.Buffer = (LPWSTR)lpszClass;
|
2003-06-15 04:25:34 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2003-07-10 00:24:04 +00:00
|
|
|
RtlInitUnicodeString(&ucClassName, lpszClass);
|
2003-06-15 04:25:34 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 00:24:04 +00:00
|
|
|
// Window names can't be atoms, and if lpszWindow = NULL,
|
|
|
|
// RtlInitUnicodeString will clear it
|
|
|
|
|
|
|
|
RtlInitUnicodeString(&ucWindowName, lpszWindow);
|
|
|
|
|
|
|
|
|
|
|
|
return NtUserFindWindowEx(hwndParent, hwndChildAfter, &ucClassName, &ucWindowName);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-09-08 10:23:54 +00:00
|
|
|
WINBOOL STDCALL
|
2002-01-13 22:52:08 +00:00
|
|
|
GetAltTabInfoA(HWND hwnd,
|
|
|
|
int iItem,
|
|
|
|
PALTTABINFO pati,
|
|
|
|
LPSTR pszItemText,
|
|
|
|
UINT cchItemText)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-09-08 10:23:54 +00:00
|
|
|
WINBOOL STDCALL
|
2002-01-13 22:52:08 +00:00
|
|
|
GetAltTabInfoW(HWND hwnd,
|
|
|
|
int iItem,
|
|
|
|
PALTTABINFO pati,
|
|
|
|
LPWSTR pszItemText,
|
|
|
|
UINT cchItemText)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
2002-08-30 02:47:37 +00:00
|
|
|
GetAncestor(HWND hwnd, UINT gaFlags)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2002-08-30 02:47:37 +00:00
|
|
|
return(NtUserGetAncestor(hwnd, gaFlags));
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
2002-09-17 23:46:23 +00:00
|
|
|
GetClientRect(HWND hWnd, LPRECT lpRect)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-03-06 21:03:49 +00:00
|
|
|
return(NtUserGetClientRect(hWnd, lpRect));
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
2001-06-12 17:51:51 +00:00
|
|
|
GetDesktopWindow(VOID)
|
|
|
|
{
|
2003-05-23 16:44:12 +00:00
|
|
|
return NtUserGetDesktopWindow();
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
2001-06-12 17:51:51 +00:00
|
|
|
GetForegroundWindow(VOID)
|
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return (HWND)0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-09-08 10:23:54 +00:00
|
|
|
WINBOOL STDCALL
|
2002-01-13 22:52:08 +00:00
|
|
|
GetGUIThreadInfo(DWORD idThread,
|
2002-09-08 10:23:54 +00:00
|
|
|
LPGUITHREADINFO lpgui)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
|
|
|
GetLastActivePopup(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-08-04 16:56:49 +00:00
|
|
|
return NtUserGetLastActivePopup(hWnd);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
|
|
|
GetParent(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-08-04 16:56:49 +00:00
|
|
|
return NtUserGetParent(hWnd);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
GetProcessDefaultLayout(DWORD *pdwDefaultLayout)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
GetTitleBarInfo(HWND hwnd,
|
|
|
|
PTITLEBARINFO pti)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
2003-08-04 16:56:49 +00:00
|
|
|
* @implemented
|
2003-07-10 21:04:32 +00:00
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
|
|
|
GetTopWindow(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-08-04 16:56:49 +00:00
|
|
|
if (!hWnd) hWnd = GetDesktopWindow();
|
|
|
|
return GetWindow( hWnd, GW_CHILD );
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
2003-08-04 16:56:49 +00:00
|
|
|
* @implemented
|
2003-07-10 21:04:32 +00:00
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
|
|
|
GetWindow(HWND hWnd,
|
|
|
|
UINT uCmd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-08-04 16:56:49 +00:00
|
|
|
return NtUserGetWindow(hWnd, uCmd);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
GetWindowInfo(HWND hwnd,
|
|
|
|
PWINDOWINFO pwi)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
UINT STDCALL
|
|
|
|
GetWindowModuleFileName(HWND hwnd,
|
|
|
|
LPSTR lpszFileName,
|
|
|
|
UINT cchFileNameMax)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2002-09-08 10:23:54 +00:00
|
|
|
return 0;
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
UINT STDCALL
|
|
|
|
GetWindowModuleFileNameA(HWND hwnd,
|
|
|
|
LPSTR lpszFileName,
|
|
|
|
UINT cchFileNameMax)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
UINT STDCALL
|
|
|
|
GetWindowModuleFileNameW(HWND hwnd,
|
|
|
|
LPWSTR lpszFileName,
|
|
|
|
UINT cchFileNameMax)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
GetWindowPlacement(HWND hWnd,
|
|
|
|
WINDOWPLACEMENT *lpwndpl)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
GetWindowRect(HWND hWnd,
|
|
|
|
LPRECT lpRect)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2002-08-31 23:18:47 +00:00
|
|
|
return(NtUserGetWindowRect(hWnd, lpRect));
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
int STDCALL
|
2002-09-03 22:44:21 +00:00
|
|
|
GetWindowTextA(HWND hWnd, LPSTR lpString, int nMaxCount)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2002-09-03 22:44:21 +00:00
|
|
|
return(SendMessageA(hWnd, WM_GETTEXT, nMaxCount, (LPARAM)lpString));
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
int STDCALL
|
|
|
|
GetWindowTextLengthA(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2002-09-03 22:44:21 +00:00
|
|
|
return(SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0));
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
int STDCALL
|
|
|
|
GetWindowTextLengthW(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
2003-08-07 04:03:25 +00:00
|
|
|
* @implemented
|
2003-07-10 21:04:32 +00:00
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
int STDCALL
|
2003-08-07 04:03:25 +00:00
|
|
|
GetWindowTextW(
|
|
|
|
HWND hWnd,
|
|
|
|
LPWSTR lpString,
|
|
|
|
int nMaxCount)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-08-07 04:03:25 +00:00
|
|
|
return(SendMessageW(hWnd, WM_GETTEXT, nMaxCount, (LPARAM)lpString));
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2002-01-13 22:52:08 +00:00
|
|
|
DWORD STDCALL
|
|
|
|
GetWindowThreadProcessId(HWND hWnd,
|
|
|
|
LPDWORD lpdwProcessId)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-07-25 19:37:14 +00:00
|
|
|
return NtUserGetWindowThreadProcessId(hWnd, lpdwProcessId);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
IsChild(HWND hWndParent,
|
|
|
|
HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
2003-07-23 06:14:12 +00:00
|
|
|
* @implemented
|
2003-07-10 21:04:32 +00:00
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
IsIconic(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-08-05 15:41:03 +00:00
|
|
|
return (NtUserGetWindowLong( hWnd, GWL_STYLE, FALSE) & WS_MINIMIZE) != 0;
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
IsWindow(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-08-05 15:41:03 +00:00
|
|
|
DWORD WndProc = NtUserGetWindowLong(hWnd, GWL_WNDPROC, FALSE);
|
2003-05-12 18:52:14 +00:00
|
|
|
return (0 != WndProc || ERROR_INVALID_HANDLE != GetLastError());
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
IsWindowUnicode(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-19 20:11:17 +00:00
|
|
|
#ifdef TODO
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2003-05-19 20:11:17 +00:00
|
|
|
#endif
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
IsWindowVisible(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-08-07 04:03:25 +00:00
|
|
|
while (GetWindowLongW(hWnd, GWL_STYLE) & WS_CHILD)
|
2002-08-30 02:47:37 +00:00
|
|
|
{
|
2003-08-07 04:03:25 +00:00
|
|
|
if (!(GetWindowLongW(hWnd, GWL_STYLE) & WS_VISIBLE))
|
2002-08-30 02:47:37 +00:00
|
|
|
{
|
|
|
|
return(FALSE);
|
|
|
|
}
|
|
|
|
hWnd = GetAncestor(hWnd, GA_PARENT);
|
|
|
|
}
|
2003-08-07 04:03:25 +00:00
|
|
|
return(GetWindowLongW(hWnd, GWL_STYLE) & WS_VISIBLE);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
IsZoomed(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-08-07 04:03:25 +00:00
|
|
|
ULONG uStyle = GetWindowLongW(hWnd, GWL_STYLE);
|
2003-03-18 06:44:11 +00:00
|
|
|
|
|
|
|
return (uStyle & WS_MAXIMIZE);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
LockSetForegroundWindow(UINT uLockCode)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
MoveWindow(HWND hWnd,
|
|
|
|
int X,
|
|
|
|
int Y,
|
|
|
|
int nWidth,
|
|
|
|
int nHeight,
|
|
|
|
WINBOOL bRepaint)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
return NtUserMoveWindow(hWnd, X, Y, nWidth, nHeight, bRepaint);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
OpenIcon(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
|
|
|
RealChildWindowFromPoint(HWND hwndParent,
|
|
|
|
POINT ptParentClientCoords)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return (HWND)0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2001-06-12 17:51:51 +00:00
|
|
|
UINT
|
2002-01-13 22:52:08 +00:00
|
|
|
RealGetWindowClass(HWND hwnd,
|
2003-08-07 04:03:25 +00:00
|
|
|
PVOID pszType,
|
2002-01-13 22:52:08 +00:00
|
|
|
UINT cchType)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-08-07 04:03:25 +00:00
|
|
|
/*
|
|
|
|
* FIXME - I don't think this function should exist...
|
|
|
|
* see RealGetWindowClassA & RealGetWindowClassW
|
|
|
|
*/
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
SetForegroundWindow(HWND hWnd)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
SetLayeredWindowAttributes(HWND hwnd,
|
|
|
|
COLORREF crKey,
|
|
|
|
BYTE bAlpha,
|
|
|
|
DWORD dwFlags)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
|
|
|
SetParent(HWND hWndChild,
|
|
|
|
HWND hWndNewParent)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return (HWND)0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
SetProcessDefaultLayout(DWORD dwDefaultLayout)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
SetWindowPlacement(HWND hWnd,
|
|
|
|
CONST WINDOWPLACEMENT *lpwndpl)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
SetWindowPos(HWND hWnd,
|
|
|
|
HWND hWndInsertAfter,
|
|
|
|
int X,
|
|
|
|
int Y,
|
|
|
|
int cx,
|
|
|
|
int cy,
|
|
|
|
UINT uFlags)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-18 07:51:41 +00:00
|
|
|
return NtUserSetWindowPos(hWnd,hWndInsertAfter, X, Y, cx, cy, uFlags);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
SetWindowTextA(HWND hWnd,
|
|
|
|
LPCSTR lpString)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-19 20:11:17 +00:00
|
|
|
return SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)lpString);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
SetWindowTextW(HWND hWnd,
|
|
|
|
LPCWSTR lpString)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-19 20:11:17 +00:00
|
|
|
return SendMessageW(hWnd, WM_SETTEXT, 0, (LPARAM)lpString);
|
2001-06-12 17:51:51 +00:00
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
ShowOwnedPopups(HWND hWnd,
|
|
|
|
WINBOOL fShow)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
ShowWindow(HWND hWnd,
|
|
|
|
int nCmdShow)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
|
|
|
return NtUserShowWindow(hWnd, nCmdShow);
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
ShowWindowAsync(HWND hWnd,
|
|
|
|
int nCmdShow)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WORD STDCALL
|
|
|
|
TileWindows(HWND hwndParent,
|
|
|
|
UINT wHow,
|
|
|
|
CONST RECT *lpRect,
|
|
|
|
UINT cKids,
|
|
|
|
const HWND *lpKids)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
UpdateLayeredWindow(HWND hwnd,
|
|
|
|
HDC hdcDst,
|
|
|
|
POINT *pptDst,
|
|
|
|
SIZE *psize,
|
|
|
|
HDC hdcSrc,
|
|
|
|
POINT *pptSrc,
|
|
|
|
COLORREF crKey,
|
|
|
|
BLENDFUNCTION *pblend,
|
|
|
|
DWORD dwFlags)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
2002-01-13 22:52:08 +00:00
|
|
|
HWND STDCALL
|
|
|
|
WindowFromPoint(POINT Point)
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2003-05-12 19:30:00 +00:00
|
|
|
UNIMPLEMENTED;
|
2001-06-12 17:51:51 +00:00
|
|
|
return (HWND)0;
|
|
|
|
}
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-09-17 23:46:23 +00:00
|
|
|
int STDCALL
|
|
|
|
MapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT cPoints)
|
|
|
|
{
|
|
|
|
POINT FromOffset, ToOffset;
|
|
|
|
LONG XMove, YMove;
|
|
|
|
ULONG i;
|
|
|
|
|
|
|
|
NtUserGetClientOrigin(hWndFrom, &FromOffset);
|
|
|
|
NtUserGetClientOrigin(hWndTo, &ToOffset);
|
2003-03-09 15:08:33 +00:00
|
|
|
XMove = FromOffset.x - ToOffset.x;
|
|
|
|
YMove = FromOffset.y - ToOffset.y;
|
2003-03-09 15:09:23 +00:00
|
|
|
|
2002-09-17 23:46:23 +00:00
|
|
|
for (i = 0; i < cPoints; i++)
|
|
|
|
{
|
|
|
|
lpPoints[i].x += XMove;
|
|
|
|
lpPoints[i].y += YMove;
|
|
|
|
}
|
2003-07-28 08:09:51 +00:00
|
|
|
return(MAKELONG(LOWORD(XMove), LOWORD(YMove)));
|
2002-09-17 23:46:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-07-10 21:04:32 +00:00
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
2002-09-17 23:46:23 +00:00
|
|
|
WINBOOL STDCALL
|
|
|
|
ScreenToClient(HWND hWnd, LPPOINT lpPoint)
|
|
|
|
{
|
|
|
|
return(MapWindowPoints(NULL, hWnd, lpPoint, 1));
|
|
|
|
}
|
|
|
|
|
2003-07-23 04:52:44 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* @implemented
|
|
|
|
*/
|
|
|
|
WINBOOL STDCALL
|
|
|
|
ClientToScreen(HWND hWnd, LPPOINT lpPoint)
|
|
|
|
{
|
|
|
|
return (MapWindowPoints( hWnd, NULL, lpPoint, 1 ));
|
|
|
|
}
|
|
|
|
|
2003-07-28 08:09:51 +00:00
|
|
|
|
|
|
|
WINBOOL
|
|
|
|
STDCALL
|
|
|
|
SetWindowContextHelpId(HWND hwnd,
|
|
|
|
DWORD dwContextHelpId)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return(FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* @unimplemented
|
|
|
|
*/
|
|
|
|
DWORD
|
|
|
|
STDCALL
|
|
|
|
GetWindowContextHelpId(HWND hwnd)
|
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
2001-06-12 17:51:51 +00:00
|
|
|
/* EOF */
|