ReactOS 0.4.16-dev-297-gc569aee
window.c File Reference
#include <user32.h>
Include dependency graph for window.c:

Go to the source code of this file.

Macros

#define DEBUG
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (user32)
 
void MDI_CalcDefaultChildPos (HWND hwndClient, INT total, LPPOINT lpPos, INT delta, UINT *id)
 
LPCWSTR FASTCALL ClassNameToVersion (const void *lpszClass, LPCWSTR lpszMenuName, LPCWSTR *plpLibFileName, HANDLE *pContext, BOOL bAnsi)
 
NTSTATUS WINAPI User32CallSendAsyncProcForKernel (PVOID Arguments, ULONG ArgumentLength)
 
BOOL WINAPI AllowSetForegroundWindow (DWORD dwProcessId)
 
HDWP WINAPI BeginDeferWindowPos (int nNumWindows)
 
BOOL WINAPI BringWindowToTop (HWND hWnd)
 
VOID WINAPI SwitchToThisWindow (HWND hwnd, BOOL fAltTab)
 
HWND WINAPI ChildWindowFromPoint (HWND hWndParent, POINT Point)
 
HWND WINAPI ChildWindowFromPointEx (HWND hwndParent, POINT pt, UINT uFlags)
 
BOOL WINAPI CloseWindow (HWND hWnd)
 
FORCEINLINE VOID RtlInitLargeString (OUT PLARGE_STRING plstr, LPCVOID psz, BOOL bUnicode)
 
VOID NTAPI RtlFreeLargeString (IN PLARGE_STRING LargeString)
 
HWND WINAPI User32CreateWindowEx (DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam, DWORD dwFlags)
 
HWND WINAPI DECLSPEC_HOTPATCH 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)
 
HWND WINAPI DECLSPEC_HOTPATCH 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)
 
HDWP WINAPI DeferWindowPos (HDWP hWinPosInfo, HWND hWnd, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags)
 
BOOL WINAPI EndDeferWindowPos (HDWP hWinPosInfo)
 
HWND WINAPI GetDesktopWindow (VOID)
 
static BOOL User32EnumWindows (HDESK hDesktop, HWND hWndparent, WNDENUMPROC lpfn, LPARAM lParam, DWORD dwThreadId, BOOL bChildren)
 
BOOL WINAPI EnumChildWindows (HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam)
 
BOOL WINAPI EnumThreadWindows (DWORD dwThreadId, WNDENUMPROC lpfn, LPARAM lParam)
 
BOOL WINAPI EnumWindows (WNDENUMPROC lpEnumFunc, LPARAM lParam)
 
BOOL WINAPI EnumDesktopWindows (HDESK hDesktop, WNDENUMPROC lpfn, LPARAM lParam)
 
HWND WINAPI FindWindowExA (HWND hwndParent, HWND hwndChildAfter, LPCSTR lpszClass, LPCSTR lpszWindow)
 
HWND WINAPI FindWindowExW (HWND hwndParent, HWND hwndChildAfter, LPCWSTR lpszClass, LPCWSTR lpszWindow)
 
HWND WINAPI FindWindowA (LPCSTR lpClassName, LPCSTR lpWindowName)
 
HWND WINAPI FindWindowW (LPCWSTR lpClassName, LPCWSTR lpWindowName)
 
BOOL WINAPI GetAltTabInfoA (HWND hwnd, int iItem, PALTTABINFO pati, LPSTR pszItemText, UINT cchItemText)
 
BOOL WINAPI GetAltTabInfoW (HWND hwnd, int iItem, PALTTABINFO pati, LPWSTR pszItemText, UINT cchItemText)
 
HWND WINAPI GetAncestor (HWND hwnd, UINT gaFlags)
 
BOOL WINAPI GetClientRect (HWND hWnd, LPRECT lpRect)
 
HWND WINAPI GetLastActivePopup (HWND hWnd)
 
HWND WINAPI GetParent (HWND hWnd)
 
BOOL WINAPI GetProcessDefaultLayout (DWORD *pdwDefaultLayout)
 
HWND WINAPI GetWindow (HWND hWnd, UINT uCmd)
 
HWND WINAPI GetTopWindow (HWND hWnd)
 
BOOL WINAPI DECLSPEC_HOTPATCH GetWindowInfo (HWND hWnd, PWINDOWINFO pwi)
 
UINT WINAPI GetWindowModuleFileNameA (HWND hwnd, LPSTR lpszFileName, UINT cchFileNameMax)
 
UINT WINAPI GetWindowModuleFileNameW (HWND hwnd, LPWSTR lpszFileName, UINT cchFileNameMax)
 
BOOL WINAPI GetWindowRect (HWND hWnd, LPRECT lpRect)
 
int WINAPI GetWindowTextA (HWND hWnd, LPSTR lpString, int nMaxCount)
 
int WINAPI GetWindowTextLengthA (HWND hWnd)
 
int WINAPI GetWindowTextLengthW (HWND hWnd)
 
int WINAPI GetWindowTextW (HWND hWnd, LPWSTR lpString, int nMaxCount)
 
DWORD WINAPI GetWindowThreadProcessId (HWND hWnd, LPDWORD lpdwProcessId)
 
BOOL WINAPI IsChild (HWND hWndParent, HWND hWnd)
 
BOOL WINAPI IsIconic (HWND hWnd)
 
BOOL WINAPI IsWindow (HWND hWnd)
 
BOOL WINAPI IsWindowUnicode (HWND hWnd)
 
BOOL WINAPI IsWindowVisible (HWND hWnd)
 
BOOL WINAPI IsWindowEnabled (HWND hWnd)
 
BOOL WINAPI IsZoomed (HWND hWnd)
 
BOOL WINAPI LockSetForegroundWindow (UINT uLockCode)
 
BOOL WINAPI AnimateWindow (HWND hwnd, DWORD dwTime, DWORD dwFlags)
 
BOOL WINAPI OpenIcon (HWND hWnd)
 
HWND WINAPI RealChildWindowFromPoint (HWND hwndParent, POINT ptParentClientCoords)
 
BOOL WINAPI SetForegroundWindow (HWND hWnd)
 
BOOL WINAPI SetProcessDefaultLayout (DWORD dwDefaultLayout)
 
BOOL WINAPI DECLSPEC_HOTPATCH SetWindowTextA (HWND hWnd, LPCSTR lpString)
 
BOOL WINAPI DECLSPEC_HOTPATCH SetWindowTextW (HWND hWnd, LPCWSTR lpString)
 
BOOL WINAPI ShowOwnedPopups (HWND hWnd, BOOL fShow)
 
BOOL WINAPI UpdateLayeredWindow (HWND hwnd, HDC hdcDst, POINT *pptDst, SIZE *psize, HDC hdcSrc, POINT *pptSrc, COLORREF crKey, BLENDFUNCTION *pbl, DWORD dwFlags)
 
BOOL WINAPI UpdateLayeredWindowIndirect (HWND hwnd, const UPDATELAYEREDWINDOWINFO *info)
 
BOOL WINAPI SetWindowContextHelpId (HWND hwnd, DWORD dwContextHelpId)
 
DWORD WINAPI GetWindowContextHelpId (HWND hwnd)
 
int WINAPI InternalGetWindowText (HWND hWnd, LPWSTR lpString, int nMaxCount)
 
BOOL WINAPI IsHungAppWindow (HWND hwnd)
 
VOID WINAPI SetLastErrorEx (DWORD dwErrCode, DWORD dwType)
 
HWND WINAPI GetFocus (VOID)
 
DWORD WINAPI GetRealWindowOwner (HWND hwnd)
 
HWND WINAPI SetTaskmanWindow (HWND hWnd)
 
HWND WINAPI SetProgmanWindow (HWND hWnd)
 
HWND WINAPI GetProgmanWindow (VOID)
 
HWND WINAPI GetTaskmanWindow (VOID)
 
BOOL WINAPI ScrollWindow (HWND hWnd, int dx, int dy, CONST RECT *lpRect, CONST RECT *prcClip)
 
INT WINAPI ScrollWindowEx (HWND hWnd, int dx, int dy, CONST RECT *prcScroll, CONST RECT *prcClip, HRGN hrgnUpdate, LPRECT prcUpdate, UINT flags)
 
BOOL WINAPI AnyPopup (VOID)
 
BOOL WINAPI IsWindowInDestroy (HWND hWnd)
 
VOID WINAPI DisableProcessWindowsGhosting (VOID)
 

Macro Definition Documentation

◆ DEBUG

#define DEBUG

Definition at line 12 of file window.c.

Function Documentation

◆ AllowSetForegroundWindow()

BOOL WINAPI AllowSetForegroundWindow ( DWORD  dwProcessId)

Definition at line 49 of file window.c.

50{
51 return NtUserxAllowSetForegroundWindow(dwProcessId);
52}
EXTINLINE BOOL NtUserxAllowSetForegroundWindow(DWORD dwProcessId)
Definition: ntwrapper.h:836

Referenced by Activate_RunDLL(), SHCreateFromDesktop(), and NotifyArea::WndProc().

◆ AnimateWindow()

BOOL WINAPI AnimateWindow ( HWND  hwnd,
DWORD  dwTime,
DWORD  dwFlags 
)

Definition at line 1627 of file window.c.

1630{
1631 /* FIXME Add animation code */
1632
1633 /* If trying to show/hide and it's already *
1634 * shown/hidden or invalid window, fail with *
1635 * invalid parameter */
1636
1637 BOOL visible;
1638 visible = IsWindowVisible(hwnd);
1639 if(!IsWindow(hwnd) ||
1640 (visible && !(dwFlags & AW_HIDE)) ||
1641 (!visible && (dwFlags & AW_HIDE)))
1642 {
1644 return FALSE;
1645 }
1646
1647 ShowWindow(hwnd, (dwFlags & AW_HIDE) ? SW_HIDE : ((dwFlags & AW_ACTIVATE) ? SW_SHOW : SW_SHOWNA));
1648
1649 return TRUE;
1650}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
unsigned int BOOL
Definition: ntddk_ex.h:94
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define SW_HIDE
Definition: winuser.h:771
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define SW_SHOWNA
Definition: winuser.h:781
#define SW_SHOW
Definition: winuser.h:778
BOOL WINAPI IsWindowVisible(_In_ HWND)

◆ AnyPopup()

BOOL WINAPI AnyPopup ( VOID  )

Definition at line 1966 of file window.c.

1967{
1968 int i;
1969 BOOL retvalue;
1971
1972 if (!list) return FALSE;
1973 for (i = 0; list[i]; i++)
1974 {
1975 if (IsWindowVisible( list[i] ) && GetWindow( list[i], GW_OWNER )) break;
1976 }
1977 retvalue = (list[i] != 0);
1978 HeapFree( GetProcessHeap(), 0, list );
1979 return retvalue;
1980}
Definition: list.h:37
#define GetProcessHeap()
Definition: compat.h:736
#define HeapFree(x, y, z)
Definition: compat.h:735
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HWND * WIN_ListChildren(HWND hWndparent)
Definition: mdi.c:139
HWND WINAPI GetWindow(HWND hWnd, UINT uCmd)
Definition: window.c:1095
#define GW_OWNER
Definition: winuser.h:769
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:628

◆ BeginDeferWindowPos()

HDWP WINAPI BeginDeferWindowPos ( int  nNumWindows)

Definition at line 59 of file window.c.

60{
61 return NtUserxBeginDeferWindowPos(nNumWindows);
62}
EXTINLINE HDWP NtUserxBeginDeferWindowPos(INT nNumWindows)
Definition: ntwrapper.h:651

◆ BringWindowToTop()

BOOL WINAPI BringWindowToTop ( HWND  hWnd)

Definition at line 69 of file window.c.

70{
73 0,
74 0,
75 0,
76 0,
78}
HWND hWnd
Definition: settings.c:17
BOOL NTAPI NtUserSetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)
Definition: winpos.c:3523
#define SWP_NOMOVE
Definition: winuser.h:1247
#define SWP_NOSIZE
Definition: winuser.h:1248
#define HWND_TOP
Definition: winuser.h:1210

◆ ChildWindowFromPoint()

HWND WINAPI ChildWindowFromPoint ( HWND  hWndParent,
POINT  Point 
)

Definition at line 92 of file window.c.

