ReactOS 0.4.16-dev-1172-g2041f3c
window.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS user32.dll
4 * FILE: win32ss/user/user32/windows/window.c
5 * PURPOSE: Window management
6 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
7 * Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
8 * UPDATE HISTORY:
9 * 06-06-2001 CSH Created
10 */
11
12#define DEBUG
13#include <user32.h>
14
16
17void MDI_CalcDefaultChildPos( HWND hwndClient, INT total, LPPOINT lpPos, INT delta, UINT *id );
18extern LPCWSTR FASTCALL ClassNameToVersion(const void *lpszClass, LPCWSTR lpszMenuName, LPCWSTR *plpLibFileName, HANDLE *pContext, BOOL bAnsi);
19
20/* FUNCTIONS *****************************************************************/
21
22
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}
43
44
45/*
46 * @implemented
47 */
50{
51 return NtUserxAllowSetForegroundWindow(dwProcessId);
52}
53
54
55/*
56 * @unimplemented
57 */
58HDWP WINAPI
59BeginDeferWindowPos(int nNumWindows)
60{
61 return NtUserxBeginDeferWindowPos(nNumWindows);
62}
63
64
65/*
66 * @implemented
67 */
70{
73 0,
74 0,
75 0,
76 0,
78}
79
80
83{
85}
86
87
88/*
89 * @implemented
90 */
94{
96}
97
98
99/*
100 * @implemented
101 */
104 POINT pt,
105 UINT uFlags)
106{
108}
109
110
111/*
112 * @implemented
113 */
116{
117 /* NOTE: CloseWindow does minimizes, and doesn't close. */
120}
121
123VOID
125 OUT PLARGE_STRING plstr,
126 LPCVOID psz,
127 BOOL bUnicode)
128{
129 if(bUnicode)
130 {
132 }
133 else
134 {
136 }
137}
138
139VOID
140NTAPI
142 IN PLARGE_STRING LargeString)
143{
144 if (LargeString->Buffer)
145 {
146 RtlFreeHeap(GetProcessHeap(), 0, LargeString->Buffer);
147 RtlZeroMemory(LargeString, sizeof(LARGE_STRING));
148 }
149}
150
153 LPCSTR lpClassName,
154 LPCSTR lpWindowName,
155 DWORD dwStyle,
156 int x,
157 int y,
158 int nWidth,
159 int nHeight,
161 HMENU hMenu,
163 LPVOID lpParam,
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}
344
345
346/*
347 * @implemented
348 */
349HWND
350WINAPI
353 LPCSTR lpClassName,
354 LPCSTR lpWindowName,
355 DWORD dwStyle,
356 int x,
357 int y,
358 int nWidth,
359 int nHeight,
361 HMENU hMenu,
363 LPVOID lpParam)
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}
470
471
472/*
473 * @implemented
474 */
475HWND
476WINAPI
479 LPCWSTR lpClassName,
480 LPCWSTR lpWindowName,
481 DWORD dwStyle,
482 int x,
483 int y,
484 int nWidth,
485 int nHeight,
487 HMENU hMenu,
489 LPVOID lpParam)
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}
596
597/*
598 * @unimplemented
599 */
600HDWP WINAPI
601DeferWindowPos(HDWP hWinPosInfo,
602 HWND hWnd,
603 HWND hWndInsertAfter,
604 int x,
605 int y,
606 int cx,
607 int cy,
608 UINT uFlags)
609{
610 return NtUserDeferWindowPos(hWinPosInfo, hWnd, hWndInsertAfter, x, y, cx, cy, uFlags);
611}
612
613
614/*
615 * @unimplemented
616 */
618EndDeferWindowPos(HDWP hWinPosInfo)
619{
620 return NtUserEndDeferWindowPosEx(hWinPosInfo, FALSE);
621}
622
623
624/*
625 * @implemented
626 */
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}
647
648
649static BOOL
650User32EnumWindows(HDESK hDesktop,
651 HWND hWndparent,
652 WNDENUMPROC lpfn,
655 BOOL bChildren)
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}
736
737
738/*
739 * @implemented
740 */
743 WNDENUMPROC lpEnumFunc,
745{
746 if (!hWndParent)
747 {
748 return EnumWindows(lpEnumFunc, lParam);
749 }
750 return User32EnumWindows(NULL, hWndParent, lpEnumFunc, lParam, 0, TRUE);
751}
752
753
754/*
755 * @implemented
756 */
759 WNDENUMPROC lpfn,
761{
762 if (!dwThreadId)
765}
766
767
768/*
769 * @implemented
770 */
774{
775 return User32EnumWindows(NULL, NULL, lpEnumFunc, lParam, 0, FALSE);
776}
777
778
779/*
780 * @implemented
781 */
783EnumDesktopWindows(HDESK hDesktop,
784 WNDENUMPROC lpfn,
786{
787 return User32EnumWindows(hDesktop, NULL, lpfn, lParam, 0, FALSE);
788}
789
790
791/*
792 * @implemented
793 */
796 HWND hwndChildAfter,
797 LPCSTR lpszClass,
798 LPCSTR lpszWindow)
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}
824
825
826/*
827 * @implemented
828 */
831 HWND hwndChildAfter,
832 LPCWSTR lpszClass,
833 LPCWSTR lpszWindow)
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}
864
865
866/*
867 * @implemented
868 */
870FindWindowA(LPCSTR lpClassName, LPCSTR lpWindowName)
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}
876
877
878/*
879 * @implemented
880 */
882FindWindowW(LPCWSTR lpClassName, LPCWSTR lpWindowName)
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}
897
898
899
900/*
901 * @implemented
902 */
905 int iItem,
906 PALTTABINFO pati,
907 LPSTR pszItemText,
908 UINT cchItemText)
909{
910 return NtUserGetAltTabInfo(hwnd,iItem,pati,(LPWSTR)pszItemText,cchItemText,TRUE);
911}
912
913
914/*
915 * @implemented
916 */
919 int iItem,
920 PALTTABINFO pati,
921 LPWSTR pszItemText,
922 UINT cchItemText)
923{
924 return NtUserGetAltTabInfo(hwnd,iItem,pati,pszItemText,cchItemText,FALSE);
925}
926
927/* @implemented */
930{
931 PWND pWnd = ValidateHwnd(hwnd);
932 if (!pWnd || pWnd == GetThreadDesktopWnd())
933 return NULL;
934
935 /* Special handling optimized for speed */
936 if (uType == GA_PARENT)
937 {
938 HWND hwndAncestor = NULL;
939
941 {
942 if (pWnd->spwndParent && pWnd->fnid != FNID_MESSAGEWND)
943 {
944 PWND pwndAncestor = DesktopPtrToUser(pWnd->spwndParent);
945 if (pwndAncestor)
946 hwndAncestor = UserHMGetHandle(pwndAncestor);
947 }
948 }
950 {
951 /* Do nothing */
952 }
953 _SEH2_END;
954
955 return hwndAncestor;
956 }
957
958 return NtUserGetAncestor(hwnd, uType);
959}
960
961/*
962 * @implemented
963 */
966{
967 PWND Wnd = ValidateHwnd(hWnd);
968
969 if (!Wnd) return FALSE;
970 if (Wnd->style & WS_MINIMIZED)
971 {
972 lpRect->left = lpRect->top = 0;
975 return TRUE;
976 }
977 if ( hWnd != GetDesktopWindow()) // Wnd->fnid != FNID_DESKTOP )
978 {
979/* lpRect->left = lpRect->top = 0;
980 lpRect->right = Wnd->rcClient.right - Wnd->rcClient.left;
981 lpRect->bottom = Wnd->rcClient.bottom - Wnd->rcClient.top;
982*/
983 *lpRect = Wnd->rcClient;
984 OffsetRect(lpRect, -Wnd->rcClient.left, -Wnd->rcClient.top);
985 }
986 else
987 {
988 lpRect->left = lpRect->top = 0;
989 lpRect->right = Wnd->rcClient.right;
990 lpRect->bottom = Wnd->rcClient.bottom;
991/* Do this until Init bug is fixed. This sets 640x480, see InitMetrics.
992 lpRect->right = GetSystemMetrics(SM_CXSCREEN);
993 lpRect->bottom = GetSystemMetrics(SM_CYSCREEN);
994*/ }
995 return TRUE;
996}
997
998
999/*
1000 * @implemented
1001 */
1004{
1005 PWND Wnd;
1006 HWND Ret = hWnd;
1007
1008 Wnd = ValidateHwnd(hWnd);
1009 if (Wnd != NULL)
1010 {
1011 _SEH2_TRY
1012 {
1013 if (Wnd->spwndLastActive)
1014 {
1015 PWND LastActive = DesktopPtrToUser(Wnd->spwndLastActive);
1016 Ret = UserHMGetHandle(LastActive);
1017 }
1018 }
1020 {
1021 /* Do nothing */
1022 }
1023 _SEH2_END;
1024 }
1025 return Ret;
1026}
1027
1028
1029/*
1030 * @implemented
1031 */
1034{
1035 PWND Wnd, WndParent;
1036 HWND Ret = NULL;
1037
1038 Wnd = ValidateHwnd(hWnd);
1039 if (Wnd != NULL)
1040 {
1041 _SEH2_TRY
1042 {
1043 WndParent = NULL;
1044 if (Wnd->style & WS_POPUP)
1045 {
1046 if (Wnd->spwndOwner != NULL)
1047 WndParent = DesktopPtrToUser(Wnd->spwndOwner);
1048 }
1049 else if (Wnd->style & WS_CHILD)
1050 {
1051 if (Wnd->spwndParent != NULL)
1052 WndParent = DesktopPtrToUser(Wnd->spwndParent);
1053 }
1054
1055 if (WndParent != NULL)
1056 Ret = UserHMGetHandle(WndParent);
1057 }
1059 {
1060 /* Do nothing */
1061 }
1062 _SEH2_END;
1063 }
1064
1065 return Ret;
1066}
1067
1068
1069/*
1070 * @implemented
1071 */
1074{
1076}
1077
1078
1079/*
1080 * @implemented
1081 */
1084 UINT uCmd)
1085{
1086 PWND Wnd, FoundWnd;
1087 HWND Ret = NULL;
1088
1089 Wnd = ValidateHwnd(hWnd);
1090 if (!Wnd)
1091 return NULL;
1092
1093 _SEH2_TRY
1094 {
1095 FoundWnd = NULL;
1096 switch (uCmd)
1097 {
1098 case GW_OWNER:
1099 if (Wnd->spwndOwner != NULL)
1100 FoundWnd = DesktopPtrToUser(Wnd->spwndOwner);
1101 break;
1102
1103 case GW_HWNDFIRST:
1104 if(Wnd->spwndParent != NULL)
1105 {
1106 FoundWnd = DesktopPtrToUser(Wnd->spwndParent);
1107 if (FoundWnd->spwndChild != NULL)
1108 FoundWnd = DesktopPtrToUser(FoundWnd->spwndChild);
1109 }
1110 break;
1111 case GW_HWNDNEXT:
1112 if (Wnd->spwndNext != NULL)
1113 FoundWnd = DesktopPtrToUser(Wnd->spwndNext);
1114 break;
1115
1116 case GW_HWNDPREV:
1117 if (Wnd->spwndPrev != NULL)
1118 FoundWnd = DesktopPtrToUser(Wnd->spwndPrev);
1119 break;
1120
1121 case GW_CHILD:
1122 if (Wnd->spwndChild != NULL)
1123 FoundWnd = DesktopPtrToUser(Wnd->spwndChild);
1124 break;
1125
1126 case GW_HWNDLAST:
1127 FoundWnd = Wnd;
1128 while ( FoundWnd->spwndNext != NULL)
1129 FoundWnd = DesktopPtrToUser(FoundWnd->spwndNext);
1130 break;
1131
1132 case GW_ENABLEDPOPUP:
1133 {
1135 if (pwndPopup)
1136 FoundWnd = DesktopPtrToUser(pwndPopup);
1137 break;
1138 }
1139
1140 default:
1141 {
1143 break;
1144 }
1145 }
1146
1147 if (FoundWnd != NULL)
1148 Ret = UserHMGetHandle(FoundWnd);
1149 }
1151 {
1152 /* Do nothing */
1153 }
1154 _SEH2_END;
1155
1156 return Ret;
1157}
1158
1159
1160/*
1161 * @implemented
1162 */
1165{
1166 if (!hWnd) hWnd = GetDesktopWindow();
1167 return GetWindow(hWnd, GW_CHILD);
1168}
1169
1170
1171/*
1172 * @implemented
1173 */
1174BOOL
1175WINAPI
1178 PWINDOWINFO pwi)
1179{
1180 PWND pWnd;
1181 PCLS pCls = NULL;
1182 SIZE Size = {0,0};
1183 BOOL Ret = FALSE;
1184
1185 if ( !pwi || pwi->cbSize != sizeof(WINDOWINFO))
1186 SetLastError(ERROR_INVALID_PARAMETER); // Just set the error and go!
1187
1188 pWnd = ValidateHwnd(hWnd);
1189 if (!pWnd)
1190 return Ret;
1191
1192 UserGetWindowBorders(pWnd->style, pWnd->ExStyle, &Size, FALSE);
1193
1194 _SEH2_TRY
1195 {
1196 pCls = DesktopPtrToUser(pWnd->pcls);
1197 pwi->rcWindow = pWnd->rcWindow;
1198 pwi->rcClient = pWnd->rcClient;
1199 pwi->dwStyle = pWnd->style;
1200 pwi->dwExStyle = pWnd->ExStyle;
1201 pwi->cxWindowBorders = Size.cx;
1202 pwi->cyWindowBorders = Size.cy;
1203 pwi->dwWindowStatus = 0;
1204 if (pWnd->state & WNDS_ACTIVEFRAME || (GetActiveWindow() == hWnd))
1206 pwi->atomWindowType = (pCls ? pCls->atomClassName : 0 );
1207
1208 if ( pWnd->state2 & WNDS2_WIN50COMPAT )
1209 {
1210 pwi->wCreatorVersion = 0x500;
1211 }
1212 else if ( pWnd->state2 & WNDS2_WIN40COMPAT )
1213 {
1214 pwi->wCreatorVersion = 0x400;
1215 }
1216 else if ( pWnd->state2 & WNDS2_WIN31COMPAT )
1217 {
1218 pwi->wCreatorVersion = 0x30A;
1219 }
1220 else
1221 {
1222 pwi->wCreatorVersion = 0x300;
1223 }
1224
1225 Ret = TRUE;
1226 }
1228 {
1229 /* Do nothing */
1230 }
1231 _SEH2_END;
1232
1233 return Ret;
1234}
1235
1236
1237/*
1238 * @implemented
1239 */
1242 LPSTR lpszFileName,
1243 UINT cchFileNameMax)
1244{
1245 PWND Wnd = ValidateHwnd(hwnd);
1246
1247 if (!Wnd)
1248 return 0;
1249
1250 return GetModuleFileNameA(Wnd->hModule, lpszFileName, cchFileNameMax);
1251}
1252
1253
1254/*
1255 * @implemented
1256 */
1259 LPWSTR lpszFileName,
1260 UINT cchFileNameMax)
1261{
1262 PWND Wnd = ValidateHwnd(hwnd);
1263
1264 if (!Wnd)
1265 return 0;
1266
1267 return GetModuleFileNameW( Wnd->hModule, lpszFileName, cchFileNameMax );
1268}
1269
1270/*
1271 * @implemented
1272 */
1275 LPRECT lpRect)
1276{
1277 PWND Wnd = ValidateHwnd(hWnd);
1278
1279 if (!Wnd) return FALSE;
1280 if ( hWnd != GetDesktopWindow()) // Wnd->fnid != FNID_DESKTOP )
1281 {
1282 *lpRect = Wnd->rcWindow;
1283 }
1284 else
1285 {
1286 lpRect->left = lpRect->top = 0;
1287 lpRect->right = Wnd->rcWindow.right;
1288 lpRect->bottom = Wnd->rcWindow.bottom;
1289/* Do this until Init bug is fixed. This sets 640x480, see InitMetrics.
1290 lpRect->right = GetSystemMetrics(SM_CXSCREEN);
1291 lpRect->bottom = GetSystemMetrics(SM_CYSCREEN);
1292*/ }
1293 return TRUE;
1294}
1295
1296/*
1297 * @implemented
1298 */
1299int WINAPI
1301{
1302 PWND Wnd;
1303 INT Length = 0;
1304
1305 if (lpString == NULL || nMaxCount == 0)
1306 return 0;
1307
1308 Wnd = ValidateHwnd(hWnd);
1309 if (!Wnd)
1310 return 0;
1311
1312 lpString[0] = '\0';
1313
1314 if (!TestWindowProcess(Wnd))
1315 {
1316 _SEH2_TRY
1317 {
1319 }
1321 {
1322 Length = 0;
1323 }
1324 _SEH2_END;
1325 }
1326 else
1327 {
1329 }
1330 //ERR("GWTA Len %d : %s\n",Length,lpString);
1331 return Length;
1332}
1333
1334/*
1335 * @implemented
1336 */
1337int WINAPI
1339{
1340 PWND Wnd;
1341
1342 Wnd = ValidateHwnd(hWnd);
1343 if (!Wnd)
1344 return 0;
1345
1346 if (!TestWindowProcess(Wnd))
1347 {
1348 return DefWindowProcA(hWnd, WM_GETTEXTLENGTH, 0, 0);
1349 }
1350 else
1351 {
1352 return SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0);
1353 }
1354}
1355
1356/*
1357 * @implemented
1358 */
1359int WINAPI
1361{
1362 PWND Wnd;
1363
1364 Wnd = ValidateHwnd(hWnd);
1365 if (!Wnd)
1366 return 0;
1367
1368 if (!TestWindowProcess(Wnd))
1369 {
1370 return DefWindowProcW(hWnd, WM_GETTEXTLENGTH, 0, 0);
1371 }
1372 else
1373 {
1374 return SendMessageW(hWnd, WM_GETTEXTLENGTH, 0, 0);
1375 }
1376}
1377
1378/*
1379 * @implemented
1380 */
1381int WINAPI
1383{
1384 PWND Wnd;
1385 INT Length = 0;
1386
1387 if (lpString == NULL || nMaxCount == 0)
1388 return 0;
1389
1390 Wnd = ValidateHwnd(hWnd);
1391 if (!Wnd)
1392 return 0;
1393
1394 lpString[0] = L'\0';
1395
1396 if (!TestWindowProcess(Wnd))
1397 {
1398 _SEH2_TRY
1399 {
1401 }
1403 {
1404 Length = 0;
1405 }
1406 _SEH2_END;
1407 }
1408 else
1409 {
1411 }
1412 //ERR("GWTW Len %d : %S\n",Length,lpString);
1413 return Length;
1414}
1415
1418 LPDWORD lpdwProcessId)
1419{
1420 DWORD Ret = 0;
1421 PTHREADINFO ti;
1422 PWND pWnd = ValidateHwnd(hWnd);
1423
1424 if (!pWnd) return Ret;
1425
1426 ti = pWnd->head.pti;
1427
1428 if (ti)
1429 {
1430 if (ti == GetW32ThreadInfo())
1431 { // We are current.
1432 //FIXME("Current!\n");
1433 if (lpdwProcessId)
1434 *lpdwProcessId = (DWORD_PTR)NtCurrentTeb()->ClientId.UniqueProcess;
1435 Ret = (DWORD_PTR)NtCurrentTeb()->ClientId.UniqueThread;
1436 }
1437 else
1438 { // Ask kernel for info.
1439 //FIXME("Kernel call!\n");
1440 if (lpdwProcessId)
1443 }
1444 }
1445 return Ret;
1446}
1447
1448
1449/*
1450 * @implemented
1451 */
1454 HWND hWnd)
1455{
1456 PWND WndParent, DesktopWnd, Wnd;
1457 BOOL Ret = FALSE;
1458
1459 WndParent = ValidateHwnd(hWndParent);
1460 if (!WndParent)
1461 return FALSE;
1462 Wnd = ValidateHwnd(hWnd);
1463 if (!Wnd)
1464 return FALSE;
1465
1466 DesktopWnd = GetThreadDesktopWnd();
1467 if (!DesktopWnd)
1468 return FALSE;
1469
1470 _SEH2_TRY
1471 {
1472 while (Wnd != NULL && ((Wnd->style & (WS_POPUP|WS_CHILD)) == WS_CHILD))
1473 {
1474 if (Wnd->spwndParent != NULL)
1475 {
1476 Wnd = DesktopPtrToUser(Wnd->spwndParent);
1477
1478 if (Wnd == WndParent)
1479 {
1480 Ret = TRUE;
1481 break;
1482 }
1483 }
1484 else
1485 break;
1486 }
1487 }
1489 {
1490 /* Do nothing */
1491 }
1492 _SEH2_END;
1493
1494 return Ret;
1495}
1496
1497
1498/*
1499 * @implemented
1500 */
1503{
1504 PWND Wnd = ValidateHwnd(hWnd);
1505
1506 if (Wnd != NULL)
1507 return (Wnd->style & WS_MINIMIZE) != 0;
1508
1509 return FALSE;
1510}
1511
1512
1513/*
1514 * @implemented
1515 */
1518{
1520 if (Wnd != NULL)
1521 {
1522 if (Wnd->state & WNDS_DESTROYED)
1523 return FALSE;
1524 return TRUE;
1525 }
1526
1527 return FALSE;
1528}
1529
1530
1531/*
1532 * @implemented
1533 */
1536{
1537 PWND Wnd = ValidateHwnd(hWnd);
1538
1539 if (Wnd != NULL)
1540 return Wnd->Unicode;
1541
1542 return FALSE;
1543}
1544
1545
1546/*
1547 * @implemented
1548 */
1551{
1552 BOOL Ret = FALSE;
1553 PWND Wnd = ValidateHwnd(hWnd);
1554
1555 if (Wnd != NULL)
1556 {
1557 _SEH2_TRY
1558 {
1559 Ret = TRUE;
1560
1561 do
1562 {
1563 if (!(Wnd->style & WS_VISIBLE))
1564 {
1565 Ret = FALSE;
1566 break;
1567 }
1568
1569 if (Wnd->spwndParent != NULL)
1570 Wnd = DesktopPtrToUser(Wnd->spwndParent);
1571 else
1572 break;
1573
1574 } while (Wnd != NULL);
1575 }
1577 {
1578 Ret = FALSE;
1579 }
1580 _SEH2_END;
1581 }
1582
1583 return Ret;
1584}
1585
1586
1587/*
1588 * @implemented
1589 */
1592{
1593 // AG: I don't know if child windows are affected if the parent is
1594 // disabled. I think they stop processing messages but stay appearing
1595 // as enabled.
1596
1598}
1599
1600
1601/*
1602 * @implemented
1603 */
1606{
1607 return (GetWindowLongPtrW(hWnd, GWL_STYLE) & WS_MAXIMIZE) != 0;
1608}
1609
1610
1611/*
1612 * @implemented
1613 */
1616{
1617 return NtUserxLockSetForegroundWindow(uLockCode);
1618}
1619
1620
1621/*
1622 * @implemented
1623 */
1626 DWORD dwTime,
1627 DWORD dwFlags)
1628{
1629 /* FIXME Add animation code */
1630
1631 /* If trying to show/hide and it's already *
1632 * shown/hidden or invalid window, fail with *
1633 * invalid parameter */
1634
1635 BOOL visible;
1636 visible = IsWindowVisible(hwnd);
1637 if(!IsWindow(hwnd) ||
1638 (visible && !(dwFlags & AW_HIDE)) ||
1639 (!visible && (dwFlags & AW_HIDE)))
1640 {
1642 return FALSE;
1643 }
1644
1645 ShowWindow(hwnd, (dwFlags & AW_HIDE) ? SW_HIDE : ((dwFlags & AW_ACTIVATE) ? SW_SHOW : SW_SHOWNA));
1646
1647 return TRUE;
1648}
1649
1650
1651/*
1652 * @implemented
1653 */
1656{
1658 return FALSE;
1659
1661 return TRUE;
1662}
1663
1664
1665/*
1666 * @implemented
1667 */
1670 POINT ptParentClientCoords)
1671{
1672 return NtUserRealChildWindowFromPoint(hwndParent, ptParentClientCoords.x, ptParentClientCoords.y);
1673}
1674
1675/*
1676 * @unimplemented
1677 */
1680{
1682}
1683
1684
1685/*
1686 * @implemented
1687 */
1690{
1692}
1693
1694
1695/*
1696 * @implemented
1697 */
1698BOOL
1699WINAPI
1702 LPCSTR lpString)
1703{
1704 PWND pwnd;
1705
1706 pwnd = ValidateHwnd(hWnd);
1707 if (pwnd)
1708 {
1709 if (!TestWindowProcess(pwnd))
1710 {
1711 /* do not send WM_GETTEXT messages to other processes */
1712 return (DefWindowProcA(hWnd, WM_SETTEXT, 0, (LPARAM)lpString) >= 0);
1713 }
1714 return (SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)lpString) >= 0);
1715 }
1716 return FALSE;
1717}
1718
1719
1720/*
1721 * @implemented
1722 */
1723BOOL
1724WINAPI
1727 LPCWSTR lpString)
1728{
1729 PWND pwnd;
1730
1731 pwnd = ValidateHwnd(hWnd);
1732 if (pwnd)
1733 {
1734 if (!TestWindowProcess(pwnd))
1735 {
1736 /* do not send WM_GETTEXT messages to other processes */
1737 return (DefWindowProcW(hWnd, WM_SETTEXT, 0, (LPARAM)lpString) >= 0);
1738 }
1739 return (SendMessageW(hWnd, WM_SETTEXT, 0, (LPARAM)lpString) >= 0);
1740 }
1741 return FALSE;
1742}
1743
1744
1745/*
1746 * @implemented
1747 */
1750{
1751 return NtUserxShowOwnedPopups(hWnd, fShow);
1752}
1753
1754
1755/*
1756 * @implemented
1757 */
1760 HDC hdcDst,
1761 POINT *pptDst,
1762 SIZE *psize,
1763 HDC hdcSrc,
1764 POINT *pptSrc,
1765 COLORREF crKey,
1766 BLENDFUNCTION *pbl,
1767 DWORD dwFlags)
1768{
1769 if (dwFlags & ULW_EX_NORESIZE) /* only valid for UpdateLayeredWindowIndirect */
1770 {
1772 return FALSE;
1773 }
1775 hdcDst,
1776 pptDst,
1777 psize,
1778 hdcSrc,
1779 pptSrc,
1780 crKey,
1781 pbl,
1782 dwFlags,
1783 NULL);
1784}
1785
1786/*
1787 * @implemented
1788 */
1791 const UPDATELAYEREDWINDOWINFO *info)
1792{
1793 if (info && info->cbSize == sizeof(*info))
1794 {
1796 info->hdcDst,
1797 (POINT *)info->pptDst,
1798 (SIZE *)info->psize,
1799 info->hdcSrc,
1800 (POINT *)info->pptSrc,
1801 info->crKey,
1802 (BLENDFUNCTION *)info->pblend,
1803 info->dwFlags,
1804 (RECT *)info->prcDirty);
1805 }
1807 return FALSE;
1808}
1809
1810/*
1811 * @implemented
1812 */
1815 DWORD dwContextHelpId)
1816{
1817 return NtUserxSetWindowContextHelpId(hwnd, dwContextHelpId);
1818}
1819
1820/*
1821 * @implemented
1822 */
1825{
1827}
1828
1829/*
1830 * @implemented
1831 */
1832int WINAPI
1834{
1836 if (Ret == 0 && lpString)
1837 *lpString = L'\0';
1838 return Ret;
1839}
1840
1841/*
1842 * @implemented
1843 */
1846{
1848}
1849
1850/*
1851 * @implemented
1852 */
1854SetLastErrorEx(DWORD dwErrCode, DWORD dwType)
1855{
1856 SetLastError(dwErrCode);
1857}
1858
1859/*
1860 * @implemented
1861 */
1864{
1866}
1867
1870{
1872}
1873
1874/*
1875 * @implemented
1876 */
1879{
1881}
1882
1883/*
1884 * @implemented
1885 */
1888{
1890}
1891
1892/*
1893 * @implemented
1894 */
1897{
1899}
1900
1901/*
1902 * @implemented
1903 */
1906{
1908}
1909
1910/*
1911 * @implemented
1912 */
1915 int dx,
1916 int dy,
1917 CONST RECT *lpRect,
1918 CONST RECT *prcClip)
1919{
1921 dx,
1922 dy,
1923 lpRect,
1924 prcClip,
1925 0,
1926 NULL,
1928}
1929
1930/* ScrollWindow uses the window DC, ScrollWindowEx doesn't */
1931
1932/*
1933 * @implemented
1934 */
1935INT WINAPI
1937 int dx,
1938 int dy,
1939 CONST RECT *prcScroll,
1940 CONST RECT *prcClip,
1941 HRGN hrgnUpdate,
1942 LPRECT prcUpdate,
1943 UINT flags)
1944{
1945 if (flags & SW_SMOOTHSCROLL)
1946 {
1947 FIXME("SW_SMOOTHSCROLL not supported.\n");
1948 // Fall through....
1949 }
1951 dx,
1952 dy,
1953 prcScroll,
1954 prcClip,
1955 hrgnUpdate,
1956 prcUpdate,
1957 flags);
1958}
1959
1960/*
1961 * @implemented
1962 */
1965{
1966 int i;
1967 BOOL retvalue;
1969
1970 if (!list) return FALSE;
1971 for (i = 0; list[i]; i++)
1972 {
1973 if (IsWindowVisible( list[i] ) && GetWindow( list[i], GW_OWNER )) break;
1974 }
1975 retvalue = (list[i] != 0);
1976 HeapFree( GetProcessHeap(), 0, list );
1977 return retvalue;
1978}
1979
1980/*
1981 * @implemented
1982 */
1985{
1986 PWND pwnd;
1987 pwnd = ValidateHwnd(hWnd);
1988 if (!pwnd)
1989 return FALSE;
1990 return ((pwnd->state2 & WNDS2_INDESTROY) == WNDS2_INDESTROY);
1991}
1992
1993/*
1994 * @implemented
1995 */
1998{
2000}
2001
2002/* EOF */
2003
#define CW_USEDEFAULT16
Definition: resource.h:7
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
LONG NTSTATUS
Definition: precomp.h:26
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
#define UlongToHandle(ul)
Definition: basetsd.h:97
CHAR AnsiBuffer[1024]
Definition: debug.c:15
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
Definition: heap.c:616
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:634
HINSTANCE hInstance
Definition: charmap.c:19
#define IS_ATOM(x)
Definition: class.h:3
Definition: list.h:37
LPARAM lParam
Definition: combotst.c:139
static HWND hwndParent
Definition: cryptui.c:300
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
UINT uFlags
Definition: api.c:59
#define GetProcessHeap()
Definition: compat.h:736
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:109
#define SetLastError(x)
Definition: compat.h:752
#define HeapAlloc
Definition: compat.h:733
#define FreeLibrary(x)
Definition: compat.h:748
#define HeapFree(x, y, z)
Definition: compat.h:735
#define MultiByteToWideChar
Definition: compat.h:110
static void cleanup(void)
Definition: main.c:1335
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
DWORD WINAPI GetModuleFileNameA(HINSTANCE hModule, LPSTR lpFilename, DWORD nSize)
Definition: loader.c:539
#define pt(x, y)
Definition: drawing.c:79
#define ERROR(name)
Definition: error_private.h:53
DWORD dwThreadId
Definition: fdebug.c:31
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
size_t total
ULONG Handle
Definition: gdb_input.c:15
Status
Definition: gdiplustypes.h:25
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLbitfield flags
Definition: glext.h:7161
GLenum GLsizei len
Definition: glext.h:6722
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
#define DbgPrint
Definition: hal.h:12
static const WCHAR titleW[]
Definition: htmlelem.c:1067
#define WNDS2_WIN31COMPAT
Definition: ntuser.h:649
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
#define QUERY_WINDOW_UNIQUE_THREAD_ID
Definition: ntuser.h:2833
VOID NTAPI RtlInitLargeAnsiString(IN OUT PLARGE_ANSI_STRING, IN PCSZ, IN INT)
Definition: rtlstr.c:17
#define WNDS2_WIN40COMPAT
Definition: ntuser.h:650
BOOL NTAPI NtUserSetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)
Definition: winpos.c:3533
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
DWORD_PTR NTAPI NtUserCallOneParam(DWORD_PTR Param, DWORD Routine)
Definition: simplecall.c:153
#define WNDS_ACTIVEFRAME
Definition: ntuser.h:611
HWND NTAPI NtUserRealChildWindowFromPoint(HWND Parent, LONG x, LONG y)
Definition: winpos.c:3513
#define WNDS_DESTROYED
Definition: ntuser.h:636
#define UserHMGetHandle(obj)
Definition: ntuser.h:230
ULONG RtlGetExpWinVer(_In_ PVOID BaseAddress)
Definition: image.c:20
#define QUERY_WINDOW_REAL_ID
Definition: ntuser.h:2837
struct _THREADINFO * GetW32ThreadInfo(VOID)
Definition: misc.c:807
struct _WND * PWND
HDWP NTAPI NtUserDeferWindowPos(HDWP WinPosInfo, HWND Wnd, HWND WndInsertAfter, int x, int y, int cx, int cy, UINT Flags)
Definition: winpos.c:3289
@ THREADSTATE_TASKMANWINDOW
Definition: ntuser.h:2497
@ THREADSTATE_PROGMANWINDOW
Definition: ntuser.h:2496
@ THREADSTATE_FOCUSWINDOW
Definition: ntuser.h:2477
@ ONEPARAM_ROUTINE_SETPROCDEFLAYOUT
Definition: ntuser.h:1606
@ HWND_ROUTINE_DWP_GETENABLEDPOPUP
Definition: ntuser.h:1618
@ ONEPARAM_ROUTINE_GETPROCDEFLAYOUT
Definition: ntuser.h:1573
BOOL NTAPI NtUserGetAltTabInfo(HWND hwnd, INT iItem, PALTTABINFO pati, LPWSTR pszItemText, UINT cchItemText, BOOL Ansi)
Definition: ntstubs.c:86
VOID NTAPI RtlInitLargeUnicodeString(IN OUT PLARGE_UNICODE_STRING, IN PCWSTR, IN INT)
Definition: rtlstr.c:42
#define WNDS2_INDESTROY
Definition: ntuser.h:648
#define QUERY_WINDOW_UNIQUE_PROCESS_ID
Definition: ntuser.h:2832
DWORD_PTR NTAPI NtUserGetThreadState(DWORD Routine)
Definition: misc.c:240
HWND NTAPI NtUserChildWindowFromPointEx(HWND Parent, LONG x, LONG y, UINT Flags)
Definition: winpos.c:3252
#define QUERY_WINDOW_ISHUNG
Definition: ntuser.h:2836
#define FNID_MESSAGEWND
Definition: ntuser.h:864
#define WNDS2_WIN50COMPAT
Definition: ntuser.h:651
DWORD_PTR NTAPI NtUserCallHwnd(HWND hWnd, DWORD Routine)
Definition: simplecall.c:711
BOOL NTAPI NtUserEndDeferWindowPosEx(HDWP WinPosInfo, BOOL bAsync)
Definition: winpos.c:3273
#define FNID_MDICLIENT
Definition: ntuser.h:872
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:90
#define NtCurrentTeb
GLint dy
Definition: linetemp.h:97
GLint dx
Definition: linetemp.h:97
static HDC
Definition: imagelist.c:88
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
unsigned int UINT
Definition: ndis.h:50
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
#define _In_
Definition: no_sal2.h:158
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define FASTCALL
Definition: nt_native.h:50
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define LPVOID
Definition: nt_native.h:45
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
_Must_inspect_result_ _Out_ LPSIZE psize
Definition: ntgdi.h:1569
VOID UserGetWindowBorders(DWORD Style, DWORD ExStyle, SIZE *Size, BOOL WithClient)
Definition: winpos.c:894
#define L(x)
Definition: ntvdm.h:50
EXTINLINE BOOL NtUserxSetWindowContextHelpId(HWND hWnd, DWORD_PTR dwContextHelpId)
Definition: ntwrapper.h:706
EXTINLINE BOOL NtUserxAllowSetForegroundWindow(DWORD dwProcessId)
Definition: ntwrapper.h:836
EXTINLINE BOOL NtUserxLockSetForegroundWindow(UINT uLockCode)
Definition: ntwrapper.h:841
EXTINLINE HWND NtUserxSetTaskmanWindow(HWND hWnd)
Definition: ntwrapper.h:758
EXTINLINE DWORD NtUserxGetWindowContextHelpId(HWND hwnd)
Definition: ntwrapper.h:726
EXTINLINE VOID NtUserxEnableProcessWindowGhosting(BOOL bEnable)
Definition: ntwrapper.h:801
EXTINLINE VOID NtUserxSwitchToThisWindow(HWND hWnd, BOOL fAltTab)
Definition: ntwrapper.h:691
EXTINLINE BOOL NtUserxSetForegroundWindow(HWND hWnd)
Definition: ntwrapper.h:788
EXTINLINE BOOL NtUserxShowOwnedPopups(HWND hWnd, BOOL fShow)
Definition: ntwrapper.h:696
EXTINLINE HDWP NtUserxBeginDeferWindowPos(INT nNumWindows)
Definition: ntwrapper.h:651
EXTINLINE HWND NtUserxSetProgmanWindow(HWND hWnd)
Definition: ntwrapper.h:763
#define WS_CHILD
Definition: pedump.c:617
#define WS_CAPTION
Definition: pedump.c:624
#define CONST
Definition: pedump.c:81
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define WS_MAXIMIZEBOX
Definition: pedump.c:632
#define WS_MAXIMIZE
Definition: pedump.c:623
#define WS_SYSMENU
Definition: pedump.c:629
#define WS_POPUP
Definition: pedump.c:616
#define WS_MINIMIZE
Definition: pedump.c:622
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_DISABLED
Definition: pedump.c:621
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_MINIMIZEBOX
Definition: pedump.c:631
#define WS_THICKFRAME
Definition: pedump.c:630
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
_Out_opt_ int * cx
Definition: commctrl.h:585
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:82
#define _SEH2_END
Definition: pseh2_64.h:171
#define _SEH2_TRY
Definition: pseh2_64.h:71
DWORD RegisterDefaultClasses
Definition: regcontrol.c:13
BOOL WINAPI RegisterSystemControls(VOID)
Definition: regcontrol.c:70
BOOL FASTCALL VersionRegisterClass(PCWSTR, LPCWSTR, HANDLE, HMODULE *)
Definition: class.c:195
#define DECLSPEC_HOTPATCH
Definition: config.h:9
HINSTANCE hLibModule
Definition: sfc.c:23
#define STATUS_SUCCESS
Definition: shellext.h:65
#define TRACE(s)
Definition: solgame.cpp:4
DWORD dwTime
Definition: solitaire.cpp:27
Definition: ntuser.h:566
RTL_ATOM atomClassName
Definition: ntuser.h:568
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:3229
UINT cbSize
Definition: winuser.h:3220
LPCWSTR lpszMenuName
Definition: winuser.h:3244
UINT cbSize
Definition: winuser.h:3235
Definition: ntuser.h:694
DWORD ExStyle
Definition: ntuser.h:704
PCLS pcls
Definition: ntuser.h:720
struct _WND * spwndOwner
Definition: ntuser.h:715
UINT Unicode
Definition: ntuser.h:756
struct _WND * spwndPrev
Definition: ntuser.h:712
THRDESKHEAD head
Definition: ntuser.h:695
struct _WND * spwndLastActive
Definition: ntuser.h:739
DWORD style
Definition: ntuser.h:706
DWORD state2
Definition: ntuser.h:702
struct _WND * spwndChild
Definition: ntuser.h:714
DWORD fnid
Definition: ntuser.h:709
RECT rcClient
Definition: ntuser.h:717
DWORD state
Definition: ntuser.h:701
struct _WND * spwndNext
Definition: ntuser.h:711
HINSTANCE hModule
Definition: ntuser.h:708
RECT rcWindow
Definition: ntuser.h:716
struct _WND * spwndParent
Definition: ntuser.h:713
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
RECT rcClient
Definition: winuser.h:3787
DWORD dwWindowStatus
Definition: winuser.h:3790
ATOM atomWindowType
Definition: winuser.h:3793
DWORD cbSize
Definition: winuser.h:3785
DWORD dwExStyle
Definition: winuser.h:3789
DWORD dwStyle
Definition: winuser.h:3788
WORD wCreatorVersion
Definition: winuser.h:3794
UINT cxWindowBorders
Definition: winuser.h:3791
UINT cyWindowBorders
Definition: winuser.h:3792
RECT rcWindow
Definition: winuser.h:3786
#define DWORD_PTR
Definition: treelist.c:76
uint16_t * PWSTR
Definition: typedefs.h:56
char * PSTR
Definition: typedefs.h:51
const uint16_t * PCWSTR
Definition: typedefs.h:57
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define NTAPI
Definition: typedefs.h:36
void * PVOID
Definition: typedefs.h:50
uint32_t * LPDWORD
Definition: typedefs.h:59
int32_t INT
Definition: typedefs.h:58
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
#define STATUS_INFO_LENGTH_MISMATCH
Definition: udferr_usr.h:133
CONST char * PCSZ
Definition: umtypes.h:125
#define NUCWE_ANSI
Definition: undocuser.h:76
#define WS_EX_SETANSICREATOR
Definition: undocuser.h:28
#define SW_SCROLLWNDDCE
Definition: undocuser.h:92
#define WS_MINIMIZED
Definition: undocuser.h:18
PWND FASTCALL GetThreadDesktopWnd(VOID)
Definition: misc.c:397
HWND * WIN_ListChildren(HWND hWndparent)
Definition: mdi.c:139
VOID WINAPI UserSetLastError(IN DWORD dwErrCode)
Definition: misc.c:13
BOOL FASTCALL TestWindowProcess(PWND)
Definition: misc.c:166
static const WCHAR classW[]
Definition: lex.c:40
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
#define FORCEINLINE
Definition: wdftypes.h:67
struct _SENDASYNCPROC_CALLBACK_ARGUMENTS * PSENDASYNCPROC_CALLBACK_ARGUMENTS
#define ValidateHwnd(hwnd)
Definition: precomp.h:110
#define ValidateHwndNoErr(hwnd)
Definition: precomp.h:109
static PVOID FASTCALL DesktopPtrToUser(PVOID ptr)
Definition: utils.c:189
DWORD_PTR APIENTRY NtUserQueryWindow(HWND hWnd, DWORD Index)
Definition: window.c:4207
HWND APIENTRY NtUserFindWindowEx(HWND hwndParent, HWND hwndChildAfter, PUNICODE_STRING ucClassName, PUNICODE_STRING ucWindowName, DWORD dwUnknown)
Definition: window.c:3160
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:2683
HWND APIENTRY NtUserGetAncestor(_In_ HWND hWnd, _In_ UINT uType)
Definition: window.c:3420
NTSTATUS NTAPI NtUserBuildHwndList(HDESK hDesktop, HWND hwndParent, BOOLEAN bChildren, ULONG dwThreadId, ULONG cHwnd, HWND *phwndList, ULONG *pcHwndNeeded)
Definition: window.c:1521
INT APIENTRY NtUserInternalGetWindowText(HWND hWnd, LPWSTR lpString, INT nMaxCount)
Definition: window.c:4605
HWND WINAPI FindWindowExW(HWND hwndParent, HWND hwndChildAfter, LPCWSTR lpszClass, LPCWSTR lpszWindow)
Definition: window.c:830
HWND WINAPI ChildWindowFromPointEx(HWND hwndParent, POINT pt, UINT uFlags)
Definition: window.c:103
HWND WINAPI FindWindowExA(HWND hwndParent, HWND hwndChildAfter, LPCSTR lpszClass, LPCSTR lpszWindow)
Definition: window.c:795
BOOL WINAPI EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)
Definition: window.c:772
BOOL WINAPI UpdateLayeredWindow(HWND hwnd, HDC hdcDst, POINT *pptDst, SIZE *psize, HDC hdcSrc, POINT *pptSrc, COLORREF crKey, BLENDFUNCTION *pbl, DWORD dwFlags)
Definition: window.c:1759
int WINAPI InternalGetWindowText(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1833
BOOL WINAPI CloseWindow(HWND hWnd)
Definition: window.c:115
int WINAPI GetWindowTextA(HWND hWnd, LPSTR lpString, int nMaxCount)
Definition: window.c:1300
BOOL WINAPI IsChild(HWND hWndParent, HWND hWnd)
Definition: window.c:1453
BOOL WINAPI DECLSPEC_HOTPATCH SetWindowTextA(HWND hWnd, LPCSTR lpString)
Definition: window.c:1701
BOOL WINAPI IsIconic(HWND hWnd)
Definition: window.c:1502
HWND WINAPI GetWindow(HWND hWnd, UINT uCmd)
Definition: window.c:1083
UINT WINAPI GetWindowModuleFileNameW(HWND hwnd, LPWSTR lpszFileName, UINT cchFileNameMax)
Definition: window.c:1258
VOID WINAPI SetLastErrorEx(DWORD dwErrCode, DWORD dwType)
Definition: window.c:1854
HWND WINAPI SetTaskmanWindow(HWND hWnd)
Definition: window.c:1878
BOOL WINAPI IsZoomed(HWND hWnd)
Definition: window.c:1605
HWND WINAPI GetTopWindow(HWND hWnd)
Definition: window.c:1164
BOOL WINAPI SetWindowContextHelpId(HWND hwnd, DWORD dwContextHelpId)
Definition: window.c:1814
static BOOL User32EnumWindows(HDESK hDesktop, HWND hWndparent, WNDENUMPROC lpfn, LPARAM lParam, DWORD dwThreadId, BOOL bChildren)
Definition: window.c:650
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
UINT WINAPI GetWindowModuleFileNameA(HWND hwnd, LPSTR lpszFileName, UINT cchFileNameMax)
Definition: window.c:1241
BOOL WINAPI GetClientRect(HWND hWnd, LPRECT lpRect)
Definition: window.c:965
HWND WINAPI FindWindowW(LPCWSTR lpClassName, LPCWSTR lpWindowName)
Definition: window.c:882
BOOL WINAPI GetAltTabInfoA(HWND hwnd, int iItem, PALTTABINFO pati, LPSTR pszItemText, UINT cchItemText)
Definition: window.c:904
BOOL WINAPI EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam)
Definition: window.c:742
VOID WINAPI SwitchToThisWindow(HWND hwnd, BOOL fAltTab)
Definition: window.c:82
BOOL WINAPI IsWindowEnabled(HWND hWnd)
Definition: window.c:1591
HWND WINAPI GetLastActivePopup(HWND hWnd)
Definition: window.c:1003
HWND WINAPI GetParent(HWND hWnd)
Definition: window.c:1033
NTSTATUS WINAPI User32CallSendAsyncProcForKernel(PVOID Arguments, ULONG ArgumentLength)
Definition: window.c:24
HWND WINAPI ChildWindowFromPoint(HWND hWndParent, POINT Point)
Definition: window.c:92
BOOL WINAPI LockSetForegroundWindow(UINT uLockCode)
Definition: window.c:1615
BOOL WINAPI BringWindowToTop(HWND hWnd)
Definition: window.c:69
BOOL WINAPI GetProcessDefaultLayout(DWORD *pdwDefaultLayout)
Definition: window.c:1073
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: window.c:352
BOOL WINAPI EndDeferWindowPos(HDWP hWinPosInfo)
Definition: window.c:618
BOOL WINAPI IsWindowInDestroy(HWND hWnd)
Definition: window.c:1984
HDWP WINAPI BeginDeferWindowPos(int nNumWindows)
Definition: window.c:59
BOOL WINAPI DECLSPEC_HOTPATCH GetWindowInfo(HWND hWnd, PWINDOWINFO pwi)
Definition: window.c:1177
DWORD WINAPI GetRealWindowOwner(HWND hwnd)
Definition: window.c:1869
void MDI_CalcDefaultChildPos(HWND hwndClient, INT total, LPPOINT lpPos, INT delta, UINT *id)
Definition: mdi.c:308
BOOL WINAPI IsWindowUnicode(HWND hWnd)
Definition: window.c:1535
BOOL WINAPI SetProcessDefaultLayout(DWORD dwDefaultLayout)
Definition: window.c:1689
int WINAPI GetWindowTextLengthA(HWND hWnd)
Definition: window.c:1338
HDWP WINAPI DeferWindowPos(HDWP hWinPosInfo, HWND hWnd, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags)
Definition: window.c:601
BOOL WINAPI IsHungAppWindow(HWND hwnd)
Definition: window.c:1845
BOOL WINAPI EnumThreadWindows(DWORD dwThreadId, WNDENUMPROC lpfn, LPARAM lParam)
Definition: window.c:758
int WINAPI GetWindowTextLengthW(HWND hWnd)
Definition: window.c:1360
BOOL WINAPI EnumDesktopWindows(HDESK hDesktop, WNDENUMPROC lpfn, LPARAM lParam)
Definition: window.c:783
BOOL WINAPI AllowSetForegroundWindow(DWORD dwProcessId)
Definition: window.c:49
BOOL WINAPI OpenIcon(HWND hWnd)
Definition: window.c:1655
HWND WINAPI GetAncestor(_In_ HWND hwnd, _In_ UINT uType)
Definition: window.c:929
BOOL WINAPI ScrollWindow(HWND hWnd, int dx, int dy, CONST RECT *lpRect, CONST RECT *prcClip)
Definition: window.c:1914
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId)
Definition: window.c:1417
HWND WINAPI RealChildWindowFromPoint(HWND hwndParent, POINT ptParentClientCoords)
Definition: window.c:1669
BOOL WINAPI AnimateWindow(HWND hwnd, DWORD dwTime, DWORD dwFlags)
Definition: window.c:1625
BOOL WINAPI GetAltTabInfoW(HWND hwnd, int iItem, PALTTABINFO pati, LPWSTR pszItemText, UINT cchItemText)
Definition: window.c:918
BOOL WINAPI UpdateLayeredWindowIndirect(HWND hwnd, const UPDATELAYEREDWINDOWINFO *info)
Definition: window.c:1790
BOOL WINAPI ShowOwnedPopups(HWND hWnd, BOOL fShow)
Definition: window.c:1749
LPCWSTR FASTCALL ClassNameToVersion(const void *lpszClass, LPCWSTR lpszMenuName, LPCWSTR *plpLibFileName, HANDLE *pContext, BOOL bAnsi)
Definition: class.c:85
HWND WINAPI SetProgmanWindow(HWND hWnd)
Definition: window.c:1887
VOID WINAPI DisableProcessWindowsGhosting(VOID)
Definition: window.c:1997
DWORD WINAPI GetWindowContextHelpId(HWND hwnd)
Definition: window.c:1824
INT WINAPI ScrollWindowEx(HWND hWnd, int dx, int dy, CONST RECT *prcScroll, CONST RECT *prcClip, HRGN hrgnUpdate, LPRECT prcUpdate, UINT flags)
Definition: window.c:1936
HWND WINAPI FindWindowA(LPCSTR lpClassName, LPCSTR lpWindowName)
Definition: window.c:870
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1382
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
HWND WINAPI GetProgmanWindow(void)
Definition: input.c:992
HWND WINAPI GetTaskmanWindow(void)
Definition: input.c:1009
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
DWORD COLORREF
Definition: windef.h:300
CONST void * LPCVOID
Definition: windef.h:191
#define WINAPI
Definition: msvc.h:6
#define ERROR_INVALID_GW_COMMAND
Definition: winerror.h:924
#define ERROR_CANNOT_FIND_WND_CLASS
Definition: winerror.h:888
HWND WINAPI GetFocus(void)
Definition: window.c:1863
#define GW_OWNER
Definition: winuser.h:777
#define GW_HWNDFIRST
Definition: winuser.h:775
BOOL WINAPI IsWindow(_In_opt_ HWND)
HWND WINAPI GetActiveWindow(void)
Definition: winpos.c:138
#define SM_CXMINIMIZED
Definition: winuser.h:1031
#define WM_GETTEXTLENGTH
Definition: winuser.h:1638
#define SW_HIDE
Definition: winuser.h:779
#define GW_HWNDLAST
Definition: winuser.h:776
#define GetWindowLongPtrW
Definition: winuser.h:4848
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define SW_SCROLLCHILDREN
Definition: winuser.h:2597
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define SM_CYMINIMIZED
Definition: winuser.h:1032
#define SWP_NOMOVE
Definition: winuser.h:1255
#define SW_INVALIDATE
Definition: winuser.h:2598
#define IS_INTRESOURCE(i)
Definition: winuser.h:580
BOOL WINAPI SetForegroundWindow(_In_ HWND)
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define GA_PARENT
Definition: winuser.h:2807
#define GW_ENABLEDPOPUP
Definition: winuser.h:778
BOOL WINAPI GetClassInfoExA(_In_opt_ HINSTANCE, _In_ LPCSTR, _Out_ LPWNDCLASSEXA)
#define SWP_NOSIZE
Definition: winuser.h:1256
#define WM_GETTEXT
Definition: winuser.h:1637
BOOL WINAPI GetClassInfoExW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _Out_ LPWNDCLASSEXW)
#define MDIS_ALLCHILDSTYLES
Definition: winuser.h:253
#define GW_HWNDNEXT
Definition: winuser.h:772
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:628
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
#define WM_SETTEXT
Definition: winuser.h:1636
#define SW_SHOWMINIMIZED
Definition: winuser.h:782
#define HWND_TOP
Definition: winuser.h:1218
#define WS_EX_MDICHILD
Definition: winuser.h:394
#define SW_SHOWNA
Definition: winuser.h:789
_In_ int nMaxCount
Definition: winuser.h:4896
HWND WINAPI SetActiveWindow(_In_ HWND)
#define ULW_EX_NORESIZE
Definition: winuser.h:2806
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define CW_USEDEFAULT
Definition: winuser.h:225
#define SW_RESTORE
Definition: winuser.h:790
#define SW_ERASE
Definition: winuser.h:2599
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
#define GW_HWNDPREV
Definition: winuser.h:773
#define SW_SHOW
Definition: winuser.h:786
#define GW_CHILD
Definition: winuser.h:774
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
BOOL WINAPI AnyPopup(void)
Definition: window.c:1964
#define WS_ACTIVECAPTION
Definition: winuser.h:2678
#define GWL_STYLE
Definition: winuser.h:863
BOOL WINAPI IsWindowVisible(_In_ HWND)
BOOL(CALLBACK * WNDENUMPROC)(HWND, LPARAM)
Definition: winuser.h:2927
int WINAPI GetSystemMetrics(_In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_SETREDRAW
Definition: winuser.h:1635
HMENU WINAPI LoadMenuA(_In_opt_ HINSTANCE, _In_ LPCSTR)
static HDC hdcSrc
Definition: xlate.c:32
static HDC hdcDst
Definition: xlate.c:32
const char * LPCSTR
Definition: xmlstorage.h:183
char * LPSTR
Definition: xmlstorage.h:182
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185