ReactOS  0.4.15-dev-1207-g698a8e6
winpos.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _CVR
 
struct  _SMWP
 

Typedefs

typedef struct _CVR CVR
 
typedef struct _CVRPCVR
 
typedef struct _SMWP SMWP
 
typedef struct _SMWPPSMWP
 

Functions

FORCEINLINE BOOL IntPtInWindow (PWND pwnd, INT x, INT y)
 
FORCEINLINE BOOL IntEqualRect (RECTL *lprc1, RECTL *lprc2)
 
BOOL FASTCALL ActivateOtherWindowMin (PWND)
 
UINT FASTCALL co_WinPosArrangeIconicWindows (PWND parent)
 
BOOL FASTCALL IntGetClientOrigin (PWND Window, LPPOINT Point)
 
LRESULT FASTCALL co_WinPosGetNonClientSize (PWND Window, RECTL *WindowRect, RECTL *ClientRect)
 
UINT FASTCALL co_WinPosGetMinMaxInfo (PWND Window, POINT *MaxSize, POINT *MaxPos, POINT *MinTrack, POINT *MaxTrack)
 
UINT FASTCALL co_WinPosMinMaximize (PWND WindowObject, UINT ShowFlag, RECTL *NewPos)
 
BOOLEAN FASTCALL co_WinPosSetWindowPos (PWND Wnd, HWND WndInsertAfter, INT x, INT y, INT cx, INT cy, UINT flags)
 
BOOLEAN FASTCALL co_WinPosShowWindow (PWND Window, INT Cmd)
 
void FASTCALL co_WinPosSendSizeMove (PWND Window)
 
PWND APIENTRY co_WinPosWindowFromPoint (IN PWND ScopeWin, IN POINT *WinPoint, IN OUT USHORT *HitTest, IN BOOL Ignore)
 
VOID FASTCALL co_WinPosActivateOtherWindow (PWND)
 
PWND FASTCALL IntRealChildWindowFromPoint (PWND, LONG, LONG)
 
BOOL FASTCALL IntScreenToClient (PWND, LPPOINT)
 
BOOL FASTCALL IntClientToScreen (PWND, LPPOINT)
 
BOOL FASTCALL IntGetWindowRect (PWND, RECTL *)
 
BOOL UserHasWindowEdge (DWORD, DWORD)
 
VOID UserGetWindowBorders (DWORD, DWORD, SIZE *, BOOL)
 

Typedef Documentation

◆ CVR

typedef struct _CVR CVR

◆ PCVR

typedef struct _CVR * PCVR

◆ PSMWP

typedef struct _SMWP * PSMWP

◆ SMWP

typedef struct _SMWP SMWP

Function Documentation

◆ ActivateOtherWindowMin()

BOOL FASTCALL ActivateOtherWindowMin ( PWND  )

Definition at line 284 of file winpos.c.

285 {
286  BOOL ActivePrev, FindTopWnd;
287  PWND pWndTopMost, pWndChild, pWndSetActive, pWndTemp, pWndDesk;
289  PTHREADINFO pti = gptiCurrent;
290 
291  //ERR("AOWM 1 %p\n",Wnd->head.h);
292  ActivePrev = (pti->MessageQueue->spwndActivePrev != NULL);
293  FindTopWnd = TRUE;
294 
295  if ((pWndTopMost = IntGetLastTopMostWindow()))
296  pWndChild = pWndTopMost->spwndNext;
297  else
298  pWndChild = Wnd->spwndParent->spwndChild;
299 
300  for (;;)
301  {
302  if ( ActivePrev )
303  pWndSetActive = pti->MessageQueue->spwndActivePrev;
304  else
305  pWndSetActive = pWndChild;
306 
307  pWndTemp = NULL;
308 
309  while(pWndSetActive)
310  {
311  if ( VerifyWnd(pWndSetActive) &&
312  !(pWndSetActive->ExStyle & WS_EX_NOACTIVATE) &&
313  (pWndSetActive->style & (WS_VISIBLE|WS_DISABLED)) == WS_VISIBLE &&
314  (!(pWndSetActive->style & WS_ICONIC) /* FIXME MinMax pos? */ ) )
315  {
316  if (!(pWndSetActive->ExStyle & WS_EX_TOOLWINDOW) )
317  {
318  UserRefObjectCo(pWndSetActive, &Ref);
319  //ERR("ActivateOtherWindowMin Set FG 1\n");
320  co_IntSetForegroundWindow(pWndSetActive);
321  UserDerefObjectCo(pWndSetActive);
322  //ERR("AOWM 2 Exit Good %p\n",pWndSetActive->head.h);
323  return TRUE;
324  }
325  if (!pWndTemp ) pWndTemp = pWndSetActive;
326  }
327  if ( ActivePrev )
328  {
329  ActivePrev = FALSE;
330  pWndSetActive = pWndChild;
331  }
332  else
333  pWndSetActive = pWndSetActive->spwndNext;
334  }
335 
336  if ( !FindTopWnd ) break;
337  FindTopWnd = FALSE;
338 
339  if ( pWndChild )
340  {
341  pWndChild = pWndChild->spwndParent->spwndChild;
342  continue;
343  }
344 
345  if (!(pWndDesk = IntGetThreadDesktopWindow(pti)))
346  {
347  pWndChild = NULL;
348  continue;
349  }
350  pWndChild = pWndDesk->spwndChild;
351  }
352 
353  if ((pWndSetActive = pWndTemp))
354  {
355  UserRefObjectCo(pWndSetActive, &Ref);
356  //ERR("ActivateOtherWindowMin Set FG 2\n");
357  co_IntSetForegroundWindow(pWndSetActive);
358  UserDerefObjectCo(pWndSetActive);
359  //ERR("AOWM 3 Exit Good %p\n",pWndSetActive->head.h);
360  return TRUE;
361  }
362  //ERR("AOWM 4 Bad\n");
363  return FALSE;
364 }
#define WS_DISABLED
Definition: pedump.c:621
DWORD ExStyle
Definition: ntuser.h:668
#define TRUE
Definition: types.h:120
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
Definition: object.h:25
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
static __inline VOID UserDerefObjectCo(PVOID obj)
Definition: object.h:38
Definition: object.h:3
smooth NULL
Definition: ftsmooth.c:416
PTHREADINFO gptiCurrent
Definition: ntuser.c:15
#define WS_EX_NOACTIVATE
Definition: winuser.h:395
struct _WND * spwndNext
Definition: ntuser.h:675
PWND FASTCALL IntGetLastTopMostWindow(VOID)
Definition: winpos.c:237
#define WS_ICONIC
Definition: pedump.c:641
#define for
Definition: utility.h:88
Definition: ntuser.h:657
struct _USER_MESSAGE_QUEUE * MessageQueue
Definition: win32.h:88
struct _WND * spwndParent
Definition: ntuser.h:677
PWND FASTCALL VerifyWnd(PWND pWnd)
Definition: window.c:64
BOOL FASTCALL co_IntSetForegroundWindow(PWND Window)
Definition: focus.c:1432
struct _WND * spwndChild
Definition: ntuser.h:678
#define WS_VISIBLE
Definition: pedump.c:620
PWND FASTCALL IntGetThreadDesktopWindow(PTHREADINFO pti)
Definition: desktop.c:1323
DWORD style
Definition: ntuser.h:670

Referenced by co_WinPosShowWindow(), and UserSetActiveWindow().

◆ co_WinPosActivateOtherWindow()

VOID FASTCALL co_WinPosActivateOtherWindow ( PWND  )

Definition at line 395 of file winpos.c.

396 {
397  PWND WndTo = NULL;
399 
400  ASSERT_REFS_CO(Wnd);
401 
402  if (IntIsDesktopWindow(Wnd))
403  {
404  //ERR("WinPosActivateOtherWindow Set Focus Msg Q No window!\n");
406  return;
407  }
408 
409  /* If this is popup window, try to activate the owner first. */
410  if ((Wnd->style & WS_POPUP) && (WndTo = Wnd->spwndOwner))
411  {
412  TRACE("WPAOW Popup with Owner\n");
413  WndTo = UserGetAncestor( WndTo, GA_ROOT );
414  if (can_activate_window(WndTo)) goto done;
415  }
416 
417  /* Pick a next top-level window. */
418  /* FIXME: Search for non-tooltip windows first. */
419  WndTo = Wnd;
420  for (;;)
421  {
422  if (!(WndTo = WndTo->spwndNext)) break;
423  if (can_activate_window( WndTo )) goto done;
424  }
425 
426  /*
427  Fixes wine win.c:test_SetParent last ShowWindow test after popup dies.
428  Check for previous active window to bring to top.
429  */
430  if (Wnd)
431  {
432  WndTo = Wnd->head.pti->MessageQueue->spwndActivePrev;
433  if (can_activate_window( WndTo )) goto done;
434  }
435 
436  // Find any window to bring to top. Works Okay for wine since it does not see X11 windows.
437  WndTo = UserGetDesktopWindow();
438  WndTo = WndTo->spwndChild;
439  if ( WndTo == NULL )
440  {
441  //ERR("WinPosActivateOtherWindow No window!\n");
442  return;
443  }
444  for (;;)
445  {
446  if (WndTo == Wnd)
447  {
448  WndTo = NULL;
449  break;
450  }
451  if (can_activate_window( WndTo )) goto done;
452  if (!(WndTo = WndTo->spwndNext)) break;
453  }
454 
455 done:
456  if (WndTo) UserRefObjectCo(WndTo, &Ref);
457 
459  {
460  /* ReactOS can pass WndTo = NULL to co_IntSetForegroundWindow and returns FALSE. */
461  //ERR("WinPosActivateOtherWindow Set FG 0x%p hWnd %p\n",WndTo, WndTo ? WndTo->head.h : 0);
462  if (co_IntSetForegroundWindow(WndTo))
463  {
464  if (WndTo) UserDerefObjectCo(WndTo);
465  return;
466  }
467  }
468  //ERR("WinPosActivateOtherWindow Set Active 0x%p\n",WndTo);
469  if (!UserSetActiveWindow(WndTo)) /* Ok for WndTo to be NULL here */
470  {
471  //ERR("WPAOW SA 1\n");
473  }
474  if (WndTo) UserDerefObjectCo(WndTo);
475 }
PUSER_MESSAGE_QUEUE gpqForeground
Definition: focus.c:12
#define GA_ROOT
Definition: winuser.h:2764
#define ASSERT_REFS_CO(_obj_)
Definition: userfuncs.h:13
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
Definition: object.h:25
BOOL FASTCALL UserSetActiveWindow(_In_opt_ PWND Wnd)
Definition: focus.c:1143
static __inline VOID UserDerefObjectCo(PVOID obj)
Definition: object.h:38
THRDESKHEAD head
Definition: ntuser.h:659
Definition: object.h:3
smooth NULL
Definition: ftsmooth.c:416
struct _WND * spwndNext
Definition: ntuser.h:675
#define TRACE(s)
Definition: solgame.cpp:4
PWND FASTCALL UserGetDesktopWindow(VOID)
Definition: desktop.c:1349
PWND FASTCALL UserGetAncestor(PWND Wnd, UINT Type)
Definition: window.c:3079
Definition: ntuser.h:657
VOID FASTCALL IntSetFocusMessageQueue(PUSER_MESSAGE_QUEUE NewQueue)
Definition: desktop.c:1283
#define IntIsDesktopWindow(WndObj)
Definition: window.h:24
#define WS_POPUP
Definition: pedump.c:616
BOOL FASTCALL co_IntSetForegroundWindow(PWND Window)
Definition: focus.c:1432
static BOOL FASTCALL can_activate_window(PWND Wnd OPTIONAL)
Definition: winpos.c:372
struct _WND * spwndChild
Definition: ntuser.h:678

Referenced by co_WinPosShowWindow(), IntSendDestroyMsg(), and UserSetActiveWindow().

◆ co_WinPosArrangeIconicWindows()