94{
96}
HWND NTAPI NtUserChildWindowFromPointEx(HWND Parent, LONG x, LONG y, UINT Flags)
Definition: winpos.c:3242

◆ ChildWindowFromPointEx()

HWND WINAPI ChildWindowFromPointEx ( HWND  hwndParent,
POINT  pt,
UINT  uFlags 
)

Definition at line 103 of file window.c.

106{
108}
static HWND hwndParent
Definition: cryptui.c:300
UINT uFlags
Definition: api.c:59
#define pt(x, y)
Definition: drawing.c:79

◆ ClassNameToVersion()

LPCWSTR FASTCALL ClassNameToVersion ( const void lpszClass,
LPCWSTR  lpszMenuName,
LPCWSTR plpLibFileName,
HANDLE pContext,
BOOL  bAnsi 
)

Definition at line 85 of file class.c.

91{
92 LPCWSTR VersionedClass = NULL;
93#ifdef USE_VERSIONED_CLASSES
95#endif
96 UNICODE_STRING SectionName;
97 WCHAR SectionNameBuf[MAX_PATH] = {0};
98 ACTCTX_SECTION_KEYED_DATA KeyedData = { sizeof(KeyedData) };
99
100 if (!lpszClass)
101 {
102 ERR("Null class given !\n");
103 return NULL;
104 }
105
106 if (IS_ATOM(lpszClass))
107 {
108 RtlInitEmptyUnicodeString(&SectionName, SectionNameBuf, sizeof(SectionNameBuf));
109 if(!NtUserGetAtomName(LOWORD((DWORD_PTR)lpszClass), &SectionName))
110 {
111 ERR("Couldn't get atom name for atom %x !\n", LOWORD((DWORD_PTR)lpszClass));
112 return NULL;
113 }
114 SectionName.Length = (USHORT)wcslen(SectionNameBuf) * sizeof(WCHAR);
115 TRACE("ClassNameToVersion got name %wZ from atom\n", &SectionName);
116 }
117 else
118 {
119 if (bAnsi)
120 {
122 RtlInitAnsiString(&AnsiString, lpszClass);
123 RtlInitEmptyUnicodeString(&SectionName, SectionNameBuf, sizeof(SectionNameBuf));
125 }
126 else
127 {
128 RtlInitUnicodeString(&SectionName, lpszClass);
129 }
130 }
131#ifdef USE_VERSIONED_CLASSES
132 Status = RtlFindActivationContextSectionString( FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX,
133 NULL,
134 ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION,
135 &SectionName,
136 &KeyedData );
137
138 if (NT_SUCCESS(Status) && KeyedData.ulDataFormatVersion == 1)
139 {
140 struct strsection_header *SectionHeader = KeyedData.lpSectionBase;
141
142 /* Find activation context */
143 if(SectionHeader && SectionHeader->count > 0)
144 {
145 struct wndclass_redirect_data *WindowRedirectionData = KeyedData.lpData;
146 if(WindowRedirectionData && WindowRedirectionData->module_len)
147 {
148 LPCWSTR lpLibFileName;
149
150 VersionedClass = (WCHAR*)((BYTE*)WindowRedirectionData + WindowRedirectionData->name_offset);
151 lpLibFileName = (WCHAR*)((BYTE*)KeyedData.lpSectionBase + WindowRedirectionData->module_offset);
152 TRACE("Returning VersionedClass=%S, plpLibFileName=%S for class %S\n", VersionedClass, lpLibFileName, SectionName.Buffer);
153
154 if (pContext) *pContext = KeyedData.hActCtx;
155 if (plpLibFileName) *plpLibFileName = lpLibFileName;
156
157 }
158 }
159 }
160
161 if (KeyedData.hActCtx)
162 RtlReleaseActivationContext(KeyedData.hActCtx);
163#endif
164
165#ifndef DEFAULT_ACTIVATION_CONTEXTS_SUPPORTED
166 /* This block is a hack! */
167 if (!VersionedClass)
168 {
169 /*
170 * In windows the default activation context always contains comctl32v5
171 * In reactos we don't have a default activation context so we
172 * mimic wine here.
173 */
174 VersionedClass = is_comctl32_class(SectionName.Buffer);
175 if (VersionedClass)
176 {
177 if (pContext) *pContext = 0;
178 if (plpLibFileName) *plpLibFileName = L"comctl32";
179 }
180 }
181#endif
182
183 /*
184 * The returned strings are pointers in the activation context and
185 * will get freed when the activation context gets freed
186 */
187 return VersionedClass;
188}
LONG NTSTATUS
Definition: precomp.h:26
#define ERR(fmt,...)
Definition: precomp.h:57
#define IS_ATOM(x)
Definition: class.h:3
#define NULL
Definition: types.h:112
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define MAX_PATH
Definition: compat.h:34
@ AnsiString
Definition: dnslib.h:19
Status
Definition: gdiplustypes.h:25
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
NTSYSAPI NTSTATUS WINAPI RtlFindActivationContextSectionString(ULONG, const GUID *, ULONG, const UNICODE_STRING *, PVOID)
Definition: actctx.c:5874
NTSYSAPI void WINAPI RtlReleaseActivationContext(HANDLE)
Definition: actctx.c:5384
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
#define L(x)
Definition: ntvdm.h:50
#define LOWORD(l)
Definition: pedump.c:82
unsigned short USHORT
Definition: pedump.c:61
#define TRACE(s)
Definition: solgame.cpp:4
uint32_t DWORD_PTR
Definition: typedefs.h:65
LPCWSTR is_comctl32_class(const WCHAR *name)
Definition: class.c:46
__wchar_t WCHAR
Definition: xmlstorage.h:180
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193

Referenced by GetClassInfoExA(), GetClassInfoExW(), RegisterClassExWOWW(), UnregisterClassA(), UnregisterClassW(), and User32CreateWindowEx().

◆ CloseWindow()

BOOL WINAPI CloseWindow ( HWND  hWnd)

Definition at line 115 of file window.c.

116{
117 /* NOTE: CloseWindow does minimizes, and doesn't close. */
120}
#define SW_SHOWMINIMIZED
Definition: winuser.h:774
HWND WINAPI SetActiveWindow(_In_ HWND)

◆ CreateWindowExA()

HWND WINAPI DECLSPEC_HOTPATCH 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 
)

Definition at line 352 of file window.c.

364{
366 HWND hwnd;
367
369 {
370 TRACE("CreateWindowExA RegisterSystemControls\n");
372 }
373
374 if (dwExStyle & WS_EX_MDICHILD)
375 {
376 POINT mPos[2];
377 UINT id = 0;
378 HWND top_child;
379 PWND pWndParent;
380
381 pWndParent = ValidateHwnd(hWndParent);
382
383 if (!pWndParent) return NULL;
384
385 if (pWndParent->fnid != FNID_MDICLIENT) // wine uses WIN_ISMDICLIENT
386 {
387 WARN("WS_EX_MDICHILD, but parent %p is not MDIClient\n", hWndParent);
388 goto skip_mdi;
389 }
390
391 /* lpParams of WM_[NC]CREATE is different for MDI children.
392 * MDICREATESTRUCT members have the originally passed values.
393 */
394 mdi.szClass = lpClassName;
395 mdi.szTitle = lpWindowName;
396 mdi.hOwner = hInstance;
397 mdi.x = x;
398 mdi.y = y;
399 mdi.cx = nWidth;
400 mdi.cy = nHeight;
401 mdi.style = dwStyle;
402 mdi.lParam = (LPARAM)lpParam;
403
404 lpParam = (LPVOID)&mdi;
405
406 if (pWndParent->style & MDIS_ALLCHILDSTYLES)
407 {
408 if (dwStyle & WS_POPUP)
409 {
410 WARN("WS_POPUP with MDIS_ALLCHILDSTYLES is not allowed\n");
411 return(0);
412 }
413 dwStyle |= (WS_CHILD | WS_CLIPSIBLINGS);
414 }
415 else
416 {
417 dwStyle &= ~WS_POPUP;
420 }
421
422 top_child = GetWindow(hWndParent, GW_CHILD);
423
424 if (top_child)
425 {
426 /* Restore current maximized child */
427 if((dwStyle & WS_VISIBLE) && IsZoomed(top_child))
428 {
429 TRACE("Restoring current maximized child %p\n", top_child);
430 SendMessageW( top_child, WM_SETREDRAW, FALSE, 0 );
431 ShowWindow(top_child, SW_RESTORE);
432 SendMessageW( top_child, WM_SETREDRAW, TRUE, 0 );
433 }
434 }
435
436 MDI_CalcDefaultChildPos(hWndParent, -1, mPos, 0, &id);
437
438 if (!(dwStyle & WS_POPUP)) hMenu = UlongToHandle(id);
439
440 if (dwStyle & (WS_CHILD | WS_POPUP))
441 {
442 if (x == CW_USEDEFAULT || x == CW_USEDEFAULT16)
443 {
444 x = mPos[0].x;
445 y = mPos[0].y;
446 }
447 if (nWidth == CW_USEDEFAULT || nWidth == CW_USEDEFAULT16 || !nWidth)
448 nWidth = mPos[1].x;
449 if (nHeight == CW_USEDEFAULT || nHeight == CW_USEDEFAULT16 || !nHeight)
450 nHeight = mPos[1].y;
451 }
452 }
453
454skip_mdi:
455 hwnd = User32CreateWindowEx(dwExStyle,
456 lpClassName,
457 lpWindowName,
458 dwStyle,
459 x,
460 y,
461 nWidth,
462 nHeight,
464 hMenu,
465 hInstance,
466 lpParam,
467 NUCWE_ANSI);
468 return hwnd;
469}
#define CW_USEDEFAULT16
Definition: resource.h:7
#define WARN(fmt,...)
Definition: precomp.h:61
#define UlongToHandle(ul)
Definition: basetsd.h:97
HINSTANCE hInstance
Definition: charmap.c:19
#define ValidateHwnd(hwnd)
Definition: precomp.h:85
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
#define FNID_MDICLIENT
Definition: ntuser.h:872
unsigned int UINT
Definition: ndis.h:50
#define LPVOID
Definition: nt_native.h:45
#define WS_CHILD
Definition: pedump.c:617
#define WS_CAPTION
Definition: pedump.c:624
#define WS_MAXIMIZEBOX
Definition: pedump.c:632
#define WS_SYSMENU
Definition: pedump.c:629
#define WS_POPUP
Definition: pedump.c:616
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_MINIMIZEBOX
Definition: pedump.c:631
#define WS_THICKFRAME
Definition: pedump.c:630
DWORD RegisterDefaultClasses
Definition: regcontrol.c:13
BOOL WINAPI RegisterSystemControls(VOID)
Definition: regcontrol.c:70
Definition: ntuser.h:694
DWORD style
Definition: ntuser.h:706
DWORD fnid
Definition: ntuser.h:709
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
#define NUCWE_ANSI
Definition: undocuser.h:76
BOOL WINAPI IsZoomed(HWND hWnd)
Definition: window.c:1607
void MDI_CalcDefaultChildPos(HWND hwndClient, INT total, LPPOINT lpPos, INT delta, UINT *id)
Definition: mdi.c:308
HWND WINAPI User32CreateWindowEx(DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam, DWORD dwFlags)
Definition: window.c:152
LONG_PTR LPARAM
Definition: windef.h:208
#define MDIS_ALLCHILDSTYLES
Definition: winuser.h:253
#define WS_EX_MDICHILD
Definition: winuser.h:394
#define CW_USEDEFAULT
Definition: winuser.h:225
#define SW_RESTORE
Definition: winuser.h:782
#define GW_CHILD
Definition: winuser.h:766
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_SETREDRAW
Definition: winuser.h:1619

◆ CreateWindowExW()

HWND WINAPI DECLSPEC_HOTPATCH 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 
)

Definition at line 478 of file window.c.

490{
492 HWND hwnd;
493
495 {
496 ERR("CreateWindowExW RegisterSystemControls\n");
498 }
499
500 if (dwExStyle & WS_EX_MDICHILD)
501 {
502 POINT mPos[2];
503 UINT id = 0;
504 HWND top_child;
505 PWND pWndParent;
506
507 pWndParent = ValidateHwnd(hWndParent);
508
509 if (!pWndParent) return NULL;
510
511 if (pWndParent->fnid != FNID_MDICLIENT)
512 {
513 WARN("WS_EX_MDICHILD, but parent %p is not MDIClient\n", hWndParent);
514 goto skip_mdi;
515 }
516
517 /* lpParams of WM_[NC]CREATE is different for MDI children.
518 * MDICREATESTRUCT members have the originally passed values.
519 */
520 mdi.szClass = lpClassName;
521 mdi.szTitle = lpWindowName;
522 mdi.hOwner = hInstance;
523 mdi.x = x;
524 mdi.y = y;
525 mdi.cx = nWidth;
526 mdi.cy = nHeight;
527 mdi.style = dwStyle;
528 mdi.lParam = (LPARAM)lpParam;
529
530 lpParam = (LPVOID)&mdi;
531
532 if (pWndParent->style & MDIS_ALLCHILDSTYLES)
533 {
534 if (dwStyle & WS_POPUP)
535 {
536 WARN("WS_POPUP with MDIS_ALLCHILDSTYLES is not allowed\n");
537 return(0);
538 }
539 dwStyle |= (WS_CHILD | WS_CLIPSIBLINGS);
540 }
541 else
542 {
543 dwStyle &= ~WS_POPUP;
546 }
547
548 top_child = GetWindow(hWndParent, GW_CHILD);
549
550 if (top_child)
551 {
552 /* Restore current maximized child */
553 if((dwStyle & WS_VISIBLE) && IsZoomed(top_child))
554 {
555 TRACE("Restoring current maximized child %p\n", top_child);
556 SendMessageW( top_child, WM_SETREDRAW, FALSE, 0 );
557 ShowWindow(top_child, SW_RESTORE);
558 SendMessageW( top_child, WM_SETREDRAW, TRUE, 0 );
559 }
560 }
561
562 MDI_CalcDefaultChildPos(hWndParent, -1, mPos, 0, &id);
563
564 if (!(dwStyle & WS_POPUP)) hMenu = UlongToHandle(id);
565
566 if (dwStyle & (WS_CHILD | WS_POPUP))
567 {
568 if (x == CW_USEDEFAULT || x == CW_USEDEFAULT16)
569 {
570 x = mPos[0].x;
571 y = mPos[0].y;
572 }
573 if (nWidth == CW_USEDEFAULT || nWidth == CW_USEDEFAULT16 || !nWidth)
574 nWidth = mPos[1].x;
575 if (nHeight == CW_USEDEFAULT || nHeight == CW_USEDEFAULT16 || !nHeight)
576 nHeight = mPos[1].y;
577 }
578 }
579
580skip_mdi:
581 hwnd = User32CreateWindowEx(dwExStyle,
582 (LPCSTR)lpClassName,
583 (LPCSTR)lpWindowName,
584 dwStyle,
585 x,
586 y,
587 nWidth,
588 nHeight,
590 hMenu,
591 hInstance,
592 lpParam,
593 0);
594 return hwnd;
595}
const char * LPCSTR
Definition: xmlstorage.h:183

◆ DeferWindowPos()

HDWP WINAPI DeferWindowPos ( HDWP  hWinPosInfo,
HWND  hWnd,
HWND  hWndInsertAfter,
int  x,
int  y,
int  cx,
int  cy,
UINT  uFlags 
)

Definition at line 601 of file window.c.

609{
610 return NtUserDeferWindowPos(hWinPosInfo, hWnd, hWndInsertAfter, x, y, cx, cy, uFlags);
611}
HDWP NTAPI NtUserDeferWindowPos(HDWP WinPosInfo, HWND Wnd, HWND WndInsertAfter, int x, int y, int cx, int cy, UINT Flags)
Definition: winpos.c:3279
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
_Out_opt_ int * cx
Definition: commctrl.h:585

◆ DisableProcessWindowsGhosting()

VOID WINAPI DisableProcessWindowsGhosting ( VOID  )

Definition at line 1999 of file window.c.

2000{
2002}
EXTINLINE VOID NtUserxEnableProcessWindowGhosting(BOOL bEnable)
Definition: ntwrapper.h:801

◆ EndDeferWindowPos()

BOOL WINAPI EndDeferWindowPos ( HDWP  hWinPosInfo)

Definition at line 618 of file window.c.

619{
620 return NtUserEndDeferWindowPosEx(hWinPosInfo, FALSE);
621}
BOOL NTAPI NtUserEndDeferWindowPosEx(HDWP WinPosInfo, BOOL bAsync)
Definition: winpos.c:3263

◆ EnumChildWindows()

BOOL WINAPI EnumChildWindows ( HWND  hWndParent,
WNDENUMPROC  lpEnumFunc,
LPARAM  lParam 
)

Definition at line 742 of file window.c.

745{
746 if (!hWndParent)
747 {
748 return EnumWindows(lpEnumFunc, lParam);
749 }
750 return User32EnumWindows(NULL, hWndParent, lpEnumFunc, lParam, 0, TRUE);
751}
LPARAM lParam
Definition: combotst.c:139
BOOL WINAPI EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)
Definition: window.c:772
static BOOL User32EnumWindows(HDESK hDesktop, HWND hWndparent, WNDENUMPROC lpfn, LPARAM lParam, DWORD dwThreadId, BOOL bChildren)
Definition: window.c:650

◆ EnumDesktopWindows()

BOOL WINAPI EnumDesktopWindows ( HDESK  hDesktop,
WNDENUMPROC  lpfn,
LPARAM  lParam 
)

Definition at line 783 of file window.c.

786{
787 return User32EnumWindows(hDesktop, NULL, lpfn, lParam, 0, FALSE);
788}

◆ EnumThreadWindows()

BOOL WINAPI EnumThreadWindows ( DWORD  dwThreadId,
WNDENUMPROC  lpfn,
LPARAM  lParam 
)

Definition at line 758 of file window.c.

761{
762 if (!dwThreadId)
765}
DWORD dwThreadId
Definition: fdebug.c:31
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459

◆ EnumWindows()

BOOL WINAPI EnumWindows ( WNDENUMPROC  lpEnumFunc,
LPARAM  lParam 
)

Definition at line 772 of file window.c.

774{
775 return User32EnumWindows(NULL, NULL, lpEnumFunc, lParam, 0, FALSE);
776}

Referenced by EnumChildWindows().

◆ FindWindowA()

HWND WINAPI FindWindowA ( LPCSTR  lpClassName,
LPCSTR  lpWindowName 
)

Definition at line 870 of file window.c.

871{
872 //FIXME: FindWindow does not search children, but FindWindowEx does.
873 // what should we do about this?
874 return FindWindowExA (NULL, NULL, lpClassName, lpWindowName);
875}
HWND WINAPI FindWindowExA(HWND hwndParent, HWND hwndChildAfter, LPCSTR lpszClass, LPCSTR lpszWindow)
Definition: window.c:795

◆ FindWindowExA()

HWND WINAPI FindWindowExA ( HWND  hwndParent,
HWND  hwndChildAfter,
LPCSTR  lpszClass,
LPCSTR  lpszWindow 
)

Definition at line 795 of file window.c.

799{
801 HWND hwnd = 0;
802
803 if (lpszWindow)
804 {
805 DWORD len = MultiByteToWideChar( CP_ACP, 0, lpszWindow, -1, NULL, 0 );
806 if (!(titleW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) return 0;
807 MultiByteToWideChar( CP_ACP, 0, lpszWindow, -1, titleW, len );
808 }
809
810 if (!IS_INTRESOURCE(lpszClass))
811 {
812 WCHAR classW[256];
813 if (MultiByteToWideChar( CP_ACP, 0, lpszClass, -1, classW, sizeof(classW)/sizeof(WCHAR) ))
814 hwnd = FindWindowExW( hwndParent, hwndChildAfter, classW, titleW );
815 }
816 else
817 {
818 hwnd = FindWindowExW( hwndParent, hwndChildAfter, (LPCWSTR)lpszClass, titleW );
819 }
820
822 return hwnd;
823}
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
#define MultiByteToWideChar
Definition: compat.h:110
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLsizei len
Definition: glext.h:6722
static const WCHAR titleW[]
Definition: htmlelem.c:1067
static const WCHAR classW[]
Definition: lex.c:40
HWND WINAPI FindWindowExW(HWND hwndParent, HWND hwndChildAfter, LPCWSTR lpszClass, LPCWSTR lpszWindow)
Definition: window.c:830
#define IS_INTRESOURCE(i)
Definition: winuser.h:580
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by FindWindowA().

◆ FindWindowExW()

HWND WINAPI FindWindowExW ( HWND  hwndParent,
HWND  hwndChildAfter,
LPCWSTR  lpszClass,
LPCWSTR  lpszWindow 
)

Definition at line 830 of file window.c.

834{
835 UNICODE_STRING ucClassName, *pucClassName = NULL;
836 UNICODE_STRING ucWindowName, *pucWindowName = NULL;
837
838 if (IS_ATOM(lpszClass))
839 {
840 ucClassName.Length = 0;
841 ucClassName.Buffer = (LPWSTR)lpszClass;
842 pucClassName = &ucClassName;
843 }
844 else if (lpszClass != NULL)
845 {
846 RtlInitUnicodeString(&ucClassName,
847 lpszClass);
848 pucClassName = &ucClassName;
849 }
850
851 if (lpszWindow != NULL)
852 {
853 RtlInitUnicodeString(&ucWindowName,
854 lpszWindow);
855 pucWindowName = &ucWindowName;
856 }
857
859 hwndChildAfter,
860 pucClassName,
861 pucWindowName,
862 0);
863}
HWND NTAPI NtUserFindWindowEx(HWND hwndParent, HWND hwndChildAfter, PUNICODE_STRING ucClassName, PUNICODE_STRING ucWindowName, DWORD dwUnknown)
Definition: window.c:3146

Referenced by FindWindowExA(), and FindWindowW().

◆ FindWindowW()

HWND WINAPI FindWindowW ( LPCWSTR  lpClassName,
LPCWSTR  lpWindowName 
)

Definition at line 882 of file window.c.

883{
884 /*
885
886 There was a FIXME here earlier, but I think it is just a documentation unclarity.
887
888 FindWindow only searches top level windows. What they mean is that child
889 windows of other windows than the desktop can be searched.
890 FindWindowExW never does a recursive search.
891
892 / Joakim
893 */
894
895 return FindWindowExW(NULL, NULL, lpClassName, lpWindowName);
896}

◆ GetAltTabInfoA()

BOOL WINAPI GetAltTabInfoA ( HWND  hwnd,
int  iItem,
PALTTABINFO  pati,
LPSTR  pszItemText,
UINT  cchItemText 
)

Definition at line 904 of file window.c.

909{
910 return NtUserGetAltTabInfo(hwnd,iItem,pati,(LPWSTR)pszItemText,cchItemText,TRUE);
911}
BOOL NTAPI NtUserGetAltTabInfo(HWND hwnd, INT iItem, PALTTABINFO pati, LPWSTR pszItemText, UINT cchItemText, BOOL Ansi)
Definition: ntstubs.c:86

◆ GetAltTabInfoW()

BOOL WINAPI GetAltTabInfoW ( HWND  hwnd,
int  iItem,
PALTTABINFO  pati,
LPWSTR  pszItemText,
UINT  cchItemText 
)

Definition at line 918 of file window.c.

923{
924 return NtUserGetAltTabInfo(hwnd,iItem,pati,pszItemText,cchItemText,FALSE);
925}

◆ GetAncestor()

HWND WINAPI GetAncestor ( HWND  hwnd,
UINT  gaFlags 
)

Definition at line 932 of file window.c.

933{
934 HWND Ret = NULL;
935 PWND Ancestor, Wnd;
936
937 Wnd = ValidateHwnd(hwnd);
938 if (!Wnd)
939 return NULL;
940
942 {
943 Ancestor = NULL;
944 switch (gaFlags)
945 {
946 case GA_PARENT:
947 if (Wnd->spwndParent != NULL)
948 Ancestor = DesktopPtrToUser(Wnd->spwndParent);
949 break;
950
951 default:
952 /* FIXME: Call win32k for now */
953 Wnd = NULL;
954 break;
955 }
956
957 if (Ancestor != NULL)
958 Ret = UserHMGetHandle(Ancestor);
959 }
961 {
962 /* Do nothing */
963 }
964 _SEH2_END;
965
966 if (!Wnd) /* Fall back */
967 Ret = NtUserGetAncestor(hwnd, gaFlags);
968
969 return Ret;
970}
static PVOID FASTCALL DesktopPtrToUser(PVOID ptr)
Definition: utils.c:324
#define UserHMGetHandle(obj)
Definition: ntuser.h:230
HWND NTAPI NtUserGetAncestor(HWND hWnd, UINT Flags)
Definition: window.c:3413
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:66
#define _SEH2_END
Definition: pseh2_64.h:155
#define _SEH2_TRY
Definition: pseh2_64.h:55
struct _WND * spwndParent
Definition: ntuser.h:713
#define GA_PARENT
Definition: winuser.h:2791