UINT FASTCALL co_WinPosArrangeIconicWindows ( PWND  parent)

Definition at line 728 of file winpos.c.

729 {
730  RECTL rectParent;
731  PWND Child;
732  INT x, y, xspacing, yspacing, sx, sy;
733 
735 
736  IntGetClientRect( parent, &rectParent );
737  // FIXME: Support Minimize Metrics gspv.mm.iArrange.
738  // Default: ARW_BOTTOMLEFT
739  x = rectParent.left;
740  y = rectParent.bottom;
741 
744 
745  Child = parent->spwndChild;
746  while(Child)
747  {
748  if((Child->style & WS_MINIMIZE) != 0 )
749  {
751  UserRefObjectCo(Child, &Ref);
752 
754  sy = y - yspacing - UserGetSystemMetrics(SM_CYBORDER);
755 
756  Child->InternalPos.IconPos.x = sx;
757  Child->InternalPos.IconPos.y = sy;
758  Child->InternalPos.flags |= WPF_MININIT;
759 
761 
763 
764  if (x <= rectParent.right - xspacing)
765  x += xspacing;
766  else
767  {
768  x = rectParent.left;
769  y -= yspacing;
770  }
771  }
772  Child = Child->spwndNext;
773  }
774  return yspacing;
775 }
#define SM_CXMINIMIZED
Definition: winuser.h:1010
#define ASSERT_REFS_CO(_obj_)
Definition: userfuncs.h:13
BOOLEAN FASTCALL co_WinPosSetWindowPos(PWND Window, HWND WndInsertAfter, INT x, INT y, INT cx, INT cy, UINT flags)
Definition: winpos.c:1720
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
Definition: object.h:25
long bottom
Definition: polytest.cpp:53
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
#define SWP_NOZORDER
Definition: winuser.h:1232
int32_t INT
Definition: typedefs.h:58
#define SWP_NOCOPYBITS
Definition: winuser.h:1228
long right
Definition: polytest.cpp:53
#define WS_MINIMIZE
Definition: pedump.c:622
static __inline VOID UserDerefObjectCo(PVOID obj)
Definition: object.h:38
Definition: object.h:3
#define SWP_ASYNCWINDOWPOS
Definition: winuser.h:1238
long left
Definition: polytest.cpp:53
LONG NTAPI UserGetSystemMetrics(ULONG Index)
Definition: metric.c:180
r parent
Definition: btrfs.c:2944
#define SWP_NOACTIVATE
Definition: winuser.h:1227
#define SM_CYBORDER
Definition: winuser.h:955
#define WPF_MININIT
Definition: ntuser.h:654
#define SM_CYMINIMIZED
Definition: winuser.h:1011
#define SM_CXBORDER
Definition: winuser.h:954
Definition: ntuser.h:657
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn BOOLEAN Physical UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE ACPI_HANDLE Child
Definition: acpixf.h:728
VOID FASTCALL IntGetClientRect(PWND Wnd, RECTL *Rect)
Definition: winpos.c:91

Referenced by NtUserCallHwndLock().

◆ co_WinPosGetMinMaxInfo()

UINT FASTCALL co_WinPosGetMinMaxInfo ( PWND  Window,
POINT MaxSize,
POINT MaxPos,
POINT MinTrack,
POINT MaxTrack 
)

Definition at line 931 of file winpos.c.