◆ GetClientRect()

BOOL WINAPI GetClientRect ( HWND  hWnd,
LPRECT  lpRect 
)

Definition at line 977 of file window.c.

978{
979 PWND Wnd = ValidateHwnd(hWnd);
980
981 if (!Wnd) return FALSE;
982 if (Wnd->style & WS_MINIMIZED)
983 {
984 lpRect->left = lpRect->top = 0;
987 return TRUE;
988 }
989 if ( hWnd != GetDesktopWindow()) // Wnd->fnid != FNID_DESKTOP )
990 {
991/* lpRect->left = lpRect->top = 0;
992 lpRect->right = Wnd->rcClient.right - Wnd->rcClient.left;
993 lpRect->bottom = Wnd->rcClient.bottom - Wnd->rcClient.top;
994*/
995 *lpRect = Wnd->rcClient;
996 OffsetRect(lpRect, -Wnd->rcClient.left, -Wnd->rcClient.top);
997 }
998 else
999 {
1000 lpRect->left = lpRect->top = 0;
1001 lpRect->right = Wnd->rcClient.right;
1002 lpRect->bottom = Wnd->rcClient.bottom;
1003/* Do this until Init bug is fixed. This sets 640x480, see InitMetrics.
1004 lpRect->right = GetSystemMetrics(SM_CXSCREEN);
1005 lpRect->bottom = GetSystemMetrics(SM_CYSCREEN);
1006*/ }
1007 return TRUE;
1008}
RECT rcClient
Definition: ntuser.h:717
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
#define WS_MINIMIZED
Definition: undocuser.h:18
#define SM_CXMINIMIZED
Definition: winuser.h:1023
#define SM_CYMINIMIZED
Definition: winuser.h:1024
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
int WINAPI GetSystemMetrics(_In_ int)

◆ GetDesktopWindow()

HWND WINAPI GetDesktopWindow ( VOID  )

Definition at line 628 of file window.c.

629{
630 PWND Wnd;
631 HWND Ret = NULL;
632
634 {
635 Wnd = GetThreadDesktopWnd();
636 if (Wnd != NULL)
637 Ret = UserHMGetHandle(Wnd);
638 }
640 {
641 /* Do nothing */
642 }
643 _SEH2_END;
644
645 return Ret;
646}
PWND FASTCALL GetThreadDesktopWnd(VOID)
Definition: misc.c:397

Referenced by _tWinMain(), AnyPopup(), Window::AppBar_SetSide(), BackupWindowsPosProc(), CDimmedWindow::Capture(), CascadeWindows(), CenterWindow(), ClientToScreen(), clipboard_thread(), CommDlgProc(), create_dde_server(), create_dde_window(), create_directdraw(), create_parent(), create_parent_window(), createParentWindow(), DATETIME_LButtonDown(), ddraw_attach_d3d_device(), ddraw_set_swapchain_window(), DIALOG_CreateIndirect(), DIALOG_FindMsgDestination(), DlgProc(), do_wait_idle_child(), doWinMain(), DSoundRender_create(), explorer_main(), get_hwnd(), GetClientRect(), GetTopWindow(), GetWindowRect(), GUIDisplayLockedNotice(), GUIDisplaySASNotice(), GUILockedSAS(), GUILoggedOnSAS(), GUILoggedOutSAS(), HandleShutdown(), IDirectInputDevice2WImpl_SetCooperativeLevel(), ImageList_DragEnter(), ImageList_DragLeave(), init_nscontainer(), IntBroadcastSystemMessage(), IntGetWindowLong(), IsDialogMessageW(), IShellBrowserImpl_GetWindow(), IsThereAnyEffectiveWindow(), MapWindowPoints(), MCIAVI_mciWhere(), MCICDA_Play(), MCIQTZ_mciWhere(), CTrayWindow::MinimizeAll(), CZipExtract::CExtractSettingsPage::OnSetActive(), OnTimer(), CNotifyToolbar::OnTooltipShow(), OnTrayInitDialog(), CMenuDeskBar::Popup(), queue_event(), Run(), running_on_visible_desktop(), ScreenToClient(), set_clipboard_thread(), shellbrowser_GetWindow(), ShowStatusMessageThread(), SlideWindow(), START_TEST(), StartupWindowThread(), SysMouseWImpl_Acquire(), test_bad_control_class(), test_buttons(), test_clipboard_viewers(), test_ClipboardOwner(), test_create_window(), test_CreateWindow(), test_CShellMenu_with_DeskBar(), test_custom_default_button(), test_data_handles(), test_deferwindowpos(), test_DeleteDC(), test_DestroyWindow(), test_dialog_parent(), test_disableowner(), test_dpi_mapping(), test_dpi_window(), test_fullscreen(), test_GetRandomRgn(), test_gettext(), test_GetWindowModuleFileName(), test_hwnd_message(), test_ImmThreads(), test_InternetErrorDlg(), test_IsWindowUnicode(), test_killfocus(), test_marshal_HWND(), test_mdi(), test_mdi_messages(), test_messages(), test_nopage(), Test_OneParamRoutine_MapDesktopObject(), Test_OneParamRoutine_WindowFromDC(), test_paint_messages(), test_parent_owner(), test_PrintDlgExW(), test_PSM_ADDPAGE(), test_PSM_INSERTPAGE(), test_RunControlPanel(), test_SetFocus(), test_SetForegroundWindow(), test_SetParent(), test_SetWindowPos(), test_title(), test_token_security_descriptor(), test_wiznavigation(), ThemePreWindowProc(), thread(), TileWindows(), TREEVIEW_CreateDragImage(), UManStartDlg(), WinMain(), WINTRUST_CertVerify(), WINTRUST_DefaultVerify(), WndProc(), and wWinMain().

◆ GetFocus()

HWND WINAPI GetFocus ( VOID  )

Definition at line 1865 of file window.c.

1866{
1868}
@ THREADSTATE_FOCUSWINDOW
Definition: ntuser.h:2472
DWORD_PTR NTAPI NtUserGetThreadState(DWORD Routine)
Definition: misc.c:240

Referenced by _CmdWndProc(), _tWinMain(), check_active_state_(), check_wnd_state_(), Client_get_accState(), COMBOEX_ComboWndProc(), FileChildWindow::Command(), CicBridge::CreateInputContext(), CredDialogInit(), DEFDLG_Proc(), DEFDLG_SaveFocus(), delayFocusDlgWinProc(), DialogProc_0(), DialogProc_1(), DlgMainProc(), edit_dialog_proc(), edit_singleline_dialog_proc(), edit_wantreturn_dialog_proc(), EDIT_WM_NCPaint(), EndDialog(), FillGrid(), GetActiveContext(), CMainWindow::HandleTabOrder(), CAddressBand::HasFocusIO(), CBrandBand::HasFocusIO(), ImmWINNLSEnableIME(), CAutoComplete::Init(), installer_proc(), IntDrawScrollBar(), IntScrollHandleScrollEvent(), IPADDRESS_Draw(), is_doc_child_focus(), IsDialogMessageW(), IShellBrowserImpl_BrowseObject(), make_new_folder_timer_callback(), MapWndProc(), MsgCheckProcA(), MSIDialog_WndProc(), multi_edit_dialog_proc(), CDefView::OnContextMenu(), OnTimer(), PROPSHEET_SetWizButtons(), SCROLL_HandleScrollEvent(), set_focus_on_activate_proc(), CicBridge::SetActiveContextAlways(), CAutoComplete::ShowDropDown(), TAB_DrawItemInterior(), test_accelerators(), test_attach_input(), test_autoradio_kbd_move(), test_button_messages(), test_capture_2(), test_combo_editselection_focus(), test_comboex_WM_LBUTTONDOWN(), test_dialog_messages(), test_editbox(), test_editselection_focus(), test_focus(), test_IsDialogMessage(), test_keyboard_input(), test_LVN_ENDLABELEDIT(), test_mdi_messages(), test_messages(), test_SaveRestoreFocus(), test_SetFocus(), test_SetForegroundWindow(), test_wiznavigation(), test_WM_LBUTTONDOWN(), test_WM_NEXTDLGCTL(), thread_proc_0(), thread_proc_1(), thread_proc_2(), ThreadMgr_AssociateFocus(), ThreadMgr_IsThreadFocus(), TreeListKeyDown(), TreeListMouseClick(), TREEVIEW_DrawItem(), User32DefWindowProc(), WndProc(), FileChildWindow::WndProc(), and StartMenuButton::WndProc().

◆ GetLastActivePopup()

HWND WINAPI GetLastActivePopup ( HWND  hWnd)

Definition at line 1015 of file window.c.

1016{
1017 PWND Wnd;
1018 HWND Ret = hWnd;
1019
1020 Wnd = ValidateHwnd(hWnd);
1021 if (Wnd != NULL)
1022 {
1023 _SEH2_TRY
1024 {
1025 if (Wnd->spwndLastActive)
1026 {
1027 PWND LastActive = DesktopPtrToUser(Wnd->spwndLastActive);
1028 Ret = UserHMGetHandle(LastActive);
1029 }
1030 }
1032 {
1033 /* Do nothing */
1034 }
1035 _SEH2_END;
1036 }
1037 return Ret;
1038}
struct _WND * spwndLastActive
Definition: ntuser.h:739

◆ GetParent()

HWND WINAPI GetParent ( HWND  hWnd)

Definition at line 1045 of file window.c.

1046{
1047 PWND Wnd, WndParent;
1048 HWND Ret = NULL;
1049
1050 Wnd = ValidateHwnd(hWnd);
1051 if (Wnd != NULL)
1052 {
1053 _SEH2_TRY
1054 {
1055 WndParent = NULL;
1056 if (Wnd->style & WS_POPUP)
1057 {
1058 if (Wnd->spwndOwner != NULL)
1059 WndParent = DesktopPtrToUser(Wnd->spwndOwner);
1060 }
1061 else if (Wnd->style & WS_CHILD)
1062 {
1063 if (Wnd->spwndParent != NULL)
1064 WndParent = DesktopPtrToUser(Wnd->spwndParent);
1065 }
1066
1067 if (WndParent != NULL)
1068 Ret = UserHMGetHandle(WndParent);
1069 }
1071 {
1072 /* Do nothing */
1073 }
1074 _SEH2_END;
1075 }
1076
1077 return Ret;
1078}
struct _WND * spwndOwner
Definition: ntuser.h:715

◆ GetProcessDefaultLayout()

BOOL WINAPI GetProcessDefaultLayout ( DWORD pdwDefaultLayout)

Definition at line 1085 of file window.c.

1086{
1088}
DWORD_PTR NTAPI NtUserCallOneParam(DWORD_PTR Param, DWORD Routine)
Definition: simplecall.c:153
@ ONEPARAM_ROUTINE_GETPROCDEFLAYOUT
Definition: ntuser.h:1568

◆ GetProgmanWindow()

HWND WINAPI GetProgmanWindow ( VOID  )

Definition at line 1898 of file window.c.

1899{
1901}
@ THREADSTATE_PROGMANWINDOW
Definition: ntuser.h:2491

◆ GetRealWindowOwner()

DWORD WINAPI GetRealWindowOwner ( HWND  hwnd)

Definition at line 1871 of file window.c.

1872{
1874}
#define QUERY_WINDOW_REAL_ID
Definition: ntuser.h:2832
DWORD_PTR NTAPI NtUserQueryWindow(HWND hWnd, DWORD Index)
Definition: window.c:4194

Referenced by ResetUserApiHook().

◆ GetTaskmanWindow()

HWND WINAPI GetTaskmanWindow ( VOID  )

Definition at line 1907 of file window.c.

1908{
1910}
@ THREADSTATE_TASKMANWINDOW
Definition: ntuser.h:2492

Referenced by UserpShowInformationBalloon().

◆ GetTopWindow()

HWND WINAPI GetTopWindow ( HWND  hWnd)

Definition at line 1166 of file window.c.

1167{
1168 if (!hWnd) hWnd = GetDesktopWindow();
1169 return GetWindow(hWnd, GW_CHILD);
1170}

◆ GetWindow()

HWND WINAPI GetWindow ( HWND  hWnd,
UINT  uCmd 
)

Definition at line 1095 of file window.c.

1097{
1098 PWND Wnd, FoundWnd;
1099 HWND Ret = NULL;
1100
1101 Wnd = ValidateHwnd(hWnd);
1102 if (!Wnd)
1103 return NULL;
1104
1105 _SEH2_TRY
1106 {
1107 FoundWnd = NULL;
1108 switch (uCmd)
1109 {
1110 case GW_OWNER:
1111 if (Wnd->spwndOwner != NULL)
1112 FoundWnd = DesktopPtrToUser(Wnd->spwndOwner);
1113 break;
1114
1115 case GW_HWNDFIRST:
1116 if(Wnd->spwndParent != NULL)
1117 {
1118 FoundWnd = DesktopPtrToUser(Wnd->spwndParent);
1119 if (FoundWnd->spwndChild != NULL)
1120 FoundWnd = DesktopPtrToUser(FoundWnd->spwndChild);
1121 }
1122 break;
1123 case GW_HWNDNEXT:
1124 if (Wnd->spwndNext != NULL)
1125 FoundWnd = DesktopPtrToUser(Wnd->spwndNext);
1126 break;
1127
1128 case GW_HWNDPREV:
1129 if (Wnd->spwndPrev != NULL)
1130 FoundWnd = DesktopPtrToUser(Wnd->spwndPrev);
1131 break;
1132
1133 case GW_CHILD:
1134 if (Wnd->spwndChild != NULL)
1135 FoundWnd = DesktopPtrToUser(Wnd->spwndChild);
1136 break;
1137
1138 case GW_HWNDLAST:
1139 FoundWnd = Wnd;
1140 while ( FoundWnd->spwndNext != NULL)
1141 FoundWnd = DesktopPtrToUser(FoundWnd->spwndNext);
1142 break;
1143
1144 default:
1145 Wnd = NULL;
1146 break;
1147 }
1148
1149 if (FoundWnd != NULL)
1150 Ret = UserHMGetHandle(FoundWnd);
1151 }
1153 {
1154 /* Do nothing */
1155 }
1156 _SEH2_END;
1157
1158 return Ret;
1159}
struct _WND * spwndPrev
Definition: ntuser.h:712
struct _WND * spwndChild
Definition: ntuser.h:714
struct _WND * spwndNext
Definition: ntuser.h:711
#define GW_HWNDFIRST
Definition: winuser.h:767
#define GW_HWNDLAST
Definition: winuser.h:768
#define GW_HWNDNEXT
Definition: winuser.h:764
#define GW_HWNDPREV
Definition: winuser.h:765

Referenced by AnyPopup(), CreateWindowExA(), CreateWindowExW(), and GetTopWindow().

◆ GetWindowContextHelpId()

DWORD WINAPI GetWindowContextHelpId ( HWND  hwnd)

Definition at line 1826 of file window.c.

1827{
1829}
EXTINLINE DWORD NtUserxGetWindowContextHelpId(HWND hwnd)
Definition: ntwrapper.h:726

◆ GetWindowInfo()

BOOL WINAPI DECLSPEC_HOTPATCH GetWindowInfo ( HWND  hWnd,
PWINDOWINFO  pwi 
)

Definition at line 1179 of file window.c.

1181{
1182 PWND pWnd;
1183 PCLS pCls = NULL;
1184 SIZE Size = {0,0};
1185 BOOL Ret = FALSE;
1186
1187 if ( !pwi || pwi->cbSize != sizeof(WINDOWINFO))
1188 SetLastError(ERROR_INVALID_PARAMETER); // Just set the error and go!
1189
1190 pWnd = ValidateHwnd(hWnd);
1191 if (!pWnd)
1192 return Ret;
1193
1194 UserGetWindowBorders(pWnd->style, pWnd->ExStyle, &Size, FALSE);
1195
1196 _SEH2_TRY
1197 {
1198 pCls = DesktopPtrToUser(pWnd->pcls);
1199 pwi->rcWindow = pWnd->rcWindow;
1200 pwi->rcClient = pWnd->rcClient;
1201 pwi->dwStyle = pWnd->style;
1202 pwi->dwExStyle = pWnd->ExStyle;
1203 pwi->cxWindowBorders = Size.cx;
1204 pwi->cyWindowBorders = Size.cy;
1205 pwi->dwWindowStatus = 0;
1206 if (pWnd->state & WNDS_ACTIVEFRAME || (GetActiveWindow() == hWnd))
1208 pwi->atomWindowType = (pCls ? pCls->atomClassName : 0 );
1209
1210 if ( pWnd->state2 & WNDS2_WIN50COMPAT )
1211 {
1212 pwi->wCreatorVersion = 0x500;
1213 }
1214 else if ( pWnd->state2 & WNDS2_WIN40COMPAT )
1215 {
1216 pwi->wCreatorVersion = 0x400;
1217 }
1218 else if ( pWnd->state2 & WNDS2_WIN31COMPAT )
1219 {
1220 pwi->wCreatorVersion = 0x30A;
1221 }
1222 else
1223 {
1224 pwi->wCreatorVersion = 0x300;
1225 }
1226
1227 Ret = TRUE;
1228 }
1230 {
1231 /* Do nothing */
1232 }
1233 _SEH2_END;
1234
1235 return Ret;
1236}
#define WNDS2_WIN31COMPAT
Definition: ntuser.h:649
#define WNDS2_WIN40COMPAT
Definition: ntuser.h:650
#define WNDS_ACTIVEFRAME
Definition: ntuser.h:611
#define WNDS2_WIN50COMPAT
Definition: ntuser.h:651
VOID UserGetWindowBorders(DWORD Style, DWORD ExStyle, SIZE *Size, BOOL WithClient)
Definition: winpos.c:894
Definition: ntuser.h:566
RTL_ATOM atomClassName
Definition: ntuser.h:568
DWORD ExStyle
Definition: ntuser.h:704
PCLS pcls
Definition: ntuser.h:720
DWORD state2
Definition: ntuser.h:702
DWORD state
Definition: ntuser.h:701
RECT rcWindow
Definition: ntuser.h:716
RECT rcClient
Definition: winuser.h:3771
DWORD dwWindowStatus
Definition: winuser.h:3774
ATOM atomWindowType
Definition: winuser.h:3777
DWORD cbSize
Definition: winuser.h:3769
DWORD dwExStyle
Definition: winuser.h:3773
DWORD dwStyle
Definition: winuser.h:3772
WORD wCreatorVersion
Definition: winuser.h:3778
UINT cxWindowBorders
Definition: winuser.h:3775
UINT cyWindowBorders
Definition: winuser.h:3776
RECT rcWindow
Definition: winuser.h:3770
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
HWND WINAPI GetActiveWindow(void)
Definition: winpos.c:138
#define WS_ACTIVECAPTION
Definition: winuser.h:2662

◆ GetWindowModuleFileNameA()

UINT WINAPI GetWindowModuleFileNameA ( HWND  hwnd,
LPSTR  lpszFileName,
UINT  cchFileNameMax 
)

Definition at line 1243 of file window.c.

1246{
1247 PWND Wnd = ValidateHwnd(hwnd);
1248
1249 if (!Wnd)
1250 return 0;
1251
1252 return GetModuleFileNameA(Wnd->hModule, lpszFileName, cchFileNameMax);
1253}
DWORD WINAPI GetModuleFileNameA(HINSTANCE hModule, LPSTR lpFilename, DWORD nSize)
Definition: loader.c:539
HINSTANCE hModule
Definition: ntuser.h:708

◆ GetWindowModuleFileNameW()

UINT WINAPI GetWindowModuleFileNameW ( HWND  hwnd,
LPWSTR  lpszFileName,
UINT  cchFileNameMax 
)

Definition at line 1260 of file window.c.

1263{
1264 PWND Wnd = ValidateHwnd(hwnd);
1265
1266 if (!Wnd)
1267 return 0;
1268
1269 return GetModuleFileNameW( Wnd->hModule, lpszFileName, cchFileNameMax );
1270}
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600

◆ GetWindowRect()

BOOL WINAPI GetWindowRect ( HWND  hWnd,
LPRECT  lpRect 
)

Definition at line 1276 of file window.c.

1278{
1279 PWND Wnd = ValidateHwnd(hWnd);
1280
1281 if (!Wnd) return FALSE;
1282 if ( hWnd != GetDesktopWindow()) // Wnd->fnid != FNID_DESKTOP )
1283 {
1284 *lpRect = Wnd->rcWindow;
1285 }
1286 else
1287 {
1288 lpRect->left = lpRect->top = 0;
1289 lpRect->right = Wnd->rcWindow.right;
1290 lpRect->bottom = Wnd->rcWindow.bottom;
1291/* Do this until Init bug is fixed. This sets 640x480, see InitMetrics.
1292 lpRect->right = GetSystemMetrics(SM_CXSCREEN);
1293 lpRect->bottom = GetSystemMetrics(SM_CYSCREEN);
1294*/ }
1295 return TRUE;
1296}

◆ GetWindowTextA()

int WINAPI GetWindowTextA ( HWND  hWnd,
LPSTR  lpString,
int  nMaxCount 
)

Definition at line 1302 of file window.c.

1303{
1304 PWND Wnd;
1305 INT Length = 0;
1306
1307 if (lpString == NULL || nMaxCount == 0)
1308 return 0;
1309
1310 Wnd = ValidateHwnd(hWnd);
1311 if (!Wnd)
1312 return 0;
1313
1314 lpString[0] = '\0';
1315
1316 if (!TestWindowProcess(Wnd))
1317 {
1318 _SEH2_TRY
1319 {
1321 }
1323 {
1324 Length = 0;
1325 }
1326 _SEH2_END;
1327 }
1328 else
1329 {
1331 }
1332 //ERR("GWTA Len %d : %s\n",Length,lpString);
1333 return Length;
1334}
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
int32_t INT
Definition: typedefs.h:58
BOOL FASTCALL TestWindowProcess(PWND)
Definition: misc.c:166
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_GETTEXT
Definition: winuser.h:1621
_In_ int nMaxCount
Definition: winuser.h:4880

Referenced by CC_CheckDigitsInEdit(), Child_WndProc(), ET2_check_change(), formatopts_proc(), GetDlgItemTextA(), gettext_msg_thread(), LISTVIEW_EndEditLabelT(), msgbox_hook_proc(), NPS_ProxyPasswordDialog(), page_dlg_proc(), set_foreground(), sheet_callback(), test_aw_conversion_dlgproc(), test_aw_conversion_dlgproc2(), test_create(), test_defwinproc(), test_desktop_winproc(), test_dtm_set_format(), test_edit_control_2(), test_fontsize(), test_foregroundwindow(), test_get_set_text(), test_gettext(), test_ImmDefaultHwnd(), test_itemedit(), test_params(), test_set_text(), test_UDS_SETBUDDYINT(), test_updown_base(), test_updown_create(), test_WM_CREATE(), TestControlStyleDlgProc(), TREEVIEW_EndEditLabelNow(), WinMain(), and WorkerThread().

◆ GetWindowTextLengthA()

int WINAPI GetWindowTextLengthA ( HWND  hWnd)

Definition at line 1340 of file window.c.

1341{
1342 PWND Wnd;
1343
1344 Wnd = ValidateHwnd(hWnd);
1345 if (!Wnd)
1346 return 0;
1347
1348 if (!TestWindowProcess(Wnd))
1349 {
1350 return DefWindowProcA(hWnd, WM_GETTEXTLENGTH, 0, 0);
1351 }
1352 else
1353 {
1354 return SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0);
1355 }
1356}
#define WM_GETTEXTLENGTH
Definition: winuser.h:1622

◆ GetWindowTextLengthW()

int WINAPI GetWindowTextLengthW ( HWND  hWnd)

Definition at line 1362 of file window.c.

1363{
1364 PWND Wnd;
1365
1366 Wnd = ValidateHwnd(hWnd);
1367 if (!Wnd)
1368 return 0;
1369
1370 if (!TestWindowProcess(Wnd))
1371 {
1372 return DefWindowProcW(hWnd, WM_GETTEXTLENGTH, 0, 0);
1373 }
1374 else
1375 {
1376 return SendMessageW(hWnd, WM_GETTEXTLENGTH, 0, 0);
1377 }
1378}
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

◆ GetWindowTextW()

int WINAPI GetWindowTextW ( HWND  hWnd,
LPWSTR  lpString,
int  nMaxCount 
)

Definition at line 1384 of file window.c.

1385{
1386 PWND Wnd;
1387 INT Length = 0;
1388
1389 if (lpString == NULL || nMaxCount == 0)
1390 return 0;
1391
1392 Wnd = ValidateHwnd(hWnd);
1393 if (!Wnd)
1394 return 0;
1395
1396 lpString[0] = L'\0';
1397
1398 if (!TestWindowProcess(Wnd))
1399 {
1400 _SEH2_TRY
1401 {
1403 }
1405 {
1406 Length = 0;
1407 }
1408 _SEH2_END;
1409 }
1410 else
1411 {
1413 }
1414 //ERR("GWTW Len %d : %S\n",Length,lpString);
1415 return Length;
1416}

Referenced by AboutDlgProc(), AddressBarProc(), AddToFavoritesDlgProc(), AtlAxWin_wndproc(), BaseControlWindowImpl_get_Caption(), CBUpdateLBox(), ChooseFolder(), CHSourceDlgProc(), CMP_RegisterNotification(), COMBOEX_ComboWndProc(), CompleteSwitch(), CredDialogCommandOk(), DIALOG_IsAccelerator(), DialogProc(), DoTestCaseB(), CDownloadManager::DownloadDlgProc(), EnableOkButtonFromEditContents(), EndNowDlgProc(), EnumWindowsProc(), ExportRegistryFile_OFNHookProc(), FILEDLG95_FILENAME_GetFileNames(), find_control(), find_top_window(), find_window_callback(), FindDialogProc(), FontProc(), FontSizeList_GetSelectedFontSize(), FontWndProc(), get_button_text(), get_window_text(), CSearchBar::GetAddressEditBoxPath(), GetDlgItemTextW(), CAutoComplete::GetEditText(), GetStringFromDialog(), GetTextboxText(), ATL::CWindow::GetWindowText(), hyperlink_dlgproc(), ICONTITLE_Paint(), ICONTITLE_SetTitlePos(), ie_dialog_open_proc(), InitializeChkDskDialog(), InitializeFormatDriveDlg(), IPADDRESS_ConstrainField(), IPADDRESS_GetAddress(), IPADDRESS_SubclassProc(), IPADDRESS_UpdateText(), LabelWndProc(), LISTVIEW_Command(), LISTVIEW_EditLabelT(), LISTVIEW_EndEditLabelT(), mask_control_change(), MDI_UpdateFrameText(), MessageBoxTextToClipboard(), modify_dword_dlgproc(), modify_multi_string_dlgproc(), modify_string_dlgproc(), MoreOptDlgProc(), OnCommand(), CFontsDialog::OnFontSize(), OnPaint(), CAddressBand::OnTipText(), CZipExtract::CExtractSettingsPage::OnWizardNext(), paraformat_proc(), PrepareFoldersToScan(), prompt_dlgproc(), promptdisk_ok(), PROPSHEET_DialogProc(), RunDlgProc(), BtrfsBalance::SaveBalanceOpts(), SaveCustomPath(), anonymous_namespace{settingsdlg.cpp}::SettingsDlgProc(), SetWelcomeText(), tabstops_proc(), taskdialog_get_label_size(), TcpipFilterPortDlg(), test_aw_conversion_dlgproc(), test_aw_conversion_dlgproc2(), test_gettext(), test_mouse_keyboard(), TREEVIEW_Command(), TREEVIEW_EndEditLabelNow(), UPDOWN_GetBuddyInt(), UPDOWN_SetBuddyInt(), UserpFormatMessages(), ValidateEditContents(), WININET_GetSetPassword(), WININET_PasswordDialog(), WININET_ProxyPasswordDialog(), and WinMain().

◆ GetWindowThreadProcessId()

DWORD WINAPI GetWindowThreadProcessId ( HWND  hWnd,
LPDWORD  lpdwProcessId 
)

Definition at line 1419 of file window.c.

1421{
1422 DWORD Ret = 0;
1423 PTHREADINFO ti;
1424 PWND pWnd = ValidateHwnd(hWnd);
1425
1426 if (!pWnd) return Ret;
1427
1428 ti = pWnd->head.pti;
1429
1430 if (ti)
1431 {
1432 if (ti == GetW32ThreadInfo())
1433 { // We are current.
1434 //FIXME("Current!\n");
1435 if (lpdwProcessId)
1436 *lpdwProcessId = (DWORD_PTR)NtCurrentTeb()->ClientId.UniqueProcess;
1437 Ret = (DWORD_PTR)NtCurrentTeb()->ClientId.UniqueThread;
1438 }
1439 else
1440 { // Ask kernel for info.
1441 //FIXME("Kernel call!\n");
1442 if (lpdwProcessId)
1445 }
1446 }
1447 return Ret;
1448}
#define QUERY_WINDOW_UNIQUE_THREAD_ID
Definition: ntuser.h:2828
struct _THREADINFO * GetW32ThreadInfo(VOID)
Definition: misc.c:807
#define QUERY_WINDOW_UNIQUE_PROCESS_ID
Definition: ntuser.h:2827
#define NtCurrentTeb
THRDESKHEAD head
Definition: ntuser.h:695
#define DWORD_PTR
Definition: treelist.c:76

◆ InternalGetWindowText()

int WINAPI InternalGetWindowText ( HWND  hWnd,
LPWSTR  lpString,
int  nMaxCount 
)

Definition at line 1835 of file window.c.

1836{
1838 if (Ret == 0 && lpString)
1839 *lpString = L'\0';
1840 return Ret;
1841}
INT NTAPI NtUserInternalGetWindowText(HWND hWnd, LPWSTR lpString, INT nMaxCount)
Definition: window.c:4592

◆ IsChild()

BOOL WINAPI IsChild ( HWND  hWndParent,
HWND  hWnd 
)

Definition at line 1455 of file window.c.

1457{
1458 PWND WndParent, DesktopWnd, Wnd;
1459 BOOL Ret = FALSE;
1460
1461 WndParent = ValidateHwnd(hWndParent);
1462 if (!WndParent)
1463 return FALSE;
1464 Wnd = ValidateHwnd(hWnd);
1465 if (!Wnd)
1466 return FALSE;
1467
1468 DesktopWnd = GetThreadDesktopWnd();
1469 if (!DesktopWnd)
1470 return FALSE;
1471
1472 _SEH2_TRY
1473 {
1474 while (Wnd != NULL && ((Wnd->style & (WS_POPUP|WS_CHILD)) == WS_CHILD))
1475 {
1476 if (Wnd->spwndParent != NULL)
1477 {
1478 Wnd = DesktopPtrToUser(Wnd->spwndParent);
1479
1480 if (Wnd == WndParent)
1481 {
1482 Ret = TRUE;
1483 break;
1484 }
1485 }
1486 else
1487 break;
1488 }
1489 }
1491 {
1492 /* Do nothing */
1493 }
1494 _SEH2_END;
1495
1496 return Ret;
1497}

◆ IsHungAppWindow()

BOOL WINAPI IsHungAppWindow ( HWND  hwnd)

Definition at line 1847 of file window.c.

1848{
1850}
#define QUERY_WINDOW_ISHUNG
Definition: ntuser.h:2831

Referenced by CanBeMinimized(), EnumWindowsProc(), Ghost_OnCreate(), Ghost_OnTimer(), and CTaskSwitchWnd::HandleTaskItemClick().

◆ IsIconic()

BOOL WINAPI IsIconic ( HWND  hWnd)

Definition at line 1504 of file window.c.

1505{
1506 PWND Wnd = ValidateHwnd(hWnd);
1507
1508 if (Wnd != NULL)
1509 return (Wnd->style & WS_MINIMIZE) != 0;
1510
1511 return FALSE;
1512}
#define WS_MINIMIZE
Definition: pedump.c:622

◆ IsWindow()

BOOL WINAPI IsWindow ( HWND  hWnd)

Definition at line 1519 of file window.c.

1520{
1522 if (Wnd != NULL)
1523 {
1524 if (Wnd->state & WNDS_DESTROYED)
1525 return FALSE;
1526 return TRUE;
1527 }
1528
1529 return FALSE;
1530}
#define ValidateHwndNoErr(hwnd)
Definition: precomp.h:84
#define WNDS_DESTROYED
Definition: ntuser.h:636

◆ IsWindowEnabled()

BOOL WINAPI IsWindowEnabled ( HWND  hWnd)

Definition at line 1593 of file window.c.

1594{
1595 // AG: I don't know if child windows are affected if the parent is
1596 // disabled. I think they stop processing messages but stay appearing
1597 // as enabled.
1598
1600}
#define WS_DISABLED
Definition: pedump.c:621
#define GetWindowLongPtrW
Definition: winuser.h:4832
#define GWL_STYLE
Definition: winuser.h:855

◆ IsWindowInDestroy()

BOOL WINAPI IsWindowInDestroy ( HWND  hWnd)

Definition at line 1986 of file window.c.

1987{
1988 PWND pwnd;
1989 pwnd = ValidateHwnd(hWnd);
1990 if (!pwnd)
1991 return FALSE;
1992 return ((pwnd->state2 & WNDS2_INDESTROY) == WNDS2_INDESTROY);
1993}
#define WNDS2_INDESTROY
Definition: ntuser.h:648

◆ IsWindowUnicode()

BOOL WINAPI IsWindowUnicode ( HWND  hWnd)

Definition at line 1537 of file window.c.

1538{
1539 PWND Wnd = ValidateHwnd(hWnd);
1540
1541 if (Wnd != NULL)
1542 return Wnd->Unicode;
1543
1544 return FALSE;
1545}
UINT Unicode
Definition: ntuser.h:756

◆ IsWindowVisible()

BOOL WINAPI IsWindowVisible ( HWND  hWnd)

Definition at line 1552 of file window.c.

1553{
1554 BOOL Ret = FALSE;
1555 PWND Wnd = ValidateHwnd(hWnd);
1556
1557 if (Wnd != NULL)
1558 {
1559 _SEH2_TRY
1560 {
1561 Ret = TRUE;
1562
1563 do
1564 {
1565 if (!(Wnd->style & WS_VISIBLE))
1566 {
1567 Ret = FALSE;
1568 break;
1569 }
1570
1571 if (Wnd->spwndParent != NULL)
1572 Wnd = DesktopPtrToUser(Wnd->spwndParent);
1573 else
1574 break;
1575
1576 } while (Wnd != NULL);
1577 }
1579 {
1580 Ret = FALSE;
1581 }
1582 _SEH2_END;
1583 }
1584
1585 return Ret;
1586}

◆ IsZoomed()

BOOL WINAPI IsZoomed ( HWND  hWnd)

Definition at line 1607 of file window.c.

1608{
1609 return (GetWindowLongPtrW(hWnd, GWL_STYLE) & WS_MAXIMIZE) != 0;
1610}
#define WS_MAXIMIZE
Definition: pedump.c:623

Referenced by CreateWindowExA(), and CreateWindowExW().

◆ LockSetForegroundWindow()

BOOL WINAPI LockSetForegroundWindow ( UINT  uLockCode)

Definition at line 1617 of file window.c.

1618{
1619 return NtUserxLockSetForegroundWindow(uLockCode);
1620}
EXTINLINE BOOL NtUserxLockSetForegroundWindow(UINT uLockCode)
Definition: ntwrapper.h:841

Referenced by CredDialogProc().

◆ MDI_CalcDefaultChildPos()

void MDI_CalcDefaultChildPos ( HWND  hwndClient,
INT  total,
LPPOINT  lpPos,
INT  delta,
UINT id 
)

Definition at line 308 of file mdi.c.

310{
311 INT nstagger;
312 RECT rect;
314
315 if (total < 0) /* we are called from CreateWindow */
316 {
317 MDICLIENTINFO *ci = get_client_info(hwndClient);
318 total = ci ? ci->nTotalCreated : 0; // Do not portsync wine
319 *id = ci ? ci->idFirstChild + ci->nActiveChildren : 0; // Do not portsync wine
320 TRACE("MDI child id %04x\n", *id);
321 }
322
323 GetClientRect( hwndClient, &rect );
324 if( rect.bottom - rect.top - delta >= spacing )
325 rect.bottom -= delta;
326
327 nstagger = (rect.bottom - rect.top)/(3 * spacing);
328 lpPos[1].x = (rect.right - rect.left - nstagger * spacing);
329 lpPos[1].y = (rect.bottom - rect.top - nstagger * spacing);
330 lpPos[0].x = lpPos[0].y = spacing * (total%(nstagger+1));
size_t total
& rect
Definition: startmenu.cpp:1413
UINT nTotalCreated
Definition: mdi.c:122
UINT idFirstChild
Definition: mdi.c:120
UINT nActiveChildren
Definition: mdi.c:114
static MDICLIENTINFO * get_client_info(HWND client)
Definition: mdi.c:224
#define SM_CYFRAME
Definition: winuser.h:999
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define SM_CYCAPTION
Definition: winuser.h:966

Referenced by CreateWindowExA(), CreateWindowExW(), and MDICascade().

◆ OpenIcon()

BOOL WINAPI OpenIcon ( HWND  hWnd)

Definition at line 1657 of file window.c.

1658{
1660 return FALSE;
1661
1663 return TRUE;
1664}

◆ RealChildWindowFromPoint()

HWND WINAPI RealChildWindowFromPoint ( HWND  hwndParent,
POINT  ptParentClientCoords 
)

Definition at line 1671 of file window.c.

1673{
1674 return NtUserRealChildWindowFromPoint(hwndParent, ptParentClientCoords.x, ptParentClientCoords.y);
1675}
HWND NTAPI NtUserRealChildWindowFromPoint(HWND Parent, LONG x, LONG y)
Definition: winpos.c:3503

◆ RtlFreeLargeString()

VOID NTAPI RtlFreeLargeString ( IN PLARGE_STRING  LargeString)

Definition at line 141 of file window.c.

143{
144 if (LargeString->Buffer)
145 {
146 RtlFreeHeap(GetProcessHeap(), 0, LargeString->Buffer);
147 RtlZeroMemory(LargeString, sizeof(LARGE_STRING));
148 }
149}
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:608
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262

Referenced by User32CreateWindowEx().

◆ RtlInitLargeString()

FORCEINLINE VOID RtlInitLargeString ( OUT PLARGE_STRING  plstr,
LPCVOID  psz,
BOOL  bUnicode 
)

Definition at line 124 of file window.c.

128{
129 if(bUnicode)
130 {
132 }
133 else
134 {
136 }
137}
VOID NTAPI RtlInitLargeAnsiString(IN OUT PLARGE_ANSI_STRING, IN PCSZ, IN INT)
Definition: rtlstr.c:17
VOID NTAPI RtlInitLargeUnicodeString(IN OUT PLARGE_UNICODE_STRING, IN PCWSTR, IN INT)
Definition: rtlstr.c:42
uint16_t * PWSTR
Definition: typedefs.h:56
char * PSTR
Definition: typedefs.h:51

Referenced by User32CreateWindowEx().

◆ ScrollWindow()

BOOL WINAPI ScrollWindow ( HWND  hWnd,
int  dx,
int  dy,
CONST RECT lpRect,
CONST RECT prcClip 
)

Definition at line 1916 of file window.c.

1921{
1923 dx,
1924 dy,
1925 lpRect,
1926 prcClip,
1927 0,
1928 NULL,
1930}
#define ERROR(name)
Definition: error_private.h:53
DWORD NTAPI NtUserScrollWindowEx(HWND hWnd, INT dx, INT dy, const RECT *rect, const RECT *clipRect, HRGN hrgnUpdate, LPRECT rcUpdate, UINT flags)
Definition: scrollex.c:571
GLint dy
Definition: linetemp.h:97
GLint dx
Definition: linetemp.h:97
#define SW_SCROLLWNDDCE
Definition: undocuser.h:92
#define SW_SCROLLCHILDREN
Definition: winuser.h:2581
#define SW_INVALIDATE
Definition: winuser.h:2582
#define SW_ERASE
Definition: winuser.h:2583

◆ ScrollWindowEx()

INT WINAPI ScrollWindowEx ( HWND  hWnd,
int  dx,
int  dy,
CONST RECT prcScroll,
CONST RECT prcClip,
HRGN  hrgnUpdate,
LPRECT  prcUpdate,
UINT  flags 
)

Definition at line 1938 of file window.c.

1946{
1947 if (flags & SW_SMOOTHSCROLL)
1948 {
1949 FIXME("SW_SMOOTHSCROLL not supported.\n");
1950 // Fall through....
1951 }
1953 dx,
1954 dy,
1955 prcScroll,
1956 prcClip,
1957 hrgnUpdate,
1958 prcUpdate,
1959 flags);
1960}
#define FIXME(fmt,...)
Definition: precomp.h:53
GLbitfield flags
Definition: glext.h:7161

◆ SetForegroundWindow()

BOOL WINAPI SetForegroundWindow ( HWND  hWnd)

Definition at line 1681 of file window.c.

1682{
1684}
EXTINLINE BOOL NtUserxSetForegroundWindow(HWND hWnd)
Definition: ntwrapper.h:788

◆ SetLastErrorEx()

VOID WINAPI SetLastErrorEx ( DWORD  dwErrCode,
DWORD  dwType 
)

Definition at line 1856 of file window.c.

1857{
1858 SetLastError(dwErrCode);
1859}

◆ SetProcessDefaultLayout()

BOOL WINAPI SetProcessDefaultLayout ( DWORD  dwDefaultLayout)

Definition at line 1691 of file window.c.

1692{
1694}
@ ONEPARAM_ROUTINE_SETPROCDEFLAYOUT
Definition: ntuser.h:1601

Referenced by _tWinMain(), LPK_ApplyMirroring(), START_TEST(), WinMain(), and wWinMain().

◆ SetProgmanWindow()

HWND WINAPI SetProgmanWindow ( HWND  hWnd)

Definition at line 1889 of file window.c.

1890{
1892}
EXTINLINE HWND NtUserxSetProgmanWindow(HWND hWnd)
Definition: ntwrapper.h:763

◆ SetTaskmanWindow()

HWND WINAPI SetTaskmanWindow ( HWND  hWnd)

Definition at line 1880 of file window.c.

1881{
1883}
EXTINLINE HWND NtUserxSetTaskmanWindow(HWND hWnd)
Definition: ntwrapper.h:758

Referenced by RegisterShellHook().

◆ SetWindowContextHelpId()

BOOL WINAPI SetWindowContextHelpId ( HWND  hwnd,
DWORD  dwContextHelpId 
)

Definition at line 1816 of file window.c.

1818{
1819 return NtUserxSetWindowContextHelpId(hwnd, dwContextHelpId);
1820}
EXTINLINE BOOL NtUserxSetWindowContextHelpId(HWND hWnd, DWORD_PTR dwContextHelpId)
Definition: ntwrapper.h:706

◆ SetWindowTextA()

BOOL WINAPI DECLSPEC_HOTPATCH SetWindowTextA ( HWND  hWnd,
LPCSTR  lpString 
)

Definition at line 1703 of file window.c.

1705{
1706 PWND pwnd;
1707
1708 pwnd = ValidateHwnd(hWnd);
1709 if (pwnd)
1710 {
1711 if (!TestWindowProcess(pwnd))
1712 {
1713 /* do not send WM_GETTEXT messages to other processes */
1714 return (DefWindowProcA(hWnd, WM_SETTEXT, 0, (LPARAM)lpString) >= 0);
1715 }
1716 return (SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)lpString) >= 0);
1717 }
1718 return FALSE;
1719}
#define WM_SETTEXT
Definition: winuser.h:1620

◆ SetWindowTextW()

BOOL WINAPI DECLSPEC_HOTPATCH SetWindowTextW ( HWND  hWnd,
LPCWSTR  lpString 
)

Definition at line 1728 of file window.c.

1730{
1731 PWND pwnd;
1732
1733 pwnd = ValidateHwnd(hWnd);
1734 if (pwnd)
1735 {
1736 if (!TestWindowProcess(pwnd))
1737 {
1738 /* do not send WM_GETTEXT messages to other processes */
1739 return (DefWindowProcW(hWnd, WM_SETTEXT, 0, (LPARAM)lpString) >= 0);
1740 }
1741 return (SendMessageW(hWnd, WM_SETTEXT, 0, (LPARAM)lpString) >= 0);
1742 }
1743 return FALSE;
1744}

◆ ShowOwnedPopups()

BOOL WINAPI ShowOwnedPopups ( HWND  hWnd,
BOOL  fShow 
)

Definition at line 1751 of file window.c.

1752{
1753 return NtUserxShowOwnedPopups(hWnd, fShow);
1754}
EXTINLINE BOOL NtUserxShowOwnedPopups(HWND hWnd, BOOL fShow)
Definition: ntwrapper.h:696

◆ SwitchToThisWindow()

VOID WINAPI SwitchToThisWindow ( HWND  hwnd,
BOOL  fAltTab 
)

◆ UpdateLayeredWindow()

BOOL WINAPI UpdateLayeredWindow ( HWND  hwnd,
HDC  hdcDst,
POINT pptDst,
SIZE psize,
HDC  hdcSrc,
POINT pptSrc,
COLORREF  crKey,
BLENDFUNCTION pbl,
DWORD  dwFlags 
)

Definition at line 1761 of file window.c.

1770{
1771 if (dwFlags & ULW_EX_NORESIZE) /* only valid for UpdateLayeredWindowIndirect */
1772 {
1774 return FALSE;
1775 }
1777 hdcDst,
1778 pptDst,
1779 psize,
1780 hdcSrc,
1781 pptSrc,
1782 crKey,
1783 pbl,
1784 dwFlags,
1785 NULL);
1786}
BOOL NTAPI NtUserUpdateLayeredWindow(HWND hwnd, HDC hdcDst, POINT *pptDst, SIZE *psize, HDC hdcSrc, POINT *pptSrc, COLORREF crKey, BLENDFUNCTION *pblend, DWORD dwFlags, RECT *prcDirty)
Definition: layered.c:341
_Must_inspect_result_ _Out_ LPSIZE psize
Definition: ntgdi.h:1569
#define ULW_EX_NORESIZE
Definition: winuser.h:2790
static HDC hdcSrc
Definition: xlate.c:32
static HDC hdcDst
Definition: xlate.c:32

Referenced by init_procs().

◆ UpdateLayeredWindowIndirect()

BOOL WINAPI UpdateLayeredWindowIndirect ( HWND  hwnd,
const UPDATELAYEREDWINDOWINFO *  info 
)

Definition at line 1792 of file window.c.

1794{
1795 if (info && info->cbSize == sizeof(*info))
1796 {
1798 info->hdcDst,
1799 (POINT *)info->pptDst,
1800 (SIZE *)info->psize,
1801 info->hdcSrc,
1802 (POINT *)info->pptSrc,
1803 info->crKey,
1804 (BLENDFUNCTION *)info->pblend,
1805 info->dwFlags,
1806 (RECT *)info->prcDirty);
1807 }
1809 return FALSE;
1810}

◆ User32CallSendAsyncProcForKernel()

NTSTATUS WINAPI User32CallSendAsyncProcForKernel ( PVOID  Arguments,
ULONG  ArgumentLength 
)

Definition at line 24 of file window.c.

25{
27
28 TRACE("User32CallSendAsyncProcKernel()\n");
29
30 CallbackArgs = (PSENDASYNCPROC_CALLBACK_ARGUMENTS)Arguments;
31
32 if (ArgumentLength != sizeof(SENDASYNCPROC_CALLBACK_ARGUMENTS))
33 {
35 }
36
37 CallbackArgs->Callback(CallbackArgs->Wnd,
38 CallbackArgs->Msg,
39 CallbackArgs->Context,
40 CallbackArgs->Result);
41 return(STATUS_SUCCESS);
42}
#define STATUS_SUCCESS
Definition: shellext.h:65
#define STATUS_INFO_LENGTH_MISMATCH
Definition: udferr_usr.h:133
struct _SENDASYNCPROC_CALLBACK_ARGUMENTS * PSENDASYNCPROC_CALLBACK_ARGUMENTS

◆ User32CreateWindowEx()

HWND WINAPI User32CreateWindowEx ( DWORD  dwExStyle,
LPCSTR  lpClassName,
LPCSTR  lpWindowName,
DWORD  dwStyle,
int  x,
int  y,
int  nWidth,
int  nHeight,
HWND  hWndParent,
HMENU  hMenu,
HINSTANCE  hInstance,
LPVOID  lpParam,
DWORD  dwFlags 
)

Definition at line 152 of file window.c.

165{
166 LARGE_STRING WindowName;
167 LARGE_STRING lstrClassName, *plstrClassName;
168 LARGE_STRING lstrClassVersion, *plstrClassVersion;
169 UNICODE_STRING ClassName;
170 UNICODE_STRING ClassVersion;
171 WNDCLASSEXA wceA;
172 WNDCLASSEXW wceW;
174 DWORD dwLastError;
175 BOOL Unicode, ClassFound = FALSE;
176 HWND Handle = NULL;
177 LPCWSTR lpszClsVersion;
178 LPCWSTR lpLibFileName = NULL;
179 HANDLE pCtx = NULL;
180 DWORD dwFlagsVer;
181
182#if 0
183 DbgPrint("[window] User32CreateWindowEx style %d, exstyle %d, parent %d\n", dwStyle, dwExStyle, hWndParent);
184#endif
185
187 TRACE("Module Version %x\n",dwFlagsVer);
188
190 {
191 TRACE("RegisterSystemControls\n");
193 }
194
195 Unicode = !(dwFlags & NUCWE_ANSI);
196
197 if (IS_ATOM(lpClassName))
198 {
199 plstrClassName = (PVOID)lpClassName;
200 }
201 else
202 {
203 if (Unicode)
204 {
205 RtlInitUnicodeString(&ClassName, (PCWSTR)lpClassName);
206 }
207 else
208 {
209 if (!RtlCreateUnicodeStringFromAsciiz(&ClassName, (PCSZ)lpClassName))
210 {
212 return NULL;
213 }
214 }
215
216 /* Copy it to a LARGE_STRING */
217 lstrClassName.Buffer = ClassName.Buffer;
218 lstrClassName.Length = ClassName.Length;
219 lstrClassName.MaximumLength = ClassName.MaximumLength;
220 plstrClassName = &lstrClassName;
221 }
222
223 /* Initialize a LARGE_STRING */
224 RtlInitLargeString(&WindowName, lpWindowName, Unicode);
225
226 // HACK: The current implementation expects the Window name to be UNICODE
227 if (!Unicode)
228 {
230 PSTR AnsiBuffer = WindowName.Buffer;
231 ULONG AnsiLength = WindowName.Length;
232
233 WindowName.Length = 0;
234 WindowName.MaximumLength = AnsiLength * sizeof(WCHAR);
235 WindowName.Buffer = RtlAllocateHeap(RtlGetProcessHeap(),
236 0,
237 WindowName.MaximumLength);
238 if (!WindowName.Buffer)
239 {
241 goto cleanup;
242 }
243
245 WindowName.MaximumLength,
246 &WindowName.Length,
248 AnsiLength);
249 if (!NT_SUCCESS(Status))
250 {
251 goto cleanup;
252 }
253 }
254
255 if (!hMenu && (dwStyle & (WS_OVERLAPPEDWINDOW | WS_POPUP)))
256 {
257 if (Unicode)
258 {
259 wceW.cbSize = sizeof(wceW);
260 if (GetClassInfoExW(hInstance, (LPCWSTR)lpClassName, &wceW) && wceW.lpszMenuName)
261 {
262 hMenu = LoadMenuW(hInstance, wceW.lpszMenuName);
263 }
264 }
265 else
266 {
267 wceA.cbSize = sizeof(wceA);
268 if (GetClassInfoExA(hInstance, lpClassName, &wceA) && wceA.lpszMenuName)
269 {
270 hMenu = LoadMenuA(hInstance, wceA.lpszMenuName);
271 }
272 }
273 }
274
275 if (!Unicode) dwExStyle |= WS_EX_SETANSICREATOR;
276
277 lpszClsVersion = ClassNameToVersion(lpClassName, NULL, &lpLibFileName, &pCtx, !Unicode);
278 if (!lpszClsVersion)
279 {
280 plstrClassVersion = plstrClassName;
281 }
282 else
283 {
284 RtlInitUnicodeString(&ClassVersion, lpszClsVersion);
285 lstrClassVersion.Buffer = ClassVersion.Buffer;
286 lstrClassVersion.Length = ClassVersion.Length;
287 lstrClassVersion.MaximumLength = ClassVersion.MaximumLength;
288 plstrClassVersion = &lstrClassVersion;
289 }
290
291 for (;;)
292 {
293 Handle = NtUserCreateWindowEx(dwExStyle,
294 plstrClassName,
295 plstrClassVersion,
296 &WindowName,
297 dwStyle,
298 x,
299 y,
300 nWidth,
301 nHeight,
303 hMenu,
304 hInstance,
305 lpParam,
306 dwFlagsVer,
307 pCtx );
308 if (Handle) break;
309 if (!lpLibFileName) break;
310 if (!ClassFound)
311 {
312 dwLastError = GetLastError();
313 if (dwLastError == ERROR_CANNOT_FIND_WND_CLASS)
314 {
315 ClassFound = VersionRegisterClass(ClassName.Buffer, lpLibFileName, pCtx, &hLibModule);
316 if (ClassFound) continue;
317 }
318 }
319 if (hLibModule)
320 {
321 dwLastError = GetLastError();
323 SetLastError(dwLastError);
325 }
326 break;
327 }
328
329#if 0
330 DbgPrint("[window] NtUserCreateWindowEx() == %d\n", Handle);
331#endif
332
333cleanup:
334 if (!Unicode)
335 {
336 if (!IS_ATOM(lpClassName))
337 RtlFreeUnicodeString(&ClassName);
338
339 RtlFreeLargeString(&WindowName);
340 }
341
342 return Handle;
343}
CHAR AnsiBuffer[1024]
Definition: debug.c:15
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
Definition: heap.c:590
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
#define FreeLibrary(x)
Definition: compat.h:748
static void cleanup(void)
Definition: main.c:1335
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
ULONG Handle
Definition: gdb_input.c:15
#define DbgPrint
Definition: hal.h:12
HWND NTAPI NtUserCreateWindowEx(DWORD dwExStyle, PLARGE_STRING plstrClassName, PLARGE_STRING plstrClsVersion, PLARGE_STRING plstrWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam, DWORD dwFlags, PVOID acbiBuffer)
Definition: window.c:2669
ULONG RtlGetExpWinVer(_In_ PVOID BaseAddress)
Definition: image.c:20
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz(_Out_ PUNICODE_STRING Destination, _In_ PCSZ Source)
_Use_decl_annotations_ NTSTATUS NTAPI RtlMultiByteToUnicodeN(_Out_ PWCH UnicodeString, _In_ ULONG UnicodeSize, _Out_opt_ PULONG ResultSize, _In_ PCCH MbString, _In_ ULONG MbSize)
Definition: nlsboot.c:62
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
BOOL FASTCALL VersionRegisterClass(PCWSTR, LPCWSTR, HANDLE, HMODULE *)
Definition: class.c:195
HINSTANCE hLibModule
Definition: sfc.c:23
ULONG Length
Definition: ntuser.h:91
ULONG MaximumLength
Definition: ntuser.h:92
PVOID Buffer
Definition: ntuser.h:94
USHORT MaximumLength
Definition: env_spec_w32.h:370
LPCSTR lpszMenuName
Definition: winuser.h:3213
UINT cbSize
Definition: winuser.h:3204
LPCWSTR lpszMenuName
Definition: winuser.h:3228
UINT cbSize
Definition: winuser.h:3219
const uint16_t * PCWSTR
Definition: typedefs.h:57
void * PVOID
Definition: typedefs.h:50
uint32_t ULONG
Definition: typedefs.h:59
CONST char * PCSZ
Definition: umtypes.h:125
#define WS_EX_SETANSICREATOR
Definition: undocuser.h:28
FORCEINLINE VOID RtlInitLargeString(OUT PLARGE_STRING plstr, LPCVOID psz, BOOL bUnicode)
Definition: window.c:124
VOID NTAPI RtlFreeLargeString(IN PLARGE_STRING LargeString)
Definition: window.c:141
LPCWSTR FASTCALL ClassNameToVersion(const void *lpszClass, LPCWSTR lpszMenuName, LPCWSTR *plpLibFileName, HANDLE *pContext, BOOL bAnsi)
Definition: class.c:85
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define ERROR_CANNOT_FIND_WND_CLASS
Definition: winerror.h:888
BOOL WINAPI GetClassInfoExA(_In_opt_ HINSTANCE, _In_ LPCSTR, _Out_ LPWNDCLASSEXA)
BOOL WINAPI GetClassInfoExW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _Out_ LPWNDCLASSEXW)
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
HMENU WINAPI LoadMenuA(_In_opt_ HINSTANCE, _In_ LPCSTR)

Referenced by CreateWindowExA(), and CreateWindowExW().

◆ User32EnumWindows()

static BOOL User32EnumWindows ( HDESK  hDesktop,
HWND  hWndparent,
WNDENUMPROC  lpfn,
LPARAM  lParam,
DWORD  dwThreadId,
BOOL  bChildren 
)
static

Definition at line 650 of file window.c.

656{
657 DWORD i, dwCount = 0;
658 HWND* pHwnd = NULL;
659 HANDLE hHeap;
661
662 if (!lpfn)
663 {
665 return FALSE;
666 }
667
668 /* FIXME instead of always making two calls, should we use some
669 sort of persistent buffer and only grow it ( requiring a 2nd
670 call ) when the buffer wasn't already big enough? */
671 /* first get how many window entries there are */
672 Status = NtUserBuildHwndList(hDesktop,
673 hWndparent,
674 bChildren,
676 dwCount,
677 NULL,
678 &dwCount);
679 if (!NT_SUCCESS(Status))
680 return FALSE;
681
682 if (!dwCount)
683 {
684 if (!dwThreadId)
685 return FALSE;
686 else
687 return TRUE;
688 }
689
690 /* allocate buffer to receive HWND handles */
691 hHeap = GetProcessHeap();
692 pHwnd = HeapAlloc(hHeap, 0, sizeof(HWND)*(dwCount+1));
693 if (!pHwnd)
694 {
696 return FALSE;
697 }
698
699 /* now call kernel again to fill the buffer this time */
700 Status = NtUserBuildHwndList(hDesktop,
701 hWndparent,
702 bChildren,
704 dwCount,
705 pHwnd,
706 &dwCount);
707 if (!NT_SUCCESS(Status))
708 {
709 if (pHwnd)
710 HeapFree(hHeap, 0, pHwnd);
711 return FALSE;
712 }
713
714 /* call the user's callback function until we're done or
715 they tell us to quit */
716 for ( i = 0; i < dwCount; i++ )
717 {
718 /* FIXME I'm only getting NULLs from Thread Enumeration, and it's
719 * probably because I'm not doing it right in NtUserBuildHwndList.
720 * Once that's fixed, we shouldn't have to check for a NULL HWND
721 * here
722 * This is now fixed in revision 50205. (jt)
723 */
724 if (!pHwnd[i]) /* don't enumerate a NULL HWND */
725 continue;
726 if (!(*lpfn)(pHwnd[i], lParam))
727 {
728 HeapFree ( hHeap, 0, pHwnd );
729 return FALSE;
730 }
731 }
732 if (pHwnd)
733 HeapFree(hHeap, 0, pHwnd);
734 return TRUE;
735}
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
NTSTATUS NTAPI NtUserBuildHwndList(HDESK hDesktop, HWND hwndParent, BOOLEAN bChildren, ULONG dwThreadId, ULONG cHwnd, HWND *phwndList, ULONG *pcHwndNeeded)
Definition: window.c:1521

Referenced by EnumChildWindows(), EnumDesktopWindows(), EnumThreadWindows(), and EnumWindows().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( user32  )