933 {
934  MINMAXINFO MinMax;
935  PMONITOR monitor;
936  INT xinc, yinc;
937  LONG style = Window->style;
938  LONG adjustedStyle;
939  LONG exstyle = Window->ExStyle;
940  RECT rc;
941  DWORD adjust;
942 
944 
945  /* Compute default values */
946 
947  rc = Window->rcWindow;
948  MinMax.ptReserved.x = rc.left;
949  MinMax.ptReserved.y = rc.top;
950 
951  if ((style & WS_CAPTION) == WS_CAPTION)
952  adjustedStyle = style & ~WS_BORDER; /* WS_CAPTION = WS_DLGFRAME | WS_BORDER */
953  else
954  adjustedStyle = style;
955 
956  if (Window->spwndParent)
957  IntGetClientRect(Window->spwndParent, &rc);
958 
959  adjust = IntGetWindowBorders(adjustedStyle, exstyle);
960 
961  // Handle special case while maximized. CORE-15893
962  if ((adjustedStyle & WS_THICKFRAME) && !(adjustedStyle & WS_CHILD) && !(adjustedStyle & WS_MINIMIZE))
963  adjust += 1;
964 
965  xinc = yinc = adjust;
966 
967  if ((adjustedStyle & WS_THICKFRAME) && (adjustedStyle & WS_CHILD) && !(adjustedStyle & WS_MINIMIZE))
968  {
971  }
972 
973  RECTL_vInflateRect( &rc,
976 
977  xinc = -rc.left;
978  yinc = -rc.top;
979 
980  MinMax.ptMaxSize.x = rc.right - rc.left;
981  MinMax.ptMaxSize.y = rc.bottom - rc.top;
982  if (style & (WS_DLGFRAME | WS_BORDER))
983  {
986  }
987  else
988  {
989  MinMax.ptMinTrackSize.x = 2 * xinc;
990  MinMax.ptMinTrackSize.y = 2 * yinc;
991  }
994  MinMax.ptMaxPosition.x = -xinc;
995  MinMax.ptMaxPosition.y = -yinc;
996 
997  if (!EMPTYPOINT(Window->InternalPos.MaxPos)) MinMax.ptMaxPosition = Window->InternalPos.MaxPos;
998 
999  co_IntSendMessage(Window->head.h, WM_GETMINMAXINFO, 0, (LPARAM)&MinMax);
1000 
1001  /* if the app didn't change the values, adapt them for the current monitor */
1002  if ((monitor = UserGetPrimaryMonitor()))
1003  {
1004  RECT rc_work;
1005 
1006  rc_work = monitor->rcMonitor;
1007 
1008  if (style & WS_MAXIMIZEBOX)
1009  {
1010  if ((style & WS_CAPTION) == WS_CAPTION || !(style & (WS_CHILD | WS_POPUP)))
1011  rc_work = monitor->rcWork;
1012  }
1013 
1014  if (MinMax.ptMaxSize.x == UserGetSystemMetrics(SM_CXSCREEN) + 2 * xinc &&
1015  MinMax.ptMaxSize.y == UserGetSystemMetrics(SM_CYSCREEN) + 2 * yinc)
1016  {
1017  MinMax.ptMaxSize.x = (rc_work.right - rc_work.left) + 2 * xinc;
1018  MinMax.ptMaxSize.y = (rc_work.bottom - rc_work.top) + 2 * yinc;
1019  }
1020  if (MinMax.ptMaxPosition.x == -xinc && MinMax.ptMaxPosition.y == -yinc)
1021  {
1022  MinMax.ptMaxPosition.x = rc_work.left - xinc;
1023  MinMax.ptMaxPosition.y = rc_work.top - yinc;
1024  }
1025  if (MinMax.ptMaxSize.x >= (monitor->rcMonitor.right - monitor->rcMonitor.left) &&
1026  MinMax.ptMaxSize.y >= (monitor->rcMonitor.bottom - monitor->rcMonitor.top) )
1027  {
1028  Window->state |= WNDS_MAXIMIZESTOMONITOR;
1029  }
1030  else
1031  Window->state &= ~WNDS_MAXIMIZESTOMONITOR;
1032  }
1033 
1034 
1035  MinMax.ptMaxTrackSize.x = max(MinMax.ptMaxTrackSize.x,
1036  MinMax.ptMinTrackSize.x);
1037  MinMax.ptMaxTrackSize.y = max(MinMax.ptMaxTrackSize.y,
1038  MinMax.ptMinTrackSize.y);
1039 
1040  if (MaxSize)
1041  *MaxSize = MinMax.ptMaxSize;
1042  if (MaxPos)
1043  *MaxPos = MinMax.ptMaxPosition;
1044  if (MinTrack)
1045  *MinTrack = MinMax.ptMinTrackSize;
1046  if (MaxTrack)
1047  *MaxTrack = MinMax.ptMaxTrackSize;
1048 
1049  return 0; // FIXME: What does it return? Wine returns MINMAXINFO.
1050 }
POINT ptMinTrackSize
Definition: winuser.h:3605
#define WS_THICKFRAME
Definition: pedump.c:630
#define max(a, b)
Definition: svc.c:63
long y
Definition: polytest.cpp:48
POINT ptReserved
Definition: winuser.h:3602
POINT ptMaxSize
Definition: winuser.h:3603
#define SM_CYMINTRACK
Definition: winuser.h:988
long x
Definition: polytest.cpp:48
VOID FASTCALL RECTL_vInflateRect(_Inout_ RECTL *rect, _In_ INT dx, _In_ INT dy)
Definition: rect.c:101
#define ASSERT_REFS_CO(_obj_)
Definition: userfuncs.h:13
DWORD IntGetWindowBorders(DWORD Style, DWORD ExStyle)
Definition: winpos.c:912
LONG top
Definition: windef.h:307
#define WS_DLGFRAME
Definition: pedump.c:626
#define WS_CHILD
Definition: pedump.c:617
#define SM_CYMAXTRACK
Definition: winuser.h:1013
LONG left
Definition: windef.h:306
#define SM_CYFRAME
Definition: winuser.h:986
#define SM_CXFRAME
Definition: winuser.h:984
LONG right
Definition: windef.h:308
int32_t INT
Definition: typedefs.h:58
RECT rcWork
Definition: monitor.h:19
#define EMPTYPOINT(pt)
Definition: winpos.c:28
#define SM_CXSCREEN
Definition: winuser.h:949
Definition: window.c:28
#define WS_MINIMIZE
Definition: pedump.c:622
long LONG
Definition: pedump.c:60
#define SM_CYDLGFRAME
Definition: winuser.h:958
LONG_PTR LPARAM
Definition: windef.h:208
#define WS_MAXIMIZEBOX
Definition: pedump.c:632
LONG NTAPI UserGetSystemMetrics(ULONG Index)
Definition: metric.c:180
#define WS_CAPTION
Definition: pedump.c:624
#define SM_CYSCREEN
Definition: winuser.h:950
#define SM_CXDLGFRAME
Definition: winuser.h:956
#define SM_CXMINTRACK
Definition: winuser.h:987
unsigned long DWORD
Definition: ntddk_ex.h:95
POINT ptMaxPosition
Definition: winuser.h:3604
#define SM_CYBORDER
Definition: winuser.h:955
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1446
#define SM_CXBORDER
Definition: winuser.h:954
#define WS_BORDER
Definition: pedump.c:625
#define WS_POPUP
Definition: pedump.c:616
#define WNDS_MAXIMIZESTOMONITOR
Definition: ntuser.h:603
PMONITOR NTAPI UserGetPrimaryMonitor(VOID)
Definition: monitor.c:102
#define SM_CXMAXTRACK
Definition: winuser.h:1012
RECT rcMonitor
Definition: monitor.h:18
LONG bottom
Definition: windef.h:309
POINT ptMaxTrackSize
Definition: winuser.h:3606
Arabic default style
Definition: afstyles.h:93
VOID FASTCALL IntGetClientRect(PWND Wnd, RECTL *Rect)
Definition: winpos.c:91
#define WM_GETMINMAXINFO
Definition: winuser.h:1622

Referenced by co_UserCreateWindowEx(), co_WinPosMinMaximize(), DefWndDoSizeMove(), and DefWndHandleWindowPosChanging().

◆ co_WinPosGetNonClientSize()

LRESULT FASTCALL co_WinPosGetNonClientSize ( PWND  Window,
RECTL WindowRect,
RECTL ClientRect 
)

◆ co_WinPosMinMaximize()

UINT FASTCALL co_WinPosMinMaximize ( PWND  WindowObject,
UINT  ShowFlag,
RECTL NewPos 
)

◆ co_WinPosSendSizeMove()

void FASTCALL co_WinPosSendSizeMove ( PWND  Window)

Definition at line 2295 of file winpos.c.

2296 {
2297  RECTL Rect;
2298  LPARAM lParam;
2300 
2301  IntGetClientRect(Wnd, &Rect);
2302  lParam = MAKELONG(Rect.right-Rect.left, Rect.bottom-Rect.top);
2303 
2304  Wnd->state &= ~WNDS_SENDSIZEMOVEMSGS;
2305 
2306  if (Wnd->style & WS_MAXIMIZE)
2307  {
2309  }
2310  else if (Wnd->style & WS_MINIMIZE)
2311  {
2313  lParam = 0;
2314  }
2315 
2317 
2318  if (UserIsDesktopWindow(Wnd->spwndParent))
2319  lParam = MAKELONG(Wnd->rcClient.left, Wnd->rcClient.top);
2320  else
2321  lParam = MAKELONG(Wnd->rcClient.left-Wnd->spwndParent->rcClient.left, Wnd->rcClient.top-Wnd->spwndParent->rcClient.top);
2322 
2324 
2326 }
#define UserIsDesktopWindow(pWnd)
Definition: desktop.h:220
#define SIZE_MAXIMIZED
Definition: winuser.h:2482
#define SIZE_RESTORED
Definition: winuser.h:2480
#define WM_MOVE
Definition: winuser.h:1592
UINT_PTR WPARAM
Definition: windef.h:207
#define WNDS_SENDSIZEMOVEMSGS
Definition: ntuser.h:577
WPARAM wParam
Definition: combotst.c:138
#define WS_MINIMIZE
Definition: pedump.c:622
#define MAKELONG(a, b)
Definition: typedefs.h:249
LONG_PTR LPARAM
Definition: windef.h:208
#define WOC_RGN_CLIENT
Definition: winddi.h:1265
#define UserHMGetHandle(obj)
Definition: ntuser.h:208
#define WM_SIZE
Definition: winuser.h:1593
#define SIZE_MINIMIZED
Definition: winuser.h:2481
LRESULT FASTCALL co_IntSendMessageNoWait(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1710
VOID FASTCALL IntEngWindowChanged(_In_ struct _WND *Window, _In_ FLONG flChanged)
VOID FASTCALL IntGetClientRect(PWND Wnd, RECTL *Rect)
Definition: winpos.c:91
LPARAM lParam
Definition: combotst.c:139
struct Rect Rect
#define WS_MAXIMIZE
Definition: pedump.c:623

Referenced by co_UserCreateWindowEx(), and co_WinPosShowWindow().

◆ co_WinPosSetWindowPos()

BOOLEAN FASTCALL co_WinPosSetWindowPos ( PWND  Wnd,
HWND  WndInsertAfter,
INT  x,
INT  y,
INT  cx,
INT  cy,
UINT  flags 
)

Definition at line 1720 of file winpos.c.

1729 {
1730  WINDOWPOS WinPos;
1731  RECTL NewWindowRect;
1732  RECTL NewClientRect;
1733  RECTL valid_rects[2];
1734  PREGION VisBefore = NULL;
1735  PREGION VisBeforeJustClient = NULL;
1736  PREGION VisAfter = NULL;
1737  PREGION CopyRgn = NULL;
1738  ULONG WvrFlags = 0;
1739  RECTL OldWindowRect, OldClientRect;
1740  int RgnType;
1741  HDC Dc;
1742  RECTL CopyRect;
1743  PWND Ancestor;
1744  BOOL bPointerInWindow, PosChanged = FALSE;
1746 
1748 
1749  TRACE("pwnd %p, after %p, %d,%d (%dx%d), flags 0x%x",
1750  Window, WndInsertAfter, x, y, cx, cy, flags);
1751 #if DBG
1752  dump_winpos_flags(flags);
1753 #endif
1754 
1755  /* FIXME: Get current active window from active queue. Why? since r2915. */
1756 
1757  bPointerInWindow = IntPtInWindow(Window, gpsi->ptCursor.x, gpsi->ptCursor.y);
1758 
1759  WinPos.hwnd = Window->head.h;
1760  WinPos.hwndInsertAfter = WndInsertAfter;
1761  WinPos.x = x;
1762  WinPos.y = y;
1763  WinPos.cx = cx;
1764  WinPos.cy = cy;
1765  WinPos.flags = flags;
1766 
1767  if ( flags & SWP_ASYNCWINDOWPOS )
1768  {
1769  LRESULT lRes;
1771  if ( ppos )
1772  {
1773  WinPos.flags &= ~SWP_ASYNCWINDOWPOS; // Clear flag.
1774  *ppos = WinPos;
1775  /* Yes it's a pointer inside Win32k! */
1776  lRes = co_IntSendMessageNoWait( WinPos.hwnd, WM_ASYNC_SETWINDOWPOS, 0, (LPARAM)ppos);
1777  /* We handle this the same way as Event Hooks and Hooks. */
1778  if ( !lRes )
1779  {
1781  return FALSE;
1782  }
1783  return TRUE;
1784  }
1785  return FALSE;
1786  }
1787 
1788  co_WinPosDoWinPosChanging(Window, &WinPos, &NewWindowRect, &NewClientRect);
1789 
1790  /* Does the window still exist? */
1791  if (!IntIsWindow(WinPos.hwnd))
1792  {
1793  TRACE("WinPosSetWindowPos: Invalid handle 0x%p!\n",WinPos.hwnd);
1795  return FALSE;
1796  }
1797 
1798  /* Fix up the flags. */
1799  if (!WinPosFixupFlags(&WinPos, Window))
1800  {
1801  // See Note.
1802  return TRUE;
1803  }
1804 
1805  Ancestor = UserGetAncestor(Window, GA_PARENT);
1806  if ( (WinPos.flags & (SWP_NOZORDER | SWP_HIDEWINDOW | SWP_SHOWWINDOW)) != SWP_NOZORDER &&
1807  Ancestor && Ancestor->head.h == IntGetDesktopWindow() )
1808  {
1810  }
1811 
1812  if (!(WinPos.flags & SWP_NOREDRAW))
1813  {
1814  /* Compute the visible region before the window position is changed */
1815  if (!(WinPos.flags & SWP_SHOWWINDOW) &&
1816  (WinPos.flags & (SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
1819  {
1821  (Window->style & WS_CLIPSIBLINGS) ? TRUE : FALSE);
1822 
1823  if ( VisBefore != NULL &&
1824  REGION_Complexity(VisBefore) == NULLREGION )
1825  {
1826  REGION_Delete(VisBefore);
1827  VisBefore = NULL;
1828  }
1829  else if(VisBefore)
1830  {
1831  REGION_bOffsetRgn(VisBefore, -Window->rcWindow.left, -Window->rcWindow.top);
1832  }
1833 
1834  /* Calculate the non client area for resizes, as this is used in the copy region */
1835  if ((WinPos.flags & (SWP_NOSIZE | SWP_FRAMECHANGED)) != SWP_NOSIZE)
1836  {
1837  VisBeforeJustClient = VIS_ComputeVisibleRegion(Window, TRUE, FALSE,
1838  (Window->style & WS_CLIPSIBLINGS) ? TRUE : FALSE);
1839 
1840  if ( VisBeforeJustClient != NULL &&
1841  REGION_Complexity(VisBeforeJustClient) == NULLREGION )
1842  {
1843  REGION_Delete(VisBeforeJustClient);
1844  VisBeforeJustClient = NULL;
1845  }
1846  else if(VisBeforeJustClient)
1847  {
1848  REGION_bOffsetRgn(VisBeforeJustClient, -Window->rcWindow.left, -Window->rcWindow.top);
1849  }
1850  }
1851  }
1852  }
1853 
1855  if (Window->hrgnNewFrame)
1856  {
1857  SelectWindowRgn( Window, Window->hrgnNewFrame ); // Should be PSMWP->acvr->hrgnClip
1858  Window->hrgnNewFrame = NULL;
1859  }
1860 
1861  WvrFlags = co_WinPosDoNCCALCSize(Window, &WinPos, &NewWindowRect, &NewClientRect, valid_rects);
1862 
1863 // ERR("co_WinPosDoNCCALCSize returned 0x%x\n valid dest: %d %d %d %d\n valid src : %d %d %d %d\n", WvrFlags,
1864 // valid_rects[0].left,valid_rects[0].top,valid_rects[0].right,valid_rects[0].bottom,
1865 // valid_rects[1].left,valid_rects[1].top,valid_rects[1].right,valid_rects[1].bottom);
1866 
1867  /* Validate link windows. (also take into account shell window in hwndShellWindow) */
1868  if (!(WinPos.flags & SWP_NOZORDER) && WinPos.hwnd != UserGetShellWindow())
1869  {
1871  }
1872 
1873  OldWindowRect = Window->rcWindow;
1874  OldClientRect = Window->rcClient;
1875 
1876  if (NewClientRect.left != OldClientRect.left ||
1877  NewClientRect.top != OldClientRect.top)
1878  {
1879  // Move child window if their parent is moved. Keep Child window relative to Parent...
1881  NewClientRect.left - OldClientRect.left,
1882  NewClientRect.top - OldClientRect.top);
1883  PosChanged = TRUE;
1884  }
1885 
1886  Window->rcWindow = NewWindowRect;
1887  Window->rcClient = NewClientRect;
1888 
1889  /* erase parent when hiding or resizing child */
1890  if (WinPos.flags & SWP_HIDEWINDOW)
1891  {
1892  /* Clear the update region */
1894  NULL,
1895  0,
1897 
1898  if (UserIsDesktopWindow(Window->spwndParent))
1900 
1901  Window->style &= ~WS_VISIBLE; //IntSetStyle( Window, 0, WS_VISIBLE );
1902  Window->head.pti->cVisWindows--;
1904  }
1905  else if (WinPos.flags & SWP_SHOWWINDOW)
1906  {
1907  if ((Window->ExStyle & WS_EX_APPWINDOW) ||
1908  (!(Window->ExStyle & WS_EX_TOOLWINDOW) && !Window->spwndOwner &&
1909  (!Window->spwndParent || UserIsDesktopWindow(Window->spwndParent))))
1910  {
1912  if (!(WinPos.flags & SWP_NOACTIVATE))
1914  }
1915 
1916  Window->style |= WS_VISIBLE; //IntSetStyle( Window, WS_VISIBLE, 0 );
1917  Window->head.pti->cVisWindows++;
1919  }
1920 
1921  if (Window->hrgnUpdate != NULL && Window->hrgnUpdate != HRGN_WINDOW)
1922  {
1923  NtGdiOffsetRgn(Window->hrgnUpdate,
1924  NewWindowRect.left - OldWindowRect.left,
1925  NewWindowRect.top - OldWindowRect.top);
1926  }
1927 
1928  DceResetActiveDCEs(Window); // For WS_VISIBLE changes.
1929 
1930  // Change or update, set send non-client paint flag.
1931  if ( Window->style & WS_VISIBLE &&
1932  (WinPos.flags & SWP_STATECHANGED || (!(Window->state2 & WNDS2_WIN31COMPAT) && WinPos.flags & SWP_NOREDRAW ) ) )
1933  {
1934  TRACE("Set WNDS_SENDNCPAINT %p\n",Window);
1935  Window->state |= WNDS_SENDNCPAINT;
1936  }
1937 
1938  if (!(WinPos.flags & SWP_NOREDRAW))
1939  {
1940  /* Determine the new visible region */
1942  (Window->style & WS_CLIPSIBLINGS) ? TRUE : FALSE);
1943 
1944  if ( VisAfter != NULL &&
1945  REGION_Complexity(VisAfter) == NULLREGION )
1946  {
1947  REGION_Delete(VisAfter);
1948  VisAfter = NULL;
1949  }
1950  else if(VisAfter)
1951  {
1952  REGION_bOffsetRgn(VisAfter, -Window->rcWindow.left, -Window->rcWindow.top);
1953  }
1954 
1955  /*
1956  * Determine which pixels can be copied from the old window position
1957  * to the new. Those pixels must be visible in both the old and new
1958  * position. Also, check the class style to see if the windows of this
1959  * class need to be completely repainted on (horizontal/vertical) size
1960  * change.
1961  */
1962  if ( ( VisBefore != NULL &&
1963  VisAfter != NULL &&
1964  !(WinPos.flags & SWP_NOCOPYBITS) &&
1965  ((WinPos.flags & SWP_NOSIZE) || !(WvrFlags & WVR_REDRAW)) &&
1966  !(Window->ExStyle & WS_EX_TRANSPARENT) ) )
1967  {
1968 
1969  /*
1970  * If this is (also) a window resize, the whole nonclient area
1971  * needs to be repainted. So we limit the copy to the client area,
1972  * 'cause there is no use in copying it (would possibly cause
1973  * "flashing" too). However, if the copy region is already empty,
1974  * we don't have to crop (can't take anything away from an empty
1975  * region...)
1976  */
1977 
1978  CopyRgn = IntSysCreateRectpRgn(0, 0, 0, 0);
1979  if ((WinPos.flags & SWP_NOSIZE) && (WinPos.flags & SWP_NOCLIENTSIZE))
1980  RgnType = IntGdiCombineRgn(CopyRgn, VisAfter, VisBefore, RGN_AND);
1981  else if (VisBeforeJustClient != NULL)
1982  {
1983  RgnType = IntGdiCombineRgn(CopyRgn, VisAfter, VisBeforeJustClient, RGN_AND);
1984  }
1985 
1986  if (VisBeforeJustClient != NULL)
1987  {
1988  REGION_Delete(VisBeforeJustClient);
1989  }
1990 
1991  /* Now use in copying bits which are in the update region. */
1992  if (Window->hrgnUpdate != NULL)
1993  {
1994  PREGION RgnUpdate = REGION_LockRgn(Window->hrgnUpdate);
1995  if (RgnUpdate)
1996  {
1997  REGION_bOffsetRgn(CopyRgn, NewWindowRect.left, NewWindowRect.top);
1998  IntGdiCombineRgn(CopyRgn, CopyRgn, RgnUpdate, RGN_DIFF);
1999  REGION_bOffsetRgn(CopyRgn, -NewWindowRect.left, -NewWindowRect.top);
2000  REGION_UnlockRgn(RgnUpdate);
2001  }
2002  }
2003 
2004  /*
2005  * Now, get the bounding box of the copy region. If it's empty
2006  * there's nothing to copy. Also, it's no use copying bits onto
2007  * themselves.
2008  */
2010  {
2011  /* Nothing to copy, clean up */
2013  CopyRgn = NULL;
2014  }
2015  else if ( OldWindowRect.left != NewWindowRect.left ||
2016  OldWindowRect.top != NewWindowRect.top ||
2017  (WinPos.flags & SWP_FRAMECHANGED) )
2018  {
2019  HRGN DcRgn = NtGdiCreateRectRgn(0, 0, 0, 0);
2020  PREGION DcRgnObj = REGION_LockRgn(DcRgn);
2021 
2022  /*
2023  * Small trick here: there is no function to bitblt a region. So
2024  * we set the region as the clipping region, take the bounding box
2025  * of the region and bitblt that. Since nothing outside the clipping
2026  * region is copied, this has the effect of bitblt'ing the region.
2027  *
2028  * Since NtUserGetDCEx takes ownership of the clip region, we need
2029  * to create a copy of CopyRgn and pass that. We need CopyRgn later
2030  */
2031  IntGdiCombineRgn(DcRgnObj, CopyRgn, NULL, RGN_COPY);
2032  REGION_bOffsetRgn(DcRgnObj, NewWindowRect.left, NewWindowRect.top);
2033  REGION_UnlockRgn(DcRgnObj);
2034  Dc = UserGetDCEx( Window,
2035  DcRgn,
2036  DCX_WINDOW|DCX_CACHE|DCX_INTERSECTRGN|DCX_CLIPSIBLINGS|DCX_KEEPCLIPRGN); // DCX_WINDOW will set first, go read WinDC.c.
2037  NtGdiBitBlt( Dc,
2038  CopyRect.left, CopyRect.top,
2039  CopyRect.right - CopyRect.left,
2040  CopyRect.bottom - CopyRect.top,
2041  Dc,
2042  CopyRect.left + (OldWindowRect.left - NewWindowRect.left),
2043  CopyRect.top + (OldWindowRect.top - NewWindowRect.top),
2044  SRCCOPY,
2045  0,
2046  0);
2047 
2048  UserReleaseDC(Window, Dc, FALSE);
2050  GreDeleteObject(DcRgn);
2051  }
2052  }
2053  else
2054  {
2055  CopyRgn = NULL;
2056  }
2057 
2058  /* We need to redraw what wasn't visible before or force a redraw */
2059  if (VisAfter != NULL)
2060  {
2061  PREGION DirtyRgn = IntSysCreateRectpRgn(0, 0, 0, 0);
2062  if (DirtyRgn)
2063  {
2064  if (CopyRgn != NULL)
2065  {
2066  RgnType = IntGdiCombineRgn(DirtyRgn, VisAfter, CopyRgn, RGN_DIFF);
2067  }
2068  else
2069  {
2070  RgnType = IntGdiCombineRgn(DirtyRgn, VisAfter, 0, RGN_COPY);
2071  }
2072 
2073  if (RgnType != ERROR && RgnType != NULLREGION) // Regions moved.
2074  {
2075  /* old code
2076  NtGdiOffsetRgn(DirtyRgn, Window->rcWindow.left, Window->rcWindow.top);
2077  IntInvalidateWindows( Window,
2078  DirtyRgn,
2079  RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
2080  }
2081  GreDeleteObject(DirtyRgn);
2082  */
2083 
2084  PWND Parent = Window->spwndParent;
2085 
2086  REGION_bOffsetRgn( DirtyRgn, Window->rcWindow.left, Window->rcWindow.top);
2087 
2088  if ( (Window->style & WS_CHILD) && (Parent) && !(Parent->style & WS_CLIPCHILDREN))
2089  {
2092  }
2093  else
2094  {
2096  }
2097  }
2098  else if ( RgnType != ERROR && RgnType == NULLREGION ) // Must be the same. See CORE-7166 & CORE-15934, NC HACK fix.
2099  {
2100  if ( !PosChanged &&
2101  !(WinPos.flags & SWP_DEFERERASE) &&
2102  (WinPos.flags & SWP_FRAMECHANGED) )
2103  {
2104  PWND pwnd = Window;
2105  PWND Parent = Window->spwndParent;
2106 
2107  if ( pwnd->style & WS_CHILD ) // Fix ProgMan menu bar drawing.
2108  {
2109  TRACE("SWP_FRAMECHANGED win child %p Parent %p\n",pwnd,Parent);
2110  pwnd = Parent ? Parent : pwnd;
2111  }
2112 
2113  if ( !(pwnd->style & WS_CHILD) )
2114  {
2115  /*
2116  * Check if we have these specific windows style bits set/reset.
2117  * FIXME: There may be other combinations of styles that need this handling as well.
2118  * This fixes the ReactOS Calculator buttons disappearing in CORE-16827.
2119  */
2120  if ((Window->style & WS_CLIPSIBLINGS) && !(Window->style & (WS_POPUP | WS_CLIPCHILDREN | WS_SIZEBOX)))
2121  {
2122  IntSendNCPaint(pwnd, HRGN_WINDOW); // Paint the whole frame.
2123  }
2124  else // Use region handling
2125  {
2126  HRGN DcRgn = NtGdiCreateRectRgn(0, 0, 0, 0);
2127  PREGION DcRgnObj = REGION_LockRgn(DcRgn);
2128  TRACE("SWP_FRAMECHANGED win %p hRgn %p\n",pwnd, DcRgn);
2129  IntGdiCombineRgn(DcRgnObj, VisBefore, NULL, RGN_COPY);
2130  REGION_UnlockRgn(DcRgnObj);
2131  ForceNCPaintErase(pwnd, DcRgn, DcRgnObj);
2132  GreDeleteObject(DcRgn);
2133  }
2134  }
2135  }
2136  }
2137  REGION_Delete(DirtyRgn);
2138  }
2139  }
2140 
2141  if (CopyRgn != NULL)
2142  {
2144  }
2145 
2146  /* Expose what was covered before but not covered anymore */
2147  if ( VisBefore != NULL )
2148  {
2149  PREGION ExposedRgn = IntSysCreateRectpRgn(0, 0, 0, 0);
2150  if (ExposedRgn)
2151  {
2152  RgnType = IntGdiCombineRgn(ExposedRgn, VisBefore, NULL, RGN_COPY);
2153  REGION_bOffsetRgn(ExposedRgn,
2154  OldWindowRect.left - NewWindowRect.left,
2155  OldWindowRect.top - NewWindowRect.top);
2156 
2157  if ( VisAfter != NULL )
2158  RgnType = IntGdiCombineRgn(ExposedRgn, ExposedRgn, VisAfter, RGN_DIFF);
2159 
2160  if (RgnType != ERROR && RgnType != NULLREGION)
2161  {
2162  co_VIS_WindowLayoutChanged(Window, ExposedRgn);
2163  }
2164  REGION_Delete(ExposedRgn);
2165  }
2166  REGION_Delete(VisBefore);
2167  }
2168 
2169  if (VisAfter != NULL)
2170  {
2171  REGION_Delete(VisAfter);
2172  }
2173  }
2174 
2175  if (!(WinPos.flags & (SWP_NOACTIVATE|SWP_HIDEWINDOW)))
2176  {
2177  if ((Window->style & (WS_CHILD | WS_POPUP)) == WS_CHILD)
2178  {
2180  }
2181  else
2182  {
2183  //ERR("SetWindowPos Set FG Window!\n");
2184  if ( pti->MessageQueue->spwndActive != Window ||
2185  pti->MessageQueue != gpqForeground )
2186  {
2187  //ERR("WPSWP : set active window\n");
2188  if (!(Window->state & WNDS_BEINGACTIVATED)) // Inside SAW?
2189  {
2190  co_IntSetForegroundWindow(Window); // Fixes SW_HIDE issues. Wine win test_SetActiveWindow & test_SetForegroundWindow.
2191  }
2192  }
2193  }
2194  }
2195 
2196  if ( !PosChanged &&
2197  (WinPos.flags & SWP_FRAMECHANGED) &&
2198  !(WinPos.flags & SWP_DEFERERASE) && // Prevent sending WM_SYNCPAINT message.
2199  VisAfter )
2200  {
2201  PWND Parent = Window->spwndParent;
2202  if ( !(Window->style & WS_CHILD) && (Parent) && (Parent->style & WS_CLIPCHILDREN))
2203  {
2204  TRACE("SWP_FRAMECHANGED Parent %p WS_CLIPCHILDREN %p\n",Parent,Window);
2205  UserSyncAndPaintWindows( Parent, RDW_CLIPCHILDREN); // NC should redraw here, see NC HACK fix.
2206  }
2207  }
2208 
2209  // Fix wine msg test_SetFocus, prevents sending WM_WINDOWPOSCHANGED.
2210  if ( VisBefore == NULL &&
2211  VisBeforeJustClient == NULL &&
2212  !(Window->ExStyle & WS_EX_TOPMOST) &&
2214  {
2215  TRACE("No drawing, set no Z order and no redraw!\n");
2216  WinPos.flags |= SWP_NOZORDER|SWP_NOREDRAW;
2217  }
2218 
2219  if(!(flags & SWP_DEFERERASE))
2220  {
2221  /* erase parent when hiding or resizing child */
2222  if ((flags & SWP_HIDEWINDOW) ||
2223  (!(flags & SWP_SHOWWINDOW) &&
2225  {
2226  PWND Parent = Window->spwndParent;
2229  }
2230 
2231  /* Give newly shown windows a chance to redraw */
2232  if(((WinPos.flags & SWP_AGG_STATUSFLAGS) != SWP_AGG_NOPOSCHANGE)
2234  {
2236  }
2237  }
2238 
2239  /* And last, send the WM_WINDOWPOSCHANGED message */
2240 
2241  TRACE("\tstatus hwnd %p flags = %04x\n",Window?Window->head.h:NULL,WinPos.flags & SWP_AGG_STATUSFLAGS);
2242 
2243  if (((WinPos.flags & SWP_AGG_STATUSFLAGS) != SWP_AGG_NOPOSCHANGE)
2245  {
2246  /* WM_WINDOWPOSCHANGED is sent even if SWP_NOSENDCHANGING is set
2247  and always contains final window position.
2248  */
2249  WinPos.x = NewWindowRect.left;
2250  WinPos.y = NewWindowRect.top;
2251  WinPos.cx = NewWindowRect.right - NewWindowRect.left;
2252  WinPos.cy = NewWindowRect.bottom - NewWindowRect.top;
2253  TRACE("WM_WINDOWPOSCHANGED hwnd %p Flags %04x\n",WinPos.hwnd,WinPos.flags);
2254  co_IntSendMessageNoWait(WinPos.hwnd, WM_WINDOWPOSCHANGED, 0, (LPARAM) &WinPos);
2255  }
2256 
2257  if ( WinPos.flags & SWP_FRAMECHANGED || WinPos.flags & SWP_STATECHANGED ||
2258  !(WinPos.flags & SWP_NOCLIENTSIZE) || !(WinPos.flags & SWP_NOCLIENTMOVE) )
2259  {
2260  PWND pWnd = ValidateHwndNoErr(WinPos.hwnd);
2261  if (pWnd)
2262  IntNotifyWinEvent(EVENT_OBJECT_LOCATIONCHANGE, pWnd, OBJID_WINDOW, CHILDID_SELF, WEF_SETBYWNDPTI);
2263  }
2264 
2265  if(bPointerInWindow != IntPtInWindow(Window, gpsi->ptCursor.x, gpsi->ptCursor.y))
2266  {
2267  /* Generate mouse move message */
2268  MSG msg;
2269  msg.message = WM_MOUSEMOVE;
2270  msg.wParam = UserGetMouseButtonsState();
2271  msg.lParam = MAKELPARAM(gpsi->ptCursor.x, gpsi->ptCursor.y);
2272  msg.pt = gpsi->ptCursor;
2274  }
2275 
2276  return TRUE;
2277 }
#define RDW_NOINTERNALPAINT
Definition: winuser.h:1203
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define RDW_NOCHILDREN
Definition: winuser.h:1208
PUSER_MESSAGE_QUEUE gpqForeground
Definition: focus.c:12
__kernel_entry W32KAPI HRGN APIENTRY NtGdiCreateRectRgn(_In_ INT xLeft, _In_ INT yTop, _In_ INT xRight, _In_ INT yBottom)
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
Definition: gdiobj.c:1155
VOID FASTCALL co_MsqInsertMouseMessage(MSG *Msg, DWORD flags, ULONG_PTR dwExtraInfo, BOOL Hook)
Definition: msgqueue.c:580
PWND FASTCALL ValidateHwndNoErr(HWND hWnd)
Definition: window.c:96
#define DCX_CLIPSIBLINGS
Definition: winuser.h:2098
VOID FASTCALL UserSyncAndPaintWindows(PWND pWnd, ULONG Flags)
Definition: painting.c:608
VOID FASTCALL co_VIS_WindowLayoutChanged(PWND Wnd, PREGION NewlyExposed)
Definition: vis.c:145
#define UserIsDesktopWindow(pWnd)
Definition: desktop.h:220
#define TRUE
Definition: types.h:120
#define ERROR(name)
Definition: error_private.h:53
#define ASSERT_REFS_CO(_obj_)
Definition: userfuncs.h:13
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
#define WNDS_SENDNCPAINT
Definition: ntuser.h:584
VOID FASTCALL IntNotifyWinEvent(DWORD Event, PWND pWnd, LONG idObject, LONG idChild, DWORD flags)
Definition: event.c:179
#define MAKELPARAM(l, h)
Definition: winuser.h:3983
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
Definition: thread.c:805
VOID FASTCALL IntSendNCPaint(PWND pWnd, HRGN hRgn)
Definition: painting.c:348
static HDC
Definition: imagelist.c:92
#define SWP_AGG_STATUSFLAGS
Definition: winpos.c:23
#define OBJID_WINDOW
Definition: winable.h:15
#define WS_EX_TRANSPARENT
Definition: pedump.c:649
#define NULLREGION
Definition: wingdi.h:360
#define HSHELL_WINDOWCREATED
Definition: winuser.h:1240
long bottom
Definition: polytest.cpp:53
static BOOL IntValidateParent(PWND Child, PREGION ValidateRgn)
Definition: winpos.c:1054
HWND hwndInsertAfter
Definition: winuser.h:3564
#define WS_SIZEBOX
Definition: pedump.c:642
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
HDC FASTCALL UserGetDCEx(PWND Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
static BOOL FASTCALL co_WinPosDoWinPosChanging(PWND Window, PWINDOWPOS WinPos, PRECTL WindowRect, PRECTL ClientRect)
Definition: winpos.c:1264
UINT_PTR WPARAM
Definition: windef.h:207
BOOL FASTCALL REGION_bOffsetRgn(_Inout_ PREGION prgn, _In_ INT cx, _In_ INT cy)
Definition: region.c:2727
#define WS_CHILD
Definition: pedump.c:617
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn BOOLEAN Physical UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
Definition: acpixf.h:728
#define RDW_FRAME
Definition: winuser.h:1198
#define SWP_NOZORDER
Definition: winuser.h:1232
FORCEINLINE BOOL IntPtInWindow(PWND pwnd, INT x, INT y)
Definition: winpos.h:30
#define WS_CLIPCHILDREN
Definition: pedump.c:619
PREGION FASTCALL REGION_LockRgn(_In_ HRGN hrgn)
Definition: region.c:2377
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
PSERVERINFO gpsi
Definition: main.c:27
WORD FASTCALL UserGetMouseButtonsState(VOID)
Definition: mouse.c:22
#define DCX_INTERSECTRGN
Definition: winuser.h:2104
#define DCX_WINDOW
Definition: winuser.h:2095
#define SWP_HIDEWINDOW
Definition: winuser.h:1226
#define WNDS_BEINGACTIVATED
Definition: ntuser.h:593
#define RGN_AND
Definition: wingdi.h:355
#define SWP_NOCOPYBITS
Definition: winuser.h:1228
long right
Definition: polytest.cpp:53
Definition: window.c:28
PREGION FASTCALL IntSysCreateRectpRgn(INT LeftRect, INT TopRect, INT RightRect, INT BottomRect)
Definition: region.c:2426
VOID FASTCALL IntLinkHwnd(PWND Wnd, HWND hWndPrev)
Definition: window.c:937
#define FALSE
Definition: types.h:117
#define WM_CHILDACTIVATE
Definition: winuser.h:1620
unsigned int BOOL
Definition: ntddk_ex.h:94
#define GA_PARENT
Definition: winuser.h:2763
HWND FASTCALL UserGetShellWindow(VOID)
Definition: window.c:3423
long top
Definition: polytest.cpp:53
static HWND FASTCALL WinPosDoOwnedPopups(PWND Window, HWND hWndInsertAfter)
Definition: winpos.c:1352
#define CHILDID_SELF
Definition: winable.h:14
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:581
THRDESKHEAD head
Definition: ntuser.h:659
static LONG FASTCALL co_WinPosDoNCCALCSize(PWND Window, PWINDOWPOS WinPos, RECTL *WindowRect, RECTL *ClientRect, RECTL *validRects)
Definition: winpos.c:1177
#define DCX_KEEPCLIPRGN
Definition: undocuser.h:66
smooth NULL
Definition: ftsmooth.c:416
#define HRGN_WINDOW
Definition: ntuser.h:329
#define SWP_ASYNCWINDOWPOS
Definition: winuser.h:1238
__kernel_entry W32KAPI BOOL APIENTRY NtGdiBitBlt(_In_ HDC hdcDst, _In_ INT x, _In_ INT y, _In_ INT cx, _In_ INT cy, _In_opt_ HDC hdcSrc, _In_ INT xSrc, _In_ INT ySrc, _In_ DWORD rop4, _In_ DWORD crBackColor, _In_ FLONG fl)
LONG_PTR LPARAM
Definition: windef.h:208
Definition: region.h:7
UINT flags
Definition: winuser.h:3569
#define WEF_SETBYWNDPTI
Definition: ntuser.h:213
#define SWP_AGG_NOGEOMETRYCHANGE
Definition: winpos.c:19
long left
Definition: polytest.cpp:53
INT FASTCALL IntGdiCombineRgn(PREGION prgnDest, PREGION prgnSrc1, PREGION prgnSrc2, INT iCombineMode)
Definition: region.c:2506
static BOOL FASTCALL WinPosFixupFlags(WINDOWPOS *WinPos, PWND Wnd)
Definition: winpos.c:1522
VOID SelectWindowRgn(PWND Window, HRGN hRgnClip)
Definition: winpos.c:258
#define TRACE(s)
Definition: solgame.cpp:4
#define ERROR_INVALID_WINDOW_HANDLE
Definition: winerror.h:881
#define SWP_NOACTIVATE
Definition: winuser.h:1227
#define RDW_ERASE
Definition: winuser.h:1197
#define SWP_STATECHANGED
Definition: msg.c:42
VOID FASTCALL co_IntPaintWindows(PWND Wnd, ULONG Flags, BOOL Recurse)
Definition: painting.c:391
BOOL FASTCALL IntIsWindow(HWND hWnd)
Definition: window.c:157
int Window
Definition: x11stubs.h:26
GLbitfield flags
Definition: glext.h:7161
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
__kernel_entry W32KAPI INT APIENTRY NtGdiOffsetRgn(_In_ HRGN hrgn, _In_ INT cx, _In_ INT cy)
Definition: region.c:3981
VOID FASTCALL IntInvalidateWindows(PWND Wnd, PREGION Rgn, ULONG Flags)
Definition: painting.c:630
#define RDW_VALIDATE
Definition: winuser.h:1204
VOID FASTCALL DceResetActiveDCEs(PWND Window)
Definition: windc.c:815
static VOID FASTCALL WinPosInternalMoveWindow(PWND Window, INT MoveX, INT MoveY)
Definition: winpos.c:1492
#define RDW_NOERASE
Definition: winuser.h:1201
#define SWP_FRAMECHANGED
Definition: winuser.h:1225
#define WS_EX_TOPMOST
Definition: pedump.c:647
#define RDW_NOFRAME
Definition: winuser.h:1202
PWND FASTCALL UserGetAncestor(PWND Wnd, UINT Type)
Definition: window.c:3079
#define HSHELL_WINDOWDESTROYED
Definition: winuser.h:1241
#define RGN_COPY
Definition: wingdi.h:356
#define SWP_NOSIZE
Definition: winuser.h:1230
Definition: ntuser.h:657
struct _USER_MESSAGE_QUEUE * MessageQueue
Definition: win32.h:88
#define WVR_REDRAW
Definition: winuser.h:2496
HWND FASTCALL IntGetDesktopWindow(VOID)
Definition: desktop.c:1338
#define DCX_CACHE
Definition: winuser.h:2096
#define SWP_AGG_NOCLIENTCHANGE
Definition: winpos.c:25
#define RGN_DIFF
Definition: wingdi.h:357
BOOL FASTCALL co_UserRedrawWindow(PWND Window, const RECTL *UpdateRect, PREGION UpdateRgn, ULONG Flags)
Definition: painting.c:876
#define RDW_ALLCHILDREN
Definition: winuser.h:1207
LRESULT FASTCALL co_IntSendMessageNoWait(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1710
#define WNDS2_WIN31COMPAT
Definition: ntuser.h:617
#define WS_POPUP
Definition: pedump.c:616
#define WM_MOUSEMOVE
Definition: winuser.h:1757
INT FASTCALL UserReleaseDC(PWND Window, HDC hDc, BOOL EndPaint)
Definition: windc.c:917
#define SWP_SHOWWINDOW
Definition: winuser.h:1233
#define SWP_NOREDRAW
Definition: winuser.h:1231
#define SWP_DEFERERASE
Definition: winuser.h:1237
VOID co_IntShellHookNotify(WPARAM Message, WPARAM wParam, LPARAM lParam)
Definition: desktop.c:1656
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
#define USERTAG_SWP
Definition: tags.h:280
PREGION FASTCALL VIS_ComputeVisibleRegion(PWND Wnd, BOOLEAN ClientArea, BOOLEAN ClipChildren, BOOLEAN ClipSiblings)
Definition: vis.c:13
#define WM_WINDOWPOSCHANGED
Definition: winuser.h:1644
#define msg(x)
Definition: auth_time.c:54
VOID FASTCALL REGION_UnlockRgn(_In_ PREGION prgn)
Definition: region.c:2392
_Out_opt_ int * cx
Definition: commctrl.h:581
#define RDW_ERASENOW
Definition: winuser.h:1205
BOOL WINAPI CopyRect(_Out_ LPRECT, _In_ LPCRECT)
#define RDW_CLIPCHILDREN
Definition: painting.h:15
VOID ForceNCPaintErase(PWND Wnd, HRGN hRgn, PREGION pRgn)
Definition: winpos.c:1662
unsigned int ULONG
Definition: retypes.h:1
#define SWP_NOCLIENTMOVE
Definition: msg.h:30
#define SWP_NOMOVE
Definition: winuser.h:1229
#define SWP_AGG_NOPOSCHANGE
Definition: winpos.c:21
INT FASTCALL REGION_Complexity(PREGION prgn)
Definition: region.c:567
#define WS_EX_APPWINDOW
Definition: winuser.h:383
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1099
INT FASTCALL REGION_GetRgnBox(PREGION Rgn, PRECTL pRect)
Definition: region.c:2562
HWND hwnd
Definition: winuser.h:3563
LONG_PTR LRESULT
Definition: windef.h:209
BOOL FASTCALL co_IntSetForegroundWindow(PWND Window)
Definition: focus.c:1432
#define WS_VISIBLE
Definition: pedump.c:620
#define SWP_NOCLIENTSIZE
Definition: msg.h:29
#define CopyRgn(hrgnDst, hrgnSrc)
Definition: windowsx.h:48
VOID FASTCALL REGION_Delete(PREGION pRgn)
Definition: region.c:2468
VOID FASTCALL UpdateShellHook(PWND Window)
Definition: focus.c:52
#define SRCCOPY
Definition: wingdi.h:332
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
Definition: error.c:27
#define RDW_INVALIDATE
Definition: winuser.h:1200
DWORD style
Definition: ntuser.h:670

Referenced by co_IntSendActivateMessages(), co_IntSetForegroundMessageQueue(), co_IntSetParent(), co_IntShowDesktop(), co_UserCreateWindowEx(), co_UserDestroyWindow(), co_UserShowScrollBar(), co_WinPosArrangeIconicWindows(), co_WinPosShowWindow(), DefWndDoSizeMove(), DefWndHandleSetCursor(), DesktopWindowProc(), handle_internal_message(), IntActivateWindow(), IntDefWindowProc(), IntEndDeferWindowPosEx(), IntSetWindowPlacement(), IntUpdateLayeredWindowI(), MENU_ShowPopup(), NC_HandleNCLButtonDblClk(), NtUserCallHwndLock(), NtUserCallTwoParam(), NtUserSetMenu(), NtUserSetShellWindowEx(), NtUserSetWindowPos(), NtUserSetWindowRgn(), SpiNotifyNCMetricsChanged(), and WinPosDoOwnedPopups().

◆ co_WinPosShowWindow()

BOOLEAN FASTCALL co_WinPosShowWindow ( PWND  Window,
INT  Cmd 
)

Definition at line 2479 of file winpos.c.

2480 {
2481  BOOLEAN WasVisible;
2482  UINT Swp = 0, EventMsg = 0;
2483  RECTL NewPos = {0, 0, 0, 0};
2484  BOOLEAN ShowFlag;
2485  LONG style;
2486  PWND Parent;
2487  PTHREADINFO pti;
2488  //HRGN VisibleRgn;
2489  BOOL ShowOwned = FALSE;
2490  BOOL FirstTime = FALSE;
2491  ASSERT_REFS_CO(Wnd);
2492  //KeRosDumpStackFrames(NULL, 20);
2494  WasVisible = (Wnd->style & WS_VISIBLE) != 0;
2495  style = Wnd->style;
2496 
2497  TRACE("co_WinPosShowWindow START hwnd %p Cmd %d usicmd %u\n",
2498  Wnd->head.h, Cmd, pti->ppi->usi.wShowWindow);
2499 
2500  if ( pti->ppi->usi.dwFlags & STARTF_USESHOWWINDOW )
2501  {
2502  if ((Wnd->style & (WS_POPUP|WS_CHILD)) != WS_CHILD)
2503  {
2504  if ((Wnd->style & WS_CAPTION) == WS_CAPTION)
2505  {
2506  if (Wnd->spwndOwner == NULL)
2507  {
2508  if ( Cmd == SW_SHOWNORMAL || Cmd == SW_SHOW)
2509  {
2510  Cmd = SW_SHOWDEFAULT;
2511  }
2512  FirstTime = TRUE;
2513  TRACE("co_WPSW FT 1\n");
2514  }
2515  }
2516  }
2517  }
2518 
2519  if ( Cmd == SW_SHOWDEFAULT )
2520  {
2521  if ( pti->ppi->usi.dwFlags & STARTF_USESHOWWINDOW )
2522  {
2523  Cmd = pti->ppi->usi.wShowWindow;
2524  FirstTime = TRUE;
2525  TRACE("co_WPSW FT 2\n");
2526  }
2527  }
2528 
2529  if (FirstTime)
2530  {
2532  }
2533 
2534  switch (Cmd)
2535  {
2536  case SW_HIDE:
2537  {
2538  if (!WasVisible)
2539  {
2540  //ERR("co_WinPosShowWindow Exit Bad\n");
2541  return FALSE;
2542  }
2544  if (Wnd != pti->MessageQueue->spwndActive)
2545  Swp |= SWP_NOACTIVATE | SWP_NOZORDER;
2546  break;
2547  }
2548 
2549  case SW_FORCEMINIMIZE: /* FIXME: Does not work if thread is hung. */
2550  case SW_SHOWMINNOACTIVE:
2551  Swp |= SWP_NOACTIVATE | SWP_NOZORDER;
2552  /* Fall through. */
2553  case SW_SHOWMINIMIZED:
2554  Swp |= SWP_SHOWWINDOW;
2555  /* Fall through. */
2556  case SW_MINIMIZE:
2557  {
2558  Swp |= SWP_NOACTIVATE;
2559  if (!(style & WS_MINIMIZE))
2560  {
2561  IntShowOwnedPopups(Wnd, FALSE );
2562  // Fix wine Win test_SetFocus todo #1 & #2,
2563  if (Cmd == SW_SHOWMINIMIZED)
2564  {
2565  //ERR("co_WinPosShowWindow Set focus 1\n");
2566  if ((style & (WS_CHILD | WS_POPUP)) == WS_CHILD)
2567  co_UserSetFocus(Wnd->spwndParent);
2568  else
2569  co_UserSetFocus(0);
2570  }
2571 
2572  Swp |= co_WinPosMinMaximize(Wnd, Cmd, &NewPos);
2573 
2574  EventMsg = EVENT_SYSTEM_MINIMIZESTART;
2575  }
2576  else
2577  {
2578  if (WasVisible)
2579  {
2580  //ERR("co_WinPosShowWindow Exit Good\n");
2581  return TRUE;
2582  }
2583  Swp |= SWP_NOSIZE | SWP_NOMOVE;
2584  }
2585  break;
2586  }
2587 
2588  case SW_SHOWMAXIMIZED:
2589  {
2590  Swp |= SWP_SHOWWINDOW;
2591  if (!(style & WS_MAXIMIZE))
2592  {
2593  ShowOwned = TRUE;
2594 
2595  Swp |= co_WinPosMinMaximize(Wnd, SW_MAXIMIZE, &NewPos);
2596 
2597  EventMsg = EVENT_SYSTEM_MINIMIZEEND;
2598  }
2599  else
2600  {
2601  if (WasVisible)
2602  {
2603  //ERR("co_WinPosShowWindow Exit Good 1\n");
2604  return TRUE;
2605  }
2606  Swp |= SWP_NOSIZE | SWP_NOMOVE;
2607  }
2608  break;
2609  }
2610 
2611  case SW_SHOWNA:
2613  if (style & WS_CHILD && !(Wnd->ExStyle & WS_EX_MDICHILD)) Swp |= SWP_NOZORDER;
2614  break;
2615  case SW_SHOW:
2616  if (WasVisible) return(TRUE); // Nothing to do!
2618  /* Don't activate the topmost window. */
2619  if (style & WS_CHILD && !(Wnd->ExStyle & WS_EX_MDICHILD)) Swp |= SWP_NOACTIVATE | SWP_NOZORDER;
2620  break;
2621 
2622  case SW_SHOWNOACTIVATE:
2623  Swp |= SWP_NOACTIVATE | SWP_NOZORDER;
2624  /* Fall through. */
2625  case SW_SHOWNORMAL:
2626  case SW_SHOWDEFAULT:
2627  case SW_RESTORE:
2628  if (!WasVisible) Swp |= SWP_SHOWWINDOW;
2629  if (style & (WS_MINIMIZE | WS_MAXIMIZE))
2630  {
2631  Swp |= co_WinPosMinMaximize(Wnd, Cmd, &NewPos);
2632  if (style & WS_MINIMIZE) EventMsg = EVENT_SYSTEM_MINIMIZEEND;
2633  }
2634  else
2635  {
2636  if (WasVisible)
2637  {
2638  //ERR("co_WinPosShowWindow Exit Good 3\n");
2639  return TRUE;
2640  }
2641  Swp |= SWP_NOSIZE | SWP_NOMOVE;
2642  }
2643  if ( style & WS_CHILD &&
2644  !(Wnd->ExStyle & WS_EX_MDICHILD) &&
2645  !(Swp & SWP_STATECHANGED))
2646  Swp |= SWP_NOACTIVATE | SWP_NOZORDER;
2647  break;
2648 
2649  default:
2650  //ERR("co_WinPosShowWindow Exit Good 4\n");
2651  return WasVisible;
2652  }
2653 
2654  ShowFlag = (Cmd != SW_HIDE);
2655 
2656  if ((ShowFlag != WasVisible || Cmd == SW_SHOWNA) && Cmd != SW_SHOWMAXIMIZED && !(Swp & SWP_STATECHANGED))
2657  {
2658  co_IntSendMessageNoWait(Wnd->head.h, WM_SHOWWINDOW, ShowFlag, 0);
2659 #if 0 // Fix wine msg test_SetParent:WmSetParentSeq_1:2
2660  if (!(Wnd->state2 & WNDS2_WIN31COMPAT)) // <------------- XP sets this bit!
2661  co_IntSendMessageNoWait(Wnd->head.h, WM_SETVISIBLE, ShowFlag, 0);
2662 #endif
2663  if (!VerifyWnd(Wnd)) return WasVisible;
2664  }
2665 
2666  /* We can't activate a child window */
2667  if ((Wnd->style & WS_CHILD) &&
2668  !(Wnd->ExStyle & WS_EX_MDICHILD) &&
2669  Cmd != SW_SHOWNA)
2670  {
2671  //ERR("SWP Child No active and ZOrder\n");
2672  Swp |= SWP_NOACTIVATE | SWP_NOZORDER;
2673  }
2674 
2675 #if 0 // Explorer issues with common controls? Someone does not know how CS_SAVEBITS works.
2676  // Breaks startup and shutdown active window...
2677  if ((Wnd->style & (WS_POPUP|WS_CHILD)) != WS_CHILD &&
2678  Wnd->pcls->style & CS_SAVEBITS &&
2679  ((Cmd == SW_SHOW) || (Cmd == SW_NORMAL)))
2680  {
2681  ERR("WinPosShowWindow Set active\n");
2682  //UserSetActiveWindow(Wnd);
2683  co_IntSetForegroundWindow(Wnd); // HACK
2684  Swp |= SWP_NOACTIVATE | SWP_NOZORDER;
2685  }
2686 #endif
2687 
2688  if (IsChildVisible(Wnd) || Swp & SWP_STATECHANGED)
2689  {
2690  TRACE("Child is Vis %s or State changed %s. ShowFlag %s Swp %04x\n",
2691  (IsChildVisible(Wnd) ? "TRUE" : "FALSE"), (Swp & SWP_STATECHANGED ? "TRUE" : "FALSE"),
2692  (ShowFlag ? "TRUE" : "FALSE"),LOWORD(Swp));
2693  co_WinPosSetWindowPos( Wnd,
2694  0 != (Wnd->ExStyle & WS_EX_TOPMOST) ? HWND_TOPMOST : HWND_TOP,
2695  NewPos.left,
2696  NewPos.top,
2697  NewPos.right, // NewPos.right - NewPos.left, when minimized and restore, the window becomes smaller.
2698  NewPos.bottom,// NewPos.bottom - NewPos.top,
2699  LOWORD(Swp));
2700  }
2701  else
2702  {
2703  TRACE("Parent Vis?\n");
2704  /* if parent is not visible simply toggle WS_VISIBLE and return */
2705  if (ShowFlag) IntSetStyle( Wnd, WS_VISIBLE, 0 );
2706  else IntSetStyle( Wnd, 0, WS_VISIBLE );
2707  }
2708 
2709  if ( EventMsg ) IntNotifyWinEvent(EventMsg, Wnd, OBJID_WINDOW, CHILDID_SELF, WEF_SETBYWNDPTI);
2710 
2711  if ( ShowOwned ) IntShowOwnedPopups(Wnd, TRUE );
2712 
2713  if ((Cmd == SW_HIDE) || (Cmd == SW_MINIMIZE))
2714  {
2715  if ( Wnd == pti->MessageQueue->spwndActive && pti->MessageQueue == IntGetFocusMessageQueue() )
2716  {
2717  if (UserIsDesktopWindow(Wnd->spwndParent))
2718  {
2719  if (!ActivateOtherWindowMin(Wnd))
2720  {
2722  }
2723  }
2724  else
2725  {
2727  }
2728  }
2729 
2730  /* Revert focus to parent */
2731  if (Wnd == pti->MessageQueue->spwndFocus)
2732  {
2733  Parent = Wnd->spwndParent;
2734  if (UserIsDesktopWindow(Wnd->spwndParent))
2735  Parent = 0;
2737  }
2738  // Hide, just return.
2739  if (Cmd == SW_HIDE) return WasVisible;
2740  }
2741 
2742  /* FIXME: Check for window destruction. */
2743 
2744  if ((Wnd->state & WNDS_SENDSIZEMOVEMSGS) &&
2745  !(Wnd->state2 & WNDS2_INDESTROY))
2746  {
2747  co_WinPosSendSizeMove(Wnd);
2748  }
2749 
2750  /* if previous state was minimized Windows sets focus to the window */
2751  if (style & WS_MINIMIZE)
2752  {
2753  co_UserSetFocus(Wnd);
2754  // Fix wine Win test_SetFocus todo #3,
2756  }
2757  //ERR("co_WinPosShowWindow EXIT\n");
2758  return WasVisible;
2759 }
USERSTARTUPINFO usi
Definition: win32.h:270
#define SW_SHOWDEFAULT
Definition: winuser.h:774
#define SW_NORMAL
Definition: winuser.h:763
#define SW_SHOWNOACTIVATE
Definition: winuser.h:768
BOOL FASTCALL IsChildVisible(PWND pWnd)
Definition: winpos.c:225
HWND FASTCALL co_UserSetFocus(PWND Window)
Definition: focus.c:1196
#define UserIsDesktopWindow(pWnd)
Definition: desktop.h:220
#define TRUE
Definition: types.h:120
#define SW_HIDE
Definition: winuser.h:762
#define SW_SHOWMAXIMIZED
Definition: winuser.h:767
#define ASSERT_REFS_CO(_obj_)
Definition: userfuncs.h:13
VOID FASTCALL IntNotifyWinEvent(DWORD Event, PWND pWnd, LONG idObject, LONG idChild, DWORD flags)
Definition: event.c:179
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
Definition: thread.c:805
BOOLEAN FASTCALL co_WinPosSetWindowPos(PWND Window, HWND WndInsertAfter, INT x, INT y, INT cx, INT cy, UINT flags)
Definition: winpos.c:1720
#define OBJID_WINDOW
Definition: winable.h:15
#define SW_SHOWMINNOACTIVE
Definition: winuser.h:771
long bottom
Definition: polytest.cpp:53
#define WM_SHOWWINDOW
Definition: winuser.h:1610
#define STARTF_USEPOSITION
Definition: winbase.h:474
BOOL FASTCALL IntShowOwnedPopups(PWND OwnerWnd, BOOL fShow)
Definition: window.c:4389
#define HWND_TOPMOST
Definition: winuser.h:1194
#define HWND_TOP
Definition: winuser.h:1193
#define WNDS_SENDSIZEMOVEMSGS
Definition: ntuser.h:577
#define WS_CHILD
Definition: pedump.c:617
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn BOOLEAN Physical UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
Definition: acpixf.h:728
#define SWP_NOZORDER
Definition: winuser.h:1232
#define SW_SHOWMINIMIZED
Definition: winuser.h:765
#define SW_RESTORE
Definition: winuser.h:773
VOID FASTCALL co_WinPosActivateOtherWindow(PWND Wnd)
Definition: winpos.c:395
PUSER_MESSAGE_QUEUE FASTCALL IntGetFocusMessageQueue(VOID)
Definition: desktop.c:1271
#define SWP_HIDEWINDOW
Definition: winuser.h:1226
PPROCESSINFO ppi
Definition: win32.h:87
long right
Definition: polytest.cpp:53
#define WS_EX_MDICHILD
Definition: winuser.h:394
#define FALSE
Definition: types.h:117
#define WS_MINIMIZE
Definition: pedump.c:622
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
long top
Definition: polytest.cpp:53
#define CHILDID_SELF
Definition: winable.h:14
unsigned char BOOLEAN
smooth NULL
Definition: ftsmooth.c:416
#define WEF_SETBYWNDPTI
Definition: ntuser.h:213
#define STARTF_USESHOWWINDOW
Definition: winbase.h:472
#define SW_SHOW
Definition: winuser.h:769
long left
Definition: polytest.cpp:53
#define UserHMGetHandle(obj)
Definition: ntuser.h:208
#define WS_CAPTION
Definition: pedump.c:624
#define TRACE(s)
Definition: solgame.cpp:4
#define SWP_NOACTIVATE
Definition: winuser.h:1227
#define SWP_STATECHANGED
Definition: msg.c:42
#define WA_ACTIVE
Definition: winuser.h:2598
void FASTCALL co_WinPosSendSizeMove(PWND Wnd)
Definition: winpos.c:2295
#define SW_MINIMIZE
Definition: winuser.h:770
#define CS_SAVEBITS
Definition: winuser.h:652
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1446
Definition: sacdrv.h:277
#define WS_EX_TOPMOST
Definition: pedump.c:647
#define WM_SETVISIBLE
Definition: undocuser.h:31
#define SW_SHOWNA
Definition: winuser.h:772
BOOL FASTCALL ActivateOtherWindowMin(PWND Wnd)
Definition: winpos.c:284
#define SWP_NOSIZE
Definition: winuser.h:1230
#define ERR(fmt,...)
Definition: debug.h:110
Definition: ntuser.h:657
struct _USER_MESSAGE_QUEUE * MessageQueue
Definition: win32.h:88
#define SW_SHOWNORMAL
Definition: winuser.h:764
#define WM_ACTIVATE
Definition: winuser.h:1594
LRESULT FASTCALL co_IntSendMessageNoWait(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1710
#define WNDS2_WIN31COMPAT
Definition: ntuser.h:617
#define WS_POPUP
Definition: pedump.c:616
#define STARTF_USESIZE
Definition: winbase.h:473
unsigned int UINT
Definition: ndis.h:50
#define SWP_SHOWWINDOW
Definition: winuser.h:1233
WORD wShowWindow
Definition: win32.h:215
UINT FASTCALL co_WinPosMinMaximize(PWND Wnd, UINT ShowFlag, RECT *NewPos)
Definition: winpos.c:2329
ULONG FASTCALL IntSetStyle(PWND pwnd, ULONG set_bits, ULONG clear_bits)
Definition: window.c:124
#define SWP_NOMOVE
Definition: winuser.h:1229
PWND FASTCALL VerifyWnd(PWND pWnd)
Definition: window.c:64
BOOL FASTCALL co_IntSetForegroundWindow(PWND Window)
Definition: focus.c:1432
Arabic default style
Definition: afstyles.h:93
#define WS_VISIBLE
Definition: pedump.c:620
#define SW_FORCEMINIMIZE
Definition: winuser.h:775
#define SW_MAXIMIZE
Definition: winuser.h:766
#define LOWORD(l)
Definition: pedump.c:82
#define WNDS2_INDESTROY
Definition: ntuser.h:616
#define WS_MAXIMIZE
Definition: pedump.c:623

Referenced by co_IntSetParent(), co_UserCreateWindowEx(), co_UserDestroyWindow(), co_UserShowScrollBar(), DefWndHandleSysCommand(), handle_internal_message(), IntDefWindowProc(), IntSetWindowPlacement(), NtUserMinMaximize(), and NtUserShowWindow().

◆ co_WinPosWindowFromPoint()

PWND APIENTRY co_WinPosWindowFromPoint ( IN PWND  ScopeWin,
IN POINT WinPoint,
IN OUT USHORT HitTest,
IN BOOL  Ignore 
)

Definition at line 2847 of file winpos.c.

2852 {
2853  PWND Window;
2854  POINT Point = *WinPoint;
2856 
2857  if( ScopeWin == NULL )
2858  {
2859  ScopeWin = UserGetDesktopWindow();
2860  if(ScopeWin == NULL)
2861  return NULL;
2862  }
2863 
2864  *HitTest = HTNOWHERE;
2865 
2866  ASSERT_REFS_CO(ScopeWin);
2867  UserRefObjectCo(ScopeWin, &Ref);
2868 
2869  Window = co_WinPosSearchChildren(ScopeWin, &Point, HitTest, Ignore);
2870 
2871  UserDerefObjectCo(ScopeWin);
2872  if (Window)
2874  ASSERT_REFS_CO(ScopeWin);
2875 
2876  return Window;
2877 }
#define ASSERT_REFS_CO(_obj_)
Definition: userfuncs.h:13
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
Definition: object.h:25
#define HTNOWHERE
Definition: winuser.h:2449
Definition: window.c:28
static __inline VOID UserDerefObjectCo(PVOID obj)
Definition: object.h:38
static PWND co_WinPosSearchChildren(IN PWND ScopeWin, IN POINT *Point, IN OUT USHORT *HitTest, IN BOOL Ignore)
Definition: winpos.c:2762
Definition: object.h:3
smooth NULL
Definition: ftsmooth.c:416
int Window
Definition: x11stubs.h:26
PWND FASTCALL UserGetDesktopWindow(VOID)
Definition: desktop.c:1349
Definition: ntuser.h:657

Referenced by co_IntProcessMouseMessage(), and NtUserWindowFromPoint().

◆ IntClientToScreen()

BOOL FASTCALL IntClientToScreen ( PWND  ,
LPPOINT   
)

Definition at line 198 of file winpos.c.

199 {
200  if (Wnd && Wnd->fnid != FNID_DESKTOP )
201  {
202  if (Wnd->ExStyle & WS_EX_LAYOUTRTL)
203  lpPoint->x = Wnd->rcClient.right - lpPoint->x;
204  else
205  lpPoint->x += Wnd->rcClient.left;
206  lpPoint->y += Wnd->rcClient.top;
207  }
208  return TRUE;
209 }
#define TRUE
Definition: types.h:120
#define WS_EX_LAYOUTRTL
Definition: winuser.h:390
#define FNID_DESKTOP
Definition: ntuser.h:824

Referenced by IntDefWindowProc(), NC_GetSysPopupPos(), and WinPosFixupFlags().

◆ IntEqualRect()

FORCEINLINE BOOL IntEqualRect ( RECTL lprc1,
RECTL lprc2 
)

Definition at line 48 of file winpos.h.

49 {
50  if (lprc1 == NULL || lprc2 == NULL)
51  return FALSE;
52 
53  return (lprc1->left == lprc2->left) && (lprc1->top == lprc2->top) &&
54  (lprc1->right == lprc2->right) && (lprc1->bottom == lprc2->bottom);
55 }
long bottom
Definition: polytest.cpp:53
long right
Definition: polytest.cpp:53
#define FALSE
Definition: types.h:117
long top
Definition: polytest.cpp:53
smooth NULL
Definition: ftsmooth.c:416
long left
Definition: polytest.cpp:53

Referenced by IntDefWindowProc(), IntGetNCUpdateRgn(), and NC_DoNCPaint().

◆ IntGetClientOrigin()

BOOL FASTCALL IntGetClientOrigin ( PWND  Window,
LPPOINT  Point 
)

Definition at line 70 of file winpos.c.

71 {
73  if (Window == NULL)
74  {
75  Point->x = Point->y = 0;
76  return FALSE;
77  }
78  Point->x = Window->rcClient.left;
79  Point->y = Window->rcClient.top;
80 
81  return TRUE;
82 }
#define TRUE
Definition: types.h:120
Definition: window.c:28
#define FALSE
Definition: types.h:117
smooth NULL
Definition: ftsmooth.c:416
int Window
Definition: x11stubs.h:26
PWND FASTCALL UserGetDesktopWindow(VOID)
Definition: desktop.c:1349

Referenced by co_IntFixCaret(), and IntScrollWindowEx().

◆ IntGetWindowRect()

BOOL FASTCALL IntGetWindowRect ( PWND  ,
RECTL  
)

Definition at line 120 of file winpos.c.

121 {
122  ASSERT( Wnd );
123  ASSERT( Rect );
124  if (!Wnd) return FALSE;
125  if (!UserIsDesktopWindow(Wnd))
126  {
127  *Rect = Wnd->rcWindow;
128  }
129  else
130  {
131  Rect->left = Rect->top = 0;
132  Rect->right = Wnd->rcWindow.right;
133  Rect->bottom = Wnd->rcWindow.bottom;
134 /* Do this until Init bug is fixed. This sets 640x480, see InitMetrics.
135  Rect->right = GetSystemMetrics(SM_CXSCREEN);
136  Rect->bottom = GetSystemMetrics(SM_CYSCREEN);
137 */ }
138  return TRUE;
139 }
#define UserIsDesktopWindow(pWnd)
Definition: desktop.h:220
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)

Referenced by DefWndScreenshot(), IntGetNCUpdateRgn(), MENU_FindItemByCoords(), MENU_ShowSubPopup(), NC_DoNCPaint(), NC_GetSysPopupPos(), UserDrawCaptionBar(), and UserDrawCaptionButtonWnd().

◆ IntPtInWindow()

FORCEINLINE BOOL IntPtInWindow ( PWND  pwnd,
INT  x,
INT  y 
)

Definition at line 30 of file winpos.h.

31 {
32  if(!RECTL_bPointInRect(&pwnd->rcWindow, x, y))
33  {
34  return FALSE;
35  }
36 
37  if(!pwnd->hrgnClip || pwnd->style & WS_MINIMIZE)
38  {
39  return TRUE;
40  }
41 
42  return NtGdiPtInRegion(pwnd->hrgnClip,
43  x - pwnd->rcWindow.left,
44  y - pwnd->rcWindow.top);
45 }
#define TRUE
Definition: types.h:120
LONG top
Definition: windef.h:307
__kernel_entry W32KAPI BOOL APIENTRY NtGdiPtInRegion(_In_ HRGN hrgn, _In_ INT x, _In_ INT y)
Definition: region.c:4016
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
LONG left
Definition: windef.h:306
#define FALSE
Definition: types.h:117
#define WS_MINIMIZE
Definition: pedump.c:622
HRGN hrgnClip
Definition: ntuser.h:697
FORCEINLINE BOOL RECTL_bPointInRect(_In_ const RECTL *prcl, _In_ INT x, _In_ INT y)
Definition: rect.h:52
RECT rcWindow
Definition: ntuser.h:680
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
DWORD style
Definition: ntuser.h:670

Referenced by co_WinPosSearchChildren(), co_WinPosSetWindowPos(), IntChildWindowFromPointEx(), IntRealChildWindowFromPoint(), and IntTopLevelWindowFromPoint().

◆ IntRealChildWindowFromPoint()

PWND FASTCALL IntRealChildWindowFromPoint ( PWND  ,
LONG  ,
LONG   
)

Definition at line 2880 of file winpos.c.

2881 {
2882  POINTL Pt;
2883  HWND *List, *phWnd;
2884  PWND pwndHit = NULL;
2885 
2886  Pt.x = x;
2887  Pt.y = y;
2888 
2890  {
2891  Pt.x += Parent->rcClient.left;
2892  Pt.y += Parent->rcClient.top;
2893  }
2894 
2895  if (!IntPtInWindow(Parent, Pt.x, Pt.y)) return NULL;
2896 
2897  if ((List = IntWinListChildren(Parent)))
2898  {
2899  for (phWnd = List; *phWnd; phWnd++)
2900  {
2901  PWND Child;
2902  if ((Child = ValidateHwndNoErr(*phWnd)))
2903  {
2904  if ( Child->style & WS_VISIBLE && IntPtInWindow(Child, Pt.x, Pt.y) )
2905  {
2906  if ( Child->pcls->atomClassName != gpsi->atomSysClass[ICLS_BUTTON] ||
2907  (Child->style & BS_TYPEMASK) != BS_GROUPBOX )
2908  {
2910  return Child;
2911  }
2912  pwndHit = Child;
2913  }
2914  }
2915  }
2917  }
2918  return pwndHit ? pwndHit : Parent;
2919 }
PWND FASTCALL ValidateHwndNoErr(HWND hWnd)
Definition: window.c:96
#define UserIsDesktopWindow(pWnd)
Definition: desktop.h:220
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn BOOLEAN Physical UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
Definition: acpixf.h:728
FORCEINLINE BOOL IntPtInWindow(PWND pwnd, INT x, INT y)
Definition: winpos.h:30
PSERVERINFO gpsi
Definition: main.c:27
#define BS_GROUPBOX
Definition: pedump.c:658
LONG y
Definition: windef.h:330
smooth NULL
Definition: ftsmooth.c:416
LIST_ENTRY List
Definition: psmgr.c:57
LONG x
Definition: windef.h:329
HWND *FASTCALL IntWinListChildren(PWND Window)
Definition: window.c:255
Definition: ntuser.h:657
#define BS_TYPEMASK
Definition: winuser.h:270
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn BOOLEAN Physical UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE ACPI_HANDLE Child
Definition: acpixf.h:728
#define ICLS_BUTTON
Definition: ntuser.h:873
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1099
#define USERTAG_WINDOWLIST
Definition: tags.h:297
#define WS_VISIBLE
Definition: pedump.c:620
ATOM atomSysClass[ICLS_NOTUSED+1]
Definition: ntuser.h:1013

Referenced by NtUserRealChildWindowFromPoint().

◆ IntScreenToClient()

BOOL FASTCALL IntScreenToClient ( PWND  ,
LPPOINT   
)

Definition at line 212 of file winpos.c.

213 {
214  if (Wnd && Wnd->fnid != FNID_DESKTOP )
215  {
216  if (Wnd->ExStyle & WS_EX_LAYOUTRTL)
217  lpPoint->x = Wnd->rcClient.right - lpPoint->x;
218  else
219  lpPoint->x -= Wnd->rcClient.left;
220  lpPoint->y -= Wnd->rcClient.top;
221  }
222  return TRUE;
223 }
#define TRUE
Definition: types.h:120
#define WS_EX_LAYOUTRTL
Definition: winuser.h:390
#define FNID_DESKTOP
Definition: ntuser.h:824

Referenced by co_IntSetParent(), IntDefWindowProc(), and MENU_TrackMouseMenuBar().

◆ UserGetWindowBorders()

VOID UserGetWindowBorders ( DWORD  ,
DWORD  ,
SIZE ,
BOOL   
)

Definition at line 885 of file winpos.c.

886 {
887  DWORD Border = 0;
888 
890  Border += 2;
892  Border += 1; /* for the outer frame always present */
893  if ((ExStyle & WS_EX_CLIENTEDGE) && WithClient)
894  Border += 2;
896  Border ++; /* The other border */
897  Size->cx = Size->cy = Border;
898  if ((Style & WS_THICKFRAME) && !(Style & WS_MINIMIZE)) /* The resize border */
899  {
902  }
905 }
#define WS_THICKFRAME
Definition: pedump.c:630
#define SM_CYFRAME
Definition: winuser.h:986
#define SM_CXFRAME
Definition: winuser.h:984
#define WS_MINIMIZE
Definition: pedump.c:622
#define SM_CYDLGFRAME
Definition: winuser.h:958
#define WS_EX_DLGMODALFRAME
Definition: pedump.c:645
LONG NTAPI UserGetSystemMetrics(ULONG Index)
Definition: metric.c:180
#define WS_CAPTION
Definition: pedump.c:624
const DWORD Style
Definition: appswitch.c:71
#define SM_CXDLGFRAME
Definition: winuser.h:956
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SM_CYBORDER
Definition: winuser.h:955
#define SM_CXBORDER
Definition: winuser.h:954
BOOL UserHasWindowEdge(DWORD Style, DWORD ExStyle)
Definition: winpos.c:841
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:361
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
#define WS_EX_STATICEDGE
Definition: winuser.h:403
const DWORD ExStyle
Definition: appswitch.c:72

◆ UserHasWindowEdge()

BOOL UserHasWindowEdge ( DWORD  ,
DWORD   
)

Definition at line 841 of file winpos.c.

842 {
843  if (Style & WS_MINIMIZE)
844  return TRUE;
846  return TRUE;
848  return FALSE;
849  if (Style & WS_THICKFRAME)
850  return TRUE;
851  Style &= WS_CAPTION;
852  if (Style == WS_DLGFRAME || Style == WS_CAPTION)
853  return TRUE;
854  return FALSE;
855 }
#define WS_THICKFRAME
Definition: pedump.c:630
#define TRUE
Definition: types.h:120
#define WS_DLGFRAME
Definition: pedump.c:626
#define FALSE
Definition: types.h:117
#define WS_MINIMIZE
Definition: pedump.c:622
#define WS_EX_DLGMODALFRAME
Definition: pedump.c:645
#define WS_CAPTION
Definition: pedump.c:624
const DWORD Style
Definition: appswitch.c:71
#define WS_EX_STATICEDGE
Definition: winuser.h:403
const DWORD ExStyle
Definition: appswitch.c:72

Referenced by NC_DoNCPaint(), NC_HandleNCCalcSize(), UserDrawCaptionBar(), and UserGetWindowBorders().