ReactOS  0.4.15-dev-4914-g2220e56
defwnd.c File Reference
#include <win32k.h>
#include <windowsx.h>
Include dependency graph for defwnd.c:

Go to the source code of this file.

Functions

 DBG_DEFAULT_CHANNEL (UserDefwnd)
 
INT WINAPI DrawTextExWorker (HDC hdc, LPWSTR str, INT i_count, LPRECT rect, UINT flags, LPDRAWTEXTPARAMS dtp)
 
INT WINAPI DrawTextW (HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
 
HBRUSH FASTCALL DefWndControlColor (HDC hDC, UINT ctlType)
 
LRESULT FASTCALL DefWndHandleWindowPosChanging (PWND pWnd, WINDOWPOS *Pos)
 
LRESULT FASTCALL DefWndHandleWindowPosChanged (PWND pWnd, WINDOWPOS *Pos)
 
LRESULT FASTCALL DefWndHandleSysCommand (PWND pWnd, WPARAM wParam, LPARAM lParam)
 
PWND FASTCALL co_IntFindChildWindowToOwner (PWND Root, PWND Owner)
 
LRESULT DefWndHandleSetCursor (PWND pWnd, WPARAM wParam, LPARAM lParam)
 
VOID FASTCALL DefWndPrint (PWND pwnd, HDC hdc, ULONG uFlags)
 
BOOL UserPaintCaption (PWND pWnd, INT Flags)
 
LRESULT FASTCALL DefWndSetIcon (PWND pWnd, WPARAM wParam, LPARAM lParam)
 
LRESULT FASTCALL DefWndGetIcon (PWND pWnd, WPARAM wParam, LPARAM lParam)
 
VOID FASTCALL DefWndScreenshot (PWND pWnd)
 
LRESULT FASTCALL IntDefWindowProc (PWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL Ansi)
 

Function Documentation

◆ co_IntFindChildWindowToOwner()

PWND FASTCALL co_IntFindChildWindowToOwner ( PWND  Root,
PWND  Owner 
)

Definition at line 215 of file defwnd.c.

216 {
217  PWND Ret;
218  PWND Child, OwnerWnd;
219 
220  for(Child = Root->spwndChild; Child; Child = Child->spwndNext)
221  {
222  OwnerWnd = Child->spwndOwner;
223  if(!OwnerWnd)
224  continue;
225 
226  if (!(Child->style & WS_POPUP) ||
227  !(Child->style & WS_VISIBLE) ||
228  /* Fixes CMD pop up properties window from having foreground. */
229  Owner->head.pti->MessageQueue != Child->head.pti->MessageQueue)
230  continue;
231 
232  if(OwnerWnd == Owner)
233  {
234  Ret = Child;
235  return Ret;
236  }
237  }
238  return NULL;
239 }
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
Definition: wdffdo.h:533
struct _WND * spwndOwner
Definition: ntuser.h:694
root entry for file system trees
Definition: entries.h:148
Definition: ntuser.h:672
#define WS_POPUP
Definition: pedump.c:616
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ SaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ OwnerSize PSID Owner
Definition: rtlfuncs.h:1583
#define NULL
Definition: types.h:112
#define WS_VISIBLE
Definition: pedump.c:620

Referenced by DefWndHandleSetCursor().

◆ DBG_DEFAULT_CHANNEL()

DBG_DEFAULT_CHANNEL ( UserDefwnd  )

◆ DefWndControlColor()

HBRUSH FASTCALL DefWndControlColor ( HDC  hDC,
UINT  ctlType 
)

Definition at line 33 of file defwnd.c.

34 {
35  if (ctlType == CTLCOLOR_SCROLLBAR)
36  {
40  IntGdiSetBkColor(hDC, bk);
41 
42  /* if COLOR_WINDOW happens to be the same as COLOR_3DHILIGHT
43  * we better use 0x55aa bitmap brush to make scrollbar's background
44  * look different from the window background.
45  */
46  if ( bk == IntGetSysColor(COLOR_WINDOW))
47  return gpsi->hbrGray;
48 
50  return hb;
51  }
52 
54 
55  if ((ctlType == CTLCOLOR_EDIT) || (ctlType == CTLCOLOR_LISTBOX))
56  {
58  }
59  else
60  {
63  }
64 
66 }
#define COLOR_3DHILIGHT
Definition: winuser.h:931
HGDIOBJ FASTCALL IntGetSysColorBrush(INT Object)
Definition: stockobj.c:317
PSERVERINFO gpsi
Definition: imm.c:17
COLORREF FASTCALL IntGdiSetBkColor(_In_ HDC hDC, _In_ COLORREF Color)
#define CTLCOLOR_SCROLLBAR
Definition: winuser.h:950
#define COLOR_WINDOW
Definition: winuser.h:912
#define COLOR_3DFACE
Definition: winuser.h:923
#define COLOR_SCROLLBAR
Definition: winuser.h:906
COLORREF FASTCALL IntGdiSetTextColor(HDC hDC, COLORREF color)
Definition: dcutil.c:172
__kernel_entry W32KAPI BOOL APIENTRY NtGdiUnrealizeObject(_In_ HANDLE h)
DWORD COLORREF
Definition: windef.h:300
#define COLOR_WINDOWTEXT
Definition: winuser.h:915
#define CTLCOLOR_EDIT
Definition: winuser.h:946
DWORD FASTCALL IntGetSysColor(INT nIndex)
Definition: stockobj.c:323
#define CTLCOLOR_LISTBOX
Definition: winuser.h:947
static HDC hDC
Definition: 3dtext.c:33

Referenced by IntDefWindowProc(), and User32DefWindowProc().

◆ DefWndGetIcon()

LRESULT FASTCALL DefWndGetIcon ( PWND  pWnd,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 472 of file defwnd.c.

473 {
474  HICON hIconRet;
475  if ( wParam > ICON_SMALL2 )
476  {
478  return 0;
479  }
480  switch(wParam)
481  {
482  case ICON_BIG:
483  hIconRet = UserGetProp(pWnd, gpsi->atomIconProp, TRUE);
484  break;
485  case ICON_SMALL:
486  case ICON_SMALL2:
487  hIconRet = UserGetProp(pWnd, gpsi->atomIconSmProp, TRUE);
488  break;
490  }
491  return (LRESULT)hIconRet;
492 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define DEFAULT_UNREACHABLE
static HICON
Definition: imagelist.c:84
#define TRUE
Definition: types.h:120
PSERVERINFO gpsi
Definition: imm.c:17
WPARAM wParam
Definition: combotst.c:138
#define ICON_SMALL
Definition: tnclass.cpp:48
HANDLE FASTCALL UserGetProp(_In_ PWND Window, _In_ ATOM Atom, _In_ BOOLEAN SystemProp)
Definition: prop.c:46
ATOM atomIconProp
Definition: ntuser.h:1037
ATOM atomIconSmProp
Definition: ntuser.h:1036
LONG_PTR LRESULT
Definition: windef.h:209
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
Definition: error.c:28
#define ICON_BIG
Definition: tnclass.cpp:51

Referenced by IntDefWindowProc(), and User32DefWindowProc().

◆ DefWndHandleSetCursor()

LRESULT DefWndHandleSetCursor ( PWND  pWnd,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 242 of file defwnd.c.

243 {
244  PWND pwndPopUP = NULL;
245  WORD Msg = HIWORD(lParam);
246 
247  /* Not for child windows. */
248  if (UserHMGetHandle(pWnd) != (HWND)wParam)
249  {
250  return FALSE;
251  }
252 
253  switch((short)LOWORD(lParam))
254  {
255  case HTERROR:
256  {
259 
260  if (Msg == WM_LBUTTONDOWN)
261  {
262  // Find a pop up window to bring active.
264  if (pwndPopUP)
265  {
266  // Not a child pop up from desktop.
267  if ( pwndPopUP != UserGetDesktopWindow()->spwndChild )
268  {
269  // Get original active window.
270  PWND pwndOrigActive = gpqForeground->spwndActive;
271 
273 
274  UserRefObjectCo(pwndPopUP, &Ref);
275  //UserSetActiveWindow(pwndPopUP);
276  co_IntSetForegroundWindow(pwndPopUP); // HACK
277  UserDerefObjectCo(pwndPopUP);
278 
279  // If the change was made, break out.
280  if (pwndOrigActive != gpqForeground->spwndActive)
281  break;
282  }
283  }
284  }
286  if (Msg == WM_LBUTTONDOWN || Msg == WM_MBUTTONDOWN ||
287  Msg == WM_RBUTTONDOWN || Msg == WM_XBUTTONDOWN)
288  {
289  if (pwndPopUP)
290  {
291  FLASHWINFO fwi =
292  {sizeof(FLASHWINFO),
293  UserHMGetHandle(pwndPopUP),
294  FLASHW_ALL,
296  (gpsi->dtCaretBlink >> 3)};
297 
298  // Now shake that window!
299  IntFlashWindowEx(pwndPopUP, &fwi);
300  }
302  }
303  break;
304  }
305 
306  case HTCLIENT:
307  {
308  if (pWnd->pcls->spcur)
309  {
310  IntSystemSetCursor(pWnd->pcls->spcur);
311  }
312  return FALSE;
313  }
314 
315  case HTLEFT:
316  case HTRIGHT:
317  {
318  if (pWnd->style & WS_MAXIMIZE)
319  {
320  break;
321  }
322  IntSystemSetCursor(SYSTEMCUR(SIZEWE));
323  return TRUE;
324  }
325 
326  case HTTOP:
327  case HTBOTTOM:
328  {
329  if (pWnd->style & WS_MAXIMIZE)
330  {
331  break;
332  }
333  IntSystemSetCursor(SYSTEMCUR(SIZENS));
334  return TRUE;
335  }
336 
337  case HTTOPLEFT:
338  case HTBOTTOMRIGHT:
339  {
340  if (pWnd->style & WS_MAXIMIZE)
341  {
342  break;
343  }
344  IntSystemSetCursor(SYSTEMCUR(SIZENWSE));
345  return TRUE;
346  }
347 
348  case HTBOTTOMLEFT:
349  case HTTOPRIGHT:
350  {
351  if (pWnd->style & WS_MAXIMIZE)
352  {
353  break;
354  }
355  IntSystemSetCursor(SYSTEMCUR(SIZENESW));
356  return TRUE;
357  }
358  }
360  return FALSE;
361 }
PUSER_MESSAGE_QUEUE gpqForeground
Definition: focus.c:13
BOOL FASTCALL IntFlashWindowEx(PWND pWnd, PFLASHWINFO pfwi)
Definition: painting.c:1304
#define HTTOP
Definition: winuser.h:2470
#define HTLEFT
Definition: winuser.h:2467
BOOL FASTCALL UserPostMessage(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1346
PCURICON_OBJECT IntSystemSetCursor(PCURICON_OBJECT pcurNew)
Definition: cursoricon.c:230
#define WM_LBUTTONDOWN
Definition: winuser.h:1763
#define TRUE
Definition: types.h:120
DWORD dwForegroundFlashCount
Definition: sysparams.h:157
BOOLEAN FASTCALL co_WinPosSetWindowPos(PWND Window, HWND WndInsertAfter, INT x, INT y, INT cx, INT cy, UINT flags)
Definition: winpos.c:1721
PSERVERINFO gpsi
Definition: imm.c:17
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
Definition: object.h:27
#define HTBOTTOMLEFT
Definition: winuser.h:2474
struct _CURICON_OBJECT * spcur
Definition: ntuser.h:569
#define HTRIGHT
Definition: winuser.h:2469
WPARAM wParam
Definition: combotst.c:138
#define HTTOPLEFT
Definition: winuser.h:2471
PWND FASTCALL co_IntFindChildWindowToOwner(PWND Root, PWND Owner)
Definition: defwnd.c:215
#define FALSE
Definition: types.h:117
static __inline VOID UserDerefObjectCo(PVOID obj)
Definition: object.h:40
Definition: object.h:3
#define HTERROR
Definition: winuser.h:2452
#define WM_RBUTTONDOWN
Definition: winuser.h:1766
HWND hwndSAS
Definition: winsta.c:24
#define UserHMGetHandle(obj)
Definition: ntuser.h:222
#define HTTOPRIGHT
Definition: winuser.h:2472
#define SWP_NOACTIVATE
Definition: winuser.h:1232
unsigned short WORD
Definition: ntddk_ex.h:93
SPIVALUES gspv
Definition: sysparams.c:17
#define HTBOTTOM
Definition: winuser.h:2473
PWND FASTCALL UserGetDesktopWindow(VOID)
Definition: desktop.c:1386
#define WM_LOGONNOTIFY
Definition: undocuser.h:37
#define HTBOTTOMRIGHT
Definition: winuser.h:2475
#define SWP_NOSIZE
Definition: winuser.h:1235
Definition: ntuser.h:672
#define WM_MBUTTONDOWN
Definition: winuser.h:1769
#define NULL
Definition: types.h:112
#define HIWORD(l)
Definition: typedefs.h:247
struct @1589 Msg[]
#define SYSTEMCUR(func)
Definition: cursoricon.h:129
#define SWP_NOMOVE
Definition: winuser.h:1234
#define LN_MESSAGE_BEEP
Definition: undocuser.h:119
#define HTCLIENT
Definition: winuser.h:2455
BOOL FASTCALL co_IntSetForegroundWindow(PWND Window)
Definition: focus.c:1545
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82
PCLS pcls
Definition: ntuser.h:699
#define WS_MAXIMIZE
Definition: pedump.c:623
DWORD style
Definition: ntuser.h:685

Referenced by IntDefWindowProc().

◆ DefWndHandleSysCommand()

LRESULT FASTCALL DefWndHandleSysCommand ( PWND  pWnd,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 124 of file defwnd.c.

125 {
126  LRESULT lResult = 0;
127  BOOL Hook = FALSE;
128 
129  if (ISITHOOKED(WH_CBT) || (pWnd->head.rpdesk->pDeskInfo->fsHooks & HOOKID_TO_FLAG(WH_CBT)))
130  {
131  Hook = TRUE;
133 
134  if (lResult) return lResult;
135  }
136 
137  switch (wParam & 0xfff0)
138  {
139  case SC_MOVE:
140  case SC_SIZE:
141  DefWndDoSizeMove(pWnd, wParam);
142  break;
143 
144  case SC_MINIMIZE:
145  if (UserHMGetHandle(pWnd) == UserGetActiveWindow())
146  IntShowOwnedPopups(pWnd,FALSE); // This is done in ShowWindow! Need to retest!
148  break;
149 
150  case SC_MAXIMIZE:
151  if (((pWnd->style & WS_MINIMIZE) != 0) && UserHMGetHandle(pWnd) == UserGetActiveWindow())
152  IntShowOwnedPopups(pWnd,TRUE);
154  break;
155 
156  case SC_RESTORE:
157  if (((pWnd->style & WS_MINIMIZE) != 0) && UserHMGetHandle(pWnd) == UserGetActiveWindow())
158  IntShowOwnedPopups(pWnd,TRUE);
160  break;
161 
162  case SC_CLOSE:
163  return co_IntSendMessage(UserHMGetHandle(pWnd), WM_CLOSE, 0, 0);
164 
165  case SC_SCREENSAVE:
166  ERR("Screensaver Called!\n");
167  UserPostMessage(hwndSAS, WM_LOGONNOTIFY, LN_START_SCREENSAVE, 0); // always lParam 0 == not Secure
168  break;
169 
170  case SC_HOTKEY:
171  {
173 
174  pWnd = ValidateHwndNoErr((HWND)lParam);
175  if (pWnd)
176  {
177  if (pWnd->spwndLastActive)
178  {
179  pWnd = pWnd->spwndLastActive;
180  }
181  UserRefObjectCo(pWnd, &Ref);
183  UserDerefObjectCo(pWnd);
184  if (pWnd->style & WS_MINIMIZE)
185  {
187  }
188  }
189  }
190  break;
191 // case SC_DEFAULT:
192  case SC_MOUSEMENU:
193  {
194  POINT Pt;
195  Pt.x = (short)LOWORD(lParam);
196  Pt.y = (short)HIWORD(lParam);
197  MENU_TrackMouseMenuBar(pWnd, wParam & 0x000f, Pt);
198  }
199  break;
200 
201  case SC_KEYMENU:
203  break;
204 
205 
206  default:
207  // We do not support anything else here so we should return normal even when sending a hook.
208  return 0;
209  }
210 
211  return(Hook ? 1 : 0); // Don't call us again from user space.
212 }
#define HCBT_SYSCOMMAND
Definition: winuser.h:63
BOOL FASTCALL UserPostMessage(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1346
#define HOOKID_TO_FLAG(HookId)
Definition: hook.h:5
#define SC_KEYMENU
Definition: winuser.h:2576
struct _DESKTOP * rpdesk
Definition: ntuser.h:186
#define SC_RESTORE
Definition: winuser.h:2578
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
#define TRUE
Definition: types.h:120
HWND FASTCALL UserGetActiveWindow(VOID)
Definition: focus.c:1424
#define SC_SCREENSAVE
Definition: mmsystem.h:933
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
Definition: object.h:27
BOOL FASTCALL IntShowOwnedPopups(PWND OwnerWnd, BOOL fShow)
Definition: window.c:4647
#define SC_HOTKEY
Definition: winuser.h:2581
#define SC_MOUSEMENU
Definition: winuser.h:2575
#define SW_RESTORE
Definition: winuser.h:773
WPARAM wParam
Definition: combotst.c:138
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
#define FALSE
Definition: types.h:117
#define WS_MINIMIZE
Definition: pedump.c:622
unsigned int BOOL
Definition: ntddk_ex.h:94
static __inline VOID UserDerefObjectCo(PVOID obj)
Definition: object.h:40
#define SC_MAXIMIZE
Definition: winuser.h:2568
THRDESKHEAD head
Definition: ntuser.h:674
#define LN_START_SCREENSAVE
Definition: undocuser.h:120
Definition: object.h:3
#define WH_CBT
Definition: winuser.h:35
BOOLEAN FASTCALL co_WinPosShowWindow(PWND Wnd, INT Cmd)
Definition: winpos.c:2491
HWND hwndSAS
Definition: winsta.c:24
#define UserHMGetHandle(obj)
Definition: ntuser.h:222
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define ValidateHwndNoErr(hwnd)
Definition: precomp.h:84
#define WM_CLOSE
Definition: winuser.h:1608
#define ISITHOOKED(HookId)
Definition: hook.h:6
#define SW_MINIMIZE
Definition: winuser.h:770
LRESULT APIENTRY co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
Definition: hook.c:1103
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1446
#define WM_LOGONNOTIFY
Definition: undocuser.h:37
#define SC_MINIMIZE
Definition: winuser.h:2566
#define ERR(fmt,...)
Definition: debug.h:110
VOID MENU_TrackKbdMenuBar(PWND pwnd, UINT wParam, WCHAR wChar)
Definition: menu.c:4498
struct _WND * spwndLastActive
Definition: ntuser.h:718
VOID FASTCALL DefWndDoSizeMove(PWND pwnd, WORD wParam)
Definition: nonclient.c:239
#define SC_SIZE
Definition: winuser.h:2564
#define SC_MOVE
Definition: winuser.h:2565
#define SC_CLOSE
Definition: winuser.h:2572
#define HIWORD(l)
Definition: typedefs.h:247
VOID MENU_TrackMouseMenuBar(PWND pWnd, ULONG ht, POINT pt)
Definition: menu.c:4468
LONG_PTR LRESULT
Definition: windef.h:209
BOOL FASTCALL co_IntSetForegroundWindow(PWND Window)
Definition: focus.c:1545
#define SW_MAXIMIZE
Definition: winuser.h:766
#define WM_SYSCOMMAND
Definition: winuser.h:1728
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82
DWORD style
Definition: ntuser.h:685

Referenced by IntDefWindowProc(), and User32DefWindowProc().

◆ DefWndHandleWindowPosChanged()

LRESULT FASTCALL DefWndHandleWindowPosChanged ( PWND  pWnd,
WINDOWPOS Pos 
)

Definition at line 95 of file defwnd.c.

96 {
97  RECT Rect;
98  LONG style = pWnd->style;
99 
100  IntGetClientRect(pWnd, &Rect);
101  IntMapWindowPoints(pWnd, (style & WS_CHILD ? IntGetParent(pWnd) : NULL), (LPPOINT) &Rect, 2);
102 
103  if (!(Pos->flags & SWP_NOCLIENTMOVE))
104  {
106  }
107 
108  if (!(Pos->flags & SWP_NOCLIENTSIZE) || (Pos->flags & SWP_STATECHANGED))
109  {
111  else
112  {
114  co_IntSendMessage(UserHMGetHandle(pWnd), WM_SIZE, wp, MAKELONG(Rect.right - Rect.left, Rect.bottom - Rect.top));
115  }
116  }
117  return 0;
118 }
#define SIZE_MAXIMIZED
Definition: winuser.h:2487
#define SIZE_RESTORED
Definition: winuser.h:2485
ush Pos
Definition: deflate.h:92
#define WM_MOVE
Definition: winuser.h:1597
UINT_PTR WPARAM
Definition: windef.h:207
#define WS_CHILD
Definition: pedump.c:617
VOID FASTCALL IntGetClientRect(PWND WindowObject, RECTL *Rect)
Definition: winpos.c:91
#define WS_MINIMIZE
Definition: pedump.c:622
long LONG
Definition: pedump.c:60
#define MAKELONG(a, b)
Definition: typedefs.h:249
#define UserHMGetHandle(obj)
Definition: ntuser.h:222
#define WM_SIZE
Definition: winuser.h:1598
#define SWP_STATECHANGED
Definition: msg.c:42
#define SIZE_MINIMIZED
Definition: winuser.h:2486
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1446
PWND FASTCALL IntGetParent(PWND Wnd)
Definition: window.c:208
INT FASTCALL IntMapWindowPoints(PWND FromWnd, PWND ToWnd, LPPOINT lpPoints, UINT cPoints)
Definition: winpos.c:143
#define NULL
Definition: types.h:112
#define SWP_NOCLIENTMOVE
Definition: msg.h:30
Arabic default style
Definition: afstyles.h:93
#define SWP_NOCLIENTSIZE
Definition: msg.h:29
struct Rect Rect
#define WS_MAXIMIZE
Definition: pedump.c:623
DWORD style
Definition: ntuser.h:685

Referenced by IntDefWindowProc().

◆ DefWndHandleWindowPosChanging()

LRESULT FASTCALL DefWndHandleWindowPosChanging ( PWND  pWnd,
WINDOWPOS Pos 
)

Definition at line 69 of file defwnd.c.

70 {
71  POINT maxTrack, minTrack;
72  LONG style = pWnd->style;
73 
74  if (Pos->flags & SWP_NOSIZE) return 0;
75  if ((style & WS_THICKFRAME) || ((style & (WS_POPUP | WS_CHILD)) == 0))
76  {
77  co_WinPosGetMinMaxInfo(pWnd, NULL, NULL, &minTrack, &maxTrack);
78  Pos->cx = min(Pos->cx, maxTrack.x);
79  Pos->cy = min(Pos->cy, maxTrack.y);
80  if (!(style & WS_MINIMIZE))
81  {
82  if (Pos->cx < minTrack.x) Pos->cx = minTrack.x;
83  if (Pos->cy < minTrack.y) Pos->cy = minTrack.y;
84  }
85  }
86  else
87  {
88  Pos->cx = max(Pos->cx, 0);
89  Pos->cy = max(Pos->cy, 0);
90  }
91  return 0;
92 }
#define WS_THICKFRAME
Definition: pedump.c:630
#define max(a, b)
Definition: svc.c:63
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
ush Pos
Definition: deflate.h:92
#define WS_CHILD
Definition: pedump.c:617
#define WS_MINIMIZE
Definition: pedump.c:622
long LONG
Definition: pedump.c:60
UINT FASTCALL co_WinPosGetMinMaxInfo(PWND Window, POINT *MaxSize, POINT *MaxPos, POINT *MinTrack, POINT *MaxTrack)
Definition: winpos.c:932
#define SWP_NOSIZE
Definition: winuser.h:1235
#define min(a, b)
Definition: monoChain.cc:55
#define WS_POPUP
Definition: pedump.c:616
#define NULL
Definition: types.h:112
Arabic default style
Definition: afstyles.h:93
DWORD style
Definition: ntuser.h:685

Referenced by IntDefWindowProc().

◆ DefWndPrint()

VOID FASTCALL DefWndPrint ( PWND  pwnd,
HDC  hdc,
ULONG  uFlags 
)

Definition at line 363 of file defwnd.c.

364 {
365  /*
366  * Visibility flag.
367  */
368  if ( (uFlags & PRF_CHECKVISIBLE) &&
369  !IntIsWindowVisible(pwnd) )
370  return;
371 
372  /*
373  * Unimplemented flags.
374  */
375  if ( (uFlags & PRF_CHILDREN) ||
376  (uFlags & PRF_OWNED) ||
377  (uFlags & PRF_NONCLIENT) )
378  {
379  FIXME("WM_PRINT message with unsupported flags\n");
380  }
381 
382  /*
383  * Background
384  */
385  if ( uFlags & PRF_ERASEBKGND)
387 
388  /*
389  * Client area
390  */
391  if ( uFlags & PRF_CLIENT)
393 }
UINT_PTR WPARAM
Definition: windef.h:207
UINT uFlags
Definition: api.c:59
#define WM_PRINTCLIENT
Definition: richedit.h:70
#define FIXME(fmt,...)
Definition: debug.h:111
#define UserHMGetHandle(obj)
Definition: ntuser.h:222
#define PRF_ERASEBKGND
Definition: winuser.h:2506
#define PRF_NONCLIENT
Definition: winuser.h:2504
#define PRF_CHECKVISIBLE
Definition: winuser.h:2503
BOOL FASTCALL IntIsWindowVisible(PWND Wnd)
Definition: window.c:193
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1446
HDC hdc
Definition: main.c:9
#define PRF_OWNED
Definition: winuser.h:2508
#define WM_ERASEBKGND
Definition: winuser.h:1612
#define PRF_CLIENT
Definition: winuser.h:2505
#define PRF_CHILDREN
Definition: winuser.h:2507

Referenced by IntDefWindowProc().

◆ DefWndScreenshot()

VOID FASTCALL DefWndScreenshot ( PWND  pWnd)

Definition at line 495 of file defwnd.c.

496 {
497  RECT rect;
498  HDC hdc;
499  INT w;
500  INT h;
502  HDC hdc2;
503  SETCLIPBDATA scd = {FALSE, FALSE};
504 
507 
508  hdc = UserGetWindowDC(pWnd);
509  IntGetWindowRect(pWnd, &rect);
510  w = rect.right - rect.left;
511  h = rect.bottom - rect.top;
512 
516 
517  NtGdiBitBlt(hdc2, 0, 0, w, h, hdc, 0, 0, SRCCOPY, 0, 0);
518 
520 
521  UserReleaseDC(pWnd, hdc, FALSE);
522  UserReleaseDC(pWnd, hdc2, FALSE);
523 
525 }
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiCreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
static HDC
Definition: imagelist.c:92
__kernel_entry W32KAPI HBITMAP APIENTRY NtGdiSelectBitmap(_In_ HDC hdc, _In_ HBITMAP hbm)
HDC FASTCALL UserGetWindowDC(PWND Wnd)
Definition: windc.c:947
BOOL NTAPI UserOpenClipboard(HWND hWnd)
Definition: clipboard.c:488
int32_t INT
Definition: typedefs.h:58
& rect
Definition: startmenu.cpp:1413
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
HDC hdc2
Definition: SelectObject.c:10
#define FALSE
Definition: types.h:117
BOOL NTAPI UserCloseClipboard(VOID)
Definition: clipboard.c:545
#define CF_BITMAP
Definition: constants.h:397
__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)
#define UserHMGetHandle(obj)
Definition: ntuser.h:222
HDC hdc
Definition: main.c:9
__kernel_entry W32KAPI HDC APIENTRY NtGdiCreateCompatibleDC(_In_opt_ HDC hdc)
BOOL NTAPI UserEmptyClipboard(VOID)
Definition: clipboard.c:680
INT FASTCALL UserReleaseDC(PWND Window, HDC hDc, BOOL EndPaint)
Definition: windc.c:918
static HBITMAP hbitmap
static HBITMAP
Definition: button.c:44
#define SRCCOPY
Definition: wingdi.h:333
HANDLE NTAPI UserSetClipboardData(UINT fmt, HANDLE hData, PSETCLIPBDATA scd)
Definition: clipboard.c:1023
BOOL FASTCALL IntGetWindowRect(PWND Wnd, RECTL *Rect)
Definition: winpos.c:120

Referenced by IntDefWindowProc().

◆ DefWndSetIcon()

LRESULT FASTCALL DefWndSetIcon ( PWND  pWnd,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 434 of file defwnd.c.

435 {
436  HICON hIcon, hIconSmall, hIconOld;
437 
438  if ( wParam > ICON_SMALL2 )
439  {
441  return 0;
442  }
443  hIconSmall = UserGetProp(pWnd, gpsi->atomIconSmProp, TRUE);
445 
446  hIconOld = wParam == ICON_BIG ? hIcon : hIconSmall;
447 
448  switch(wParam)
449  {
450  case ICON_BIG:
451  hIcon = (HICON)lParam;
452  break;
453  case ICON_SMALL:
454  hIconSmall = (HICON)lParam;
455  break;
456  case ICON_SMALL2:
457  ERR("FIXME: Set ICON_SMALL2 support!\n");
458  default:
459  break;
460  }
461 
462  UserSetProp(pWnd, gpsi->atomIconProp, hIcon, TRUE);
463  UserSetProp(pWnd, gpsi->atomIconSmProp, hIconSmall, TRUE);
464 
465  if ((pWnd->style & WS_CAPTION ) == WS_CAPTION)
466  UserPaintCaption(pWnd, DC_ICON);
467 
468  return (LRESULT)hIconOld;
469 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
static HICON
Definition: imagelist.c:84
#define TRUE
Definition: types.h:120
PSERVERINFO gpsi
Definition: imm.c:17
WPARAM wParam
Definition: combotst.c:138
#define DC_ICON
Definition: winuser.h:429
#define ICON_SMALL
Definition: tnclass.cpp:48
#define WS_CAPTION
Definition: pedump.c:624
HANDLE FASTCALL UserGetProp(_In_ PWND Window, _In_ ATOM Atom, _In_ BOOLEAN SystemProp)
Definition: prop.c:46
ATOM atomIconProp
Definition: ntuser.h:1037
#define ERR(fmt,...)
Definition: debug.h:110
HICON hIcon
Definition: msconfig.c:44
ATOM atomIconSmProp
Definition: ntuser.h:1036
BOOL UserPaintCaption(PWND pWnd, INT Flags)
Definition: defwnd.c:396
LONG_PTR LRESULT
Definition: windef.h:209
LPARAM lParam
Definition: combotst.c:139
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
Definition: error.c:28
#define ICON_BIG
Definition: tnclass.cpp:51
DWORD style
Definition: ntuser.h:685

Referenced by IntDefWindowProc().

◆ DrawTextExWorker()

INT WINAPI DrawTextExWorker ( HDC  hdc,
LPWSTR  str,
INT  i_count,
LPRECT  rect,
UINT  flags,
LPDRAWTEXTPARAMS  dtp 
)

Definition at line 1071 of file text.c.

1077 {
1078  SIZE size;
1079  const WCHAR *strPtr;
1080  WCHAR *retstr, *p_retstr;
1081  size_t size_retstr;
1083  int len, lh, count=i_count;
1084  TEXTMETRICW tm;
1085  int lmargin = 0, rmargin = 0;
1086  int x = rect->left, y = rect->top;
1087  int width = rect->right - rect->left;
1088  int max_width = 0;
1089  int last_line;
1090  int tabwidth /* to keep gcc happy */ = 0;
1091  int prefix_offset;
1092  ellipsis_data ellip;
1093  BOOL invert_y=FALSE;
1094 
1095  HRGN hrgn = 0;
1096 
1097 #ifdef _WIN32K_
1098  TRACE("%S, %d, %08x\n", str, count, flags);
1099 #else
1100  TRACE("%s, %d, [%s] %08x\n", debugstr_wn (str, count), count,
1102 #endif
1103  if (dtp) TRACE("Params: iTabLength=%d, iLeftMargin=%d, iRightMargin=%d\n",
1104  dtp->iTabLength, dtp->iLeftMargin, dtp->iRightMargin);
1105 
1106  if (!str) return 0;
1107 
1108  strPtr = str;
1109 
1110  if (flags & DT_SINGLELINE)
1111  flags &= ~DT_WORDBREAK;
1112 #ifdef _WIN32K_
1114 #else
1115  GetTextMetricsW(hdc, &tm);
1116 #endif
1117  if (flags & DT_EXTERNALLEADING)
1118  lh = tm.tmHeight + tm.tmExternalLeading;
1119  else
1120  lh = tm.tmHeight;
1121 
1122  if (str[0] && count == 0)
1123  return lh;
1124 
1125  if (dtp && dtp->cbSize != sizeof(DRAWTEXTPARAMS))
1126  return 0;
1127 #ifdef _WIN32K_
1129  {
1130  SIZE window_ext, viewport_ext;
1131  GreGetWindowExtEx(hdc, &window_ext);
1132  GreGetViewportExtEx(hdc, &viewport_ext);
1133  if ((window_ext.cy > 0) != (viewport_ext.cy > 0))
1134  invert_y = TRUE;
1135  }
1136 #else
1138  {
1139  SIZE window_ext, viewport_ext;
1140  GetWindowExtEx(hdc, &window_ext);
1141  GetViewportExtEx(hdc, &viewport_ext);
1142  if ((window_ext.cy > 0) != (viewport_ext.cy > 0))
1143  invert_y = TRUE;
1144  }
1145 #endif
1146  if (count == -1)
1147  {
1148 #ifdef _WIN32K_
1149  count = wcslen(str);
1150 #else
1151  count = strlenW(str);
1152 #endif
1153  if (count == 0)
1154  {
1155  if( flags & DT_CALCRECT)
1156  {
1157  rect->right = rect->left;
1158  if( flags & DT_SINGLELINE)
1159  rect->bottom = rect->top + (invert_y ? -lh : lh);
1160  else
1161  rect->bottom = rect->top;
1162  }
1163  return lh;
1164  }
1165  }
1166 
1167  if (dtp)
1168  {
1169  lmargin = dtp->iLeftMargin;
1170  rmargin = dtp->iRightMargin;
1171  if (!(flags & (DT_CENTER | DT_RIGHT)))
1172  x += lmargin;
1173  dtp->uiLengthDrawn = 0; /* This param RECEIVES number of chars processed */
1174  }
1175 
1176  if (flags & DT_EXPANDTABS)
1177  {
1178  int tabstop = ((flags & DT_TABSTOP) && dtp && dtp->iTabLength) ? dtp->iTabLength : 8;
1179  tabwidth = tm.tmAveCharWidth * tabstop;
1180  }
1181 
1182  if (flags & DT_CALCRECT) flags |= DT_NOCLIP;
1183 #ifndef _WIN32K_
1184  if (!(flags & DT_NOCLIP) )
1185  {
1186  int hasClip;
1187  hrgn = CreateRectRgn(0,0,0,0);
1188  if (hrgn)
1189  {
1190  hasClip = GetClipRgn(hdc, hrgn);
1191  // If the region to be retrieved is NULL, the return value is 0.
1192  if (hasClip != 1)
1193  {
1194  DeleteObject(hrgn);
1195  hrgn = NULL;
1196  }
1197  IntersectClipRect(hdc, rect->left, rect->top, rect->right, rect->bottom);
1198  }
1199  }
1200 #else
1201  if (!(flags & DT_NOCLIP) )
1202  {
1203  int hasClip;
1204  hrgn = NtGdiCreateRectRgn(0,0,0,0);
1205  if (hrgn)
1206  {
1207  hasClip = NtGdiGetRandomRgn(hdc, hrgn, CLIPRGN);
1208  if (hasClip != 1)
1209  {
1211  hrgn = NULL;
1212  }
1213  NtGdiIntersectClipRect(hdc, rect->left, rect->top, rect->right, rect->bottom);
1214  }
1215  }
1216 #endif
1217  if (flags & DT_MODIFYSTRING)
1218  {
1219  size_retstr = (count + 4) * sizeof (WCHAR);
1220 #ifdef _WIN32K_
1221  retstr = ExAllocatePoolWithTag(PagedPool, size_retstr, USERTAG_RTL);
1222 #else
1223  retstr = HeapAlloc(GetProcessHeap(), 0, size_retstr);
1224 #endif
1225  if (!retstr) return 0;
1226  memcpy (retstr, str, size_retstr);
1227  }
1228  else
1229  {
1230  size_retstr = 0;
1231  retstr = NULL;
1232  }
1233  p_retstr = retstr;
1234 
1235  do
1236  {
1237  len = sizeof(line)/sizeof(line[0]);
1238  if (invert_y)
1239  last_line = !(flags & DT_NOCLIP) && y - ((flags & DT_EDITCONTROL) ? 2*lh-1 : lh) < rect->bottom;
1240  else
1241  last_line = !(flags & DT_NOCLIP) && y + ((flags & DT_EDITCONTROL) ? 2*lh-1 : lh) > rect->bottom;
1242  strPtr = TEXT_NextLineW(hdc, strPtr, &count, line, &len, width, flags, &size, last_line, &p_retstr, tabwidth, &prefix_offset, &ellip);
1243 
1244 #ifdef __REACTOS__
1245  if (flags & DT_CENTER)
1246  {
1247  if (((rect->right - rect->left) < size.cx) && (flags & DT_CALCRECT))
1248  {
1249  x = rect->left + size.cx;
1250  }
1251  else
1252  {
1253  x = (rect->left + rect->right - size.cx) / 2;
1254  }
1255  }
1256 #else
1257  if (flags & DT_CENTER) x = (rect->left + rect->right -
1258  size.cx) / 2;
1259 #endif
1260  else if (flags & DT_RIGHT) x = rect->right - size.cx;
1261 
1262  if (flags & DT_SINGLELINE)
1263  {
1264 #ifdef __REACTOS__
1265  if (flags & DT_VCENTER) y = rect->top +
1266  (rect->bottom - rect->top + (invert_y ? size.cy : -size.cy)) / 2;
1267  else if (flags & DT_BOTTOM)
1268  y = rect->bottom + (invert_y ? size.cy : -size.cy);
1269 #else
1270  if (flags & DT_VCENTER) y = rect->top +
1271  (rect->bottom - rect->top) / 2 - size.cy / 2;
1272  else if (flags & DT_BOTTOM) y = rect->bottom - size.cy;
1273 #endif
1274  }
1275 
1276  if (!(flags & DT_CALCRECT))
1277  {
1278  const WCHAR *str = line;
1279  int xseg = x;
1280  while (len)
1281  {
1282  int len_seg;
1283  SIZE size;
1284  if ((flags & DT_EXPANDTABS))
1285  {
1286  const WCHAR *p;
1287  p = str; while (p < str+len && *p != TAB) p++;
1288  len_seg = p - str;
1289  if (len_seg != len &&
1290 #ifdef _WIN32K_
1291  !GreGetTextExtentW(hdc, str, len_seg, &size, 0))
1292 #else
1293  !GetTextExtentPointW(hdc, str, len_seg, &size))
1294 #endif
1295  {
1296 #ifdef _WIN32K_
1297  ExFreePoolWithTag(retstr, USERTAG_RTL);
1298 #else
1299  HeapFree (GetProcessHeap(), 0, retstr);
1300 #endif
1301  return 0;
1302  }
1303  }
1304  else
1305  len_seg = len;
1306 #ifdef _WIN32K_
1307  if (!UserExtTextOutW( hdc, xseg, y,
1308  ((flags & DT_NOCLIP) ? 0 : ETO_CLIPPED) |
1309  ((flags & DT_RTLREADING) ? ETO_RTLREADING : 0),
1310  rect, str, len_seg))
1311 #else
1312  if (!ExtTextOutW( hdc, xseg, y,
1313  ((flags & DT_NOCLIP) ? 0 : ETO_CLIPPED) |
1314  ((flags & DT_RTLREADING) ? ETO_RTLREADING : 0),
1315  rect, str, len_seg, NULL ))
1316 #endif
1317  {
1318 #ifdef _WIN32K_
1319  ExFreePoolWithTag(retstr, USERTAG_RTL);
1320 #else
1321  HeapFree (GetProcessHeap(), 0, retstr);
1322 #endif
1323  return 0;
1324  }
1325  if (prefix_offset != -1 && prefix_offset < len_seg)
1326  {
1327  TEXT_DrawUnderscore (hdc, xseg, y + tm.tmAscent + 1, str, prefix_offset, (flags & DT_NOCLIP) ? NULL : rect);
1328  }
1329  len -= len_seg;
1330  str += len_seg;
1331  if (len)
1332  {
1333  assert ((flags & DT_EXPANDTABS) && *str == TAB);
1334  len--; str++;
1335  xseg += ((size.cx/tabwidth)+1)*tabwidth;
1336  if (prefix_offset != -1)
1337  {
1338  if (prefix_offset < len_seg)
1339  {
1340  /* We have just drawn an underscore; we ought to
1341  * figure out where the next one is. I am going
1342  * to leave it for now until I have a better model
1343  * for the line, which will make reprefixing easier.
1344  * This is where ellip would be used.
1345  */
1346  prefix_offset = -1;
1347  }
1348  else
1349  prefix_offset -= len_seg;
1350  }
1351  }
1352  }
1353  }
1354  else if (size.cx > max_width)
1355  max_width = size.cx;
1356 
1357  y += invert_y ? -lh : lh;
1358  if (dtp)
1359  dtp->uiLengthDrawn += len;
1360  }
1361  while (strPtr && !last_line);
1362 
1363 #ifndef _WIN32K_
1364  if (!(flags & DT_NOCLIP) )
1365  {
1366  SelectClipRgn(hdc, hrgn); // This should be NtGdiExtSelectClipRgn, but due to ReactOS build rules this option is next:
1367  GdiFlush(); // Flush the batch and level up! See CORE-16498.
1368  if (hrgn)
1369  {
1370  DeleteObject(hrgn);
1371  }
1372  }
1373 #else
1374  if (!(flags & DT_NOCLIP) )
1375  {
1377  if (hrgn)
1378  {
1380  }
1381  }
1382 #endif
1383 
1384  if (flags & DT_CALCRECT)
1385  {
1386  rect->right = rect->left + max_width;
1387  rect->bottom = y;
1388  if (dtp)
1389  rect->right += lmargin + rmargin;
1390  }
1391  if (retstr)
1392  {
1393  memcpy (str, retstr, size_retstr);
1394 #ifdef _WIN32K_
1395  ExFreePoolWithTag(retstr, USERTAG_RTL);
1396 #else
1397  HeapFree (GetProcessHeap(), 0, retstr);
1398 #endif
1399  }
1400  return y - rect->top;
1401 }
__kernel_entry W32KAPI HRGN APIENTRY NtGdiCreateRectRgn(_In_ INT xLeft, _In_ INT yTop, _In_ INT xRight, _In_ INT yBottom)
#define DT_EXPANDTABS
Definition: winuser.h:532
GLint GLint GLsizei width
Definition: gl.h:1546
#define DT_TABSTOP
Definition: winuser.h:541
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
Definition: gdiobj.c:1158
static void TEXT_DrawUnderscore(HDC hdc, int x, int y, const WCHAR *str, int offset, const RECT *rect)
Definition: text.c:894
#define DT_RTLREADING
Definition: winuser.h:539
__kernel_entry W32KAPI INT APIENTRY NtGdiIntersectClipRect(_In_ HDC hdc, _In_ INT xLeft, _In_ INT yTop, _In_ INT xRight, _In_ INT yBottom)
Definition: cliprgn.c:486
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
int WINAPI SelectClipRgn(_In_ HDC, _In_opt_ HRGN)
#define TRUE
Definition: types.h:120
__kernel_entry W32KAPI INT APIENTRY NtGdiExtSelectClipRgn(_In_ HDC hdc, _In_opt_ HRGN hrgn, _In_ INT iMode)
GLuint GLuint GLsizei count
Definition: gl.h:1545
#define DT_WORDBREAK
Definition: winuser.h:544
BOOL FASTCALL GreGetTextExtentW(HDC hDC, LPCWSTR lpwsz, INT cwc, LPSIZE psize, UINT flOpts)
Definition: text.c:78
int WINAPI IntersectClipRect(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
BOOL WINAPI GreGetViewportExtEx(_In_ HDC hdc, _Out_ LPSIZE lpSize)
Definition: coord.c:1416
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
#define DT_RIGHT
Definition: winuser.h:538
if(dx==0 &&dy==0)
Definition: linetemp.h:174
& rect
Definition: startmenu.cpp:1413
#define FALSE
Definition: types.h:117
#define DT_CALCRECT
Definition: winuser.h:526
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TAB
Definition: text.c:109
BOOL WINAPI ExtTextOutW(_In_ HDC hdc, _In_ INT x, _In_ INT y, _In_ UINT fuOptions, _In_opt_ const RECT *lprc, _In_reads_opt_(cwc) LPCWSTR lpString, _In_ UINT cwc, _In_reads_opt_(cwc) const INT *lpDx)
Definition: text.c:485
const WCHAR * str
Definition: parser.c:48
#define assert(e)
Definition: text.c:47
#define ETO_CLIPPED
Definition: wingdi.h:648
#define DT_VCENTER
Definition: winuser.h:543
HRGN WINAPI CreateRectRgn(_In_ int, _In_ int, _In_ int, _In_ int)
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
BOOL WINAPI GetViewportExtEx(_In_ HDC, _Out_ LPSIZE)
Definition: coord.c:351
BOOL WINAPI GreGetTextMetricsW(_In_ HDC hdc, _Out_ LPTEXTMETRICW lptm)
Definition: text.c:193
__wchar_t WCHAR
Definition: xmlstorage.h:180
int WINAPI GetGraphicsMode(_In_ HDC)
BOOL WINAPI GetWindowExtEx(_In_ HDC, _Out_ LPSIZE)
Definition: coord.c:411
const char * wine_dbgstr_rect(const RECT *rect)
#define CLIPRGN
Definition: precomp.h:18
int iRightMargin
Definition: winuser.h:3080
GLbitfield flags
Definition: glext.h:7161
#define GM_COMPATIBLE
Definition: wingdi.h:864
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
BOOL UserExtTextOutW(HDC hdc, INT x, INT y, UINT flags, PRECTL lprc, LPCWSTR lpString, UINT count)
BOOL WINAPI GetTextMetricsW(_In_ HDC hdc, _Out_ LPTEXTMETRICW lptm)
Definition: text.c:221
HDC hdc
Definition: main.c:9
static HRGN hrgn
Definition: win.c:55
BOOL APIENTRY GetTextExtentPointW(_In_ HDC hdc, _In_reads_(cchString) LPCWSTR lpString, _In_ INT cchString, _Out_ LPSIZE lpsz)
Definition: text.c:268
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
Definition: time.h:68
IN PCTCH line
Definition: pager.h:36
#define debugstr_wn
Definition: kernel32.h:33
static const WCHAR * TEXT_NextLineW(HDC hdc, const WCHAR *str, int *count, WCHAR *dest, int *len, int width, DWORD format, SIZE *retsize, int last_line, WCHAR **p_retstr, int tabwidth, int *pprefix_offset, ellipsis_data *pellip)
Definition: text.c:666
#define RGN_COPY
Definition: wingdi.h:357
BOOL WINAPI GdiFlush(void)
Definition: misc.c:44
#define DT_NOCLIP
Definition: winuser.h:536
#define DT_SINGLELINE
Definition: winuser.h:540
#define DT_EXTERNALLEADING
Definition: winuser.h:533
BOOL WINAPI GreGetWindowExtEx(_In_ HDC hdc, _Out_ LPSIZE lpSize)
Definition: coord.c:1407
#define NULL
Definition: types.h:112
__kernel_entry W32KAPI INT APIENTRY NtGdiGetRandomRgn(_In_ HDC hdc, _In_ HRGN hrgn, _In_ INT iRgn)
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define USERTAG_RTL
Definition: tags.h:270
UINT uiLengthDrawn
Definition: winuser.h:3081
#define DT_CENTER
Definition: winuser.h:527
int WINAPI GetClipRgn(_In_ HDC, _In_ HRGN)
GLfloat GLfloat p
Definition: glext.h:8902
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1099
#define DT_BOTTOM
Definition: winuser.h:525
LONG cy
Definition: windef.h:335
#define HeapFree(x, y, z)
Definition: compat.h:594
#define MAX_BUFFER
Definition: text.c:1065
#define DT_EDITCONTROL
Definition: winuser.h:528
int FASTCALL GreGetGraphicsMode(HDC)
Definition: dcutil.c:306

Referenced by DrawTextW().

◆ DrawTextW()

INT WINAPI DrawTextW ( HDC  hdc,
LPCWSTR  str,
INT  count,
LPRECT  rect,
UINT  flags 
)

Definition at line 17 of file defwnd.c.

18 {
19  DRAWTEXTPARAMS dtp;
20 
21  memset (&dtp, 0, sizeof(dtp));
22  dtp.cbSize = sizeof(dtp);
23  if (flags & DT_TABSTOP)
24  {
25  dtp.iTabLength = (flags >> 8) & 0xff;
26  flags &= 0xffff00ff;
27  }
28  return DrawTextExWorker(hdc, (LPWSTR)str, count, rect, flags, &dtp);
29 }
#define DT_TABSTOP
Definition: winuser.h:541
GLuint GLuint GLsizei count
Definition: gl.h:1545
& rect
Definition: startmenu.cpp:1413
const WCHAR * str
INT WINAPI DrawTextExWorker(HDC hdc, LPWSTR str, INT i_count, LPRECT rect, UINT flags, LPDRAWTEXTPARAMS dtp)
Definition: text.c:1071
GLbitfield flags
Definition: glext.h:7161
HDC hdc
Definition: main.c:9
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define memset(x, y, z)
Definition: compat.h:39

Referenced by _check_txgetnaturalsize(), BUTTON_CalcLabelRect(), BUTTON_DrawTextCallback(), calc_tabbed_width(), calc_width(), ProgressDlg::CalcTextRect(), CB_ThemedPaint(), CFn_WMPaint(), ConfirmMsgBox_Init(), ConfirmMsgBox_Paint(), CreateLayoutIcon(), DATETIME_Refresh(), DECLARE_INTERFACE_(), default_page_paint_hook(), DlgProc(), DrawProc(), DrawShadowText(), DrawStatusTextW(), DrawTextFromResource(), DrawThemeText(), EditTypeDlg_OnDrawItem(), FillGrid(), GetThemeTextExtent(), Graph_DrawCpuUsageGraph(), Graph_DrawMemUsageGraph(), HEADER_DrawItem(), ICONTITLE_Paint(), ICONTITLE_SetTitlePos(), ImageView_DrawImage(), IPADDRESS_Draw(), LISTVIEW_DrawItemPart(), LISTVIEW_GetItemMetrics(), LrgCellWndProc(), MainWnd_OnDrawItem(), MENU_CalcItemSize(), MENU_DrawMenuItem(), MONTHCAL_DrawDay(), MONTHCAL_PaintCalendar(), MONTHCAL_PaintTitle(), MONTHCAL_PaintTodayTitle(), MONTHCAL_PaintWeeknumbers(), MonthCalPaint(), MyDrawCaptionTemp(), MyDrawMenuBarTemp(), NT5_DrawLogoffCaptionText(), CAutoComplete::OnDrawItem(), CCell::OnPaint(), OnPaint(), OSK_Paint(), output_number(), output_tabbed_text(), output_text(), PAINTING_DrawStateJam(), PaintText(), ProgressDlg::ProcessWindowMessage(), PROPSHEET_Paint(), REBAR_DrawBand(), ScrollProc(), SoftModalMessageBox(), STATIC_PaintTextfn(), TAB_DrawItemInterior(), taskdialog_get_text_extent(), test_DrawTextCalcRect(), TOOLBAR_CustomizeDialogProc(), TOOLBAR_DrawString(), TOOLBAR_MeasureString(), TOOLTIPS_CalcTipSize(), TOOLTIPS_Refresh(), TREEVIEW_CreateDragImage(), UserDrawCaptionText(), and WndProc().

◆ IntDefWindowProc()

LRESULT FASTCALL IntDefWindowProc ( PWND  Wnd,
UINT  Msg,
WPARAM  wParam,
LPARAM  lParam,
BOOL  Ansi 
)

Definition at line 531 of file defwnd.c.

537 {
539  LRESULT lResult = 0;
541  BOOL IsTaskBar;
542  DWORD Style;
543  DWORD ExStyle;
544 
545  if (Msg > WM_USER) return 0;
546 
547  switch (Msg)
548  {
549  case WM_DEVICECHANGE:
550  return TRUE;
551 
552  case WM_GETTEXTLENGTH:
553  {
554  PWSTR buf;
555  ULONG len;
556 
557  if (Wnd != NULL && Wnd->strName.Length != 0)
558  {
559  buf = Wnd->strName.Buffer;
560  if (buf != NULL &&
562  buf,
563  Wnd->strName.Length)))
564  {
565  lResult = (LRESULT) (Wnd->strName.Length / sizeof(WCHAR));
566  }
567  }
568  else lResult = 0L;
569 
570  break;
571  }
572 
573  case WM_GETTEXT: // FIXME: Handle Ansi
574  {
575  PWSTR buf = NULL;
576  PWSTR outbuf = (PWSTR)lParam;
577 
578  if (Wnd != NULL && wParam != 0)
579  {
580  if (Wnd->strName.Buffer != NULL)
581  buf = Wnd->strName.Buffer;
582  else
583  outbuf[0] = L'\0';
584 
585  if (buf != NULL)
586  {
587  if (Wnd->strName.Length != 0)
588  {
589  lResult = min(Wnd->strName.Length / sizeof(WCHAR), wParam - 1);
590  RtlCopyMemory(outbuf,
591  buf,
592  lResult * sizeof(WCHAR));
593  outbuf[lResult] = L'\0';
594  }
595  else
596  outbuf[0] = L'\0';
597  }
598  }
599  break;
600  }
601 
602  case WM_SETTEXT: // FIXME: Handle Ansi
603  {
604  DefSetText(Wnd, (PCWSTR)lParam);
605 
606  if ((Wnd->style & WS_CAPTION) == WS_CAPTION)
608  IntNotifyWinEvent(EVENT_OBJECT_NAMECHANGE, Wnd, OBJID_WINDOW, CHILDID_SELF, 0);
609  lResult = 1;
610  break;
611  }
612 
613  case WM_SYSCOMMAND:
614  {
615  TRACE("hwnd %p WM_SYSCOMMAND %lx %lx\n", Wnd->head.h, wParam, lParam );
616  lResult = DefWndHandleSysCommand(Wnd, wParam, lParam);
617  break;
618  }
619 
620  case WM_SHOWWINDOW:
621  {
622  if ((Wnd->style & WS_VISIBLE) && wParam) break;
623  if (!(Wnd->style & WS_VISIBLE) && !wParam) break;
624  if (!Wnd->spwndOwner) break;
625  if (LOWORD(lParam))
626  {
628  }
629  break;
630  }
631 
632  case WM_CLIENTSHUTDOWN:
633  return IntClientShutdown(Wnd, wParam, lParam);
634 
635  case WM_APPCOMMAND:
636  if ( (Wnd->style & (WS_POPUP|WS_CHILD)) != WS_CHILD &&
637  Wnd != co_GetDesktopWindow(Wnd) )
638  {
639  if (!co_HOOK_CallHooks(WH_SHELL, HSHELL_APPCOMMAND, wParam, lParam))
640  co_IntShellHookNotify(HSHELL_APPCOMMAND, wParam, lParam);
641  break;
642  }
643  UserRefObjectCo(Wnd->spwndParent, &Ref);
646  break;
647 
648  case WM_KEYF1:
649  {
650  HELPINFO hi;
651  HMENU hMenu = UlongToHandle(Wnd->IDMenu);
652  PWND pwndActive = MENU_IsMenuActive();
653  hi.cbSize = sizeof(HELPINFO);
654  hi.MousePos = gpsi->ptCursor;
656  hi.hItemHandle = pwndActive ? UserHMGetHandle(pwndActive) : UserHMGetHandle(Wnd);
657  hi.iCtrlId = (Wnd->style & (WS_POPUP|WS_CHILD)) == WS_CHILD ? IntMenuItemFromPoint(Wnd, hMenu, hi.MousePos) : 0;
659 
660  co_IntSendMessage( UserHMGetHandle(Wnd), WM_HELP, 0, (LPARAM)&hi );
661  break;
662  }
663 
664  case WM_SETICON:
665  {
666  return DefWndSetIcon(Wnd, wParam, lParam);
667  }
668 
669  case WM_GETICON:
670  {
671  return DefWndGetIcon(Wnd, wParam, lParam);
672  }
673 
674  case WM_HELP:
675  {
676  PWND Parent = IntGetParent(Wnd);
678  break;
679  }
680 
681  case WM_LBUTTONDOWN:
682  case WM_RBUTTONDOWN:
683  case WM_MBUTTONDOWN:
684  pti->MessageQueue->QF_flags &= ~(QF_FMENUSTATUS|QF_FMENUSTATUSBREAK);
685  break;
686 
687  case WM_NCLBUTTONDOWN:
688  return NC_HandleNCLButtonDown(Wnd, wParam, lParam);
689 
690  case WM_NCRBUTTONDOWN:
691  return NC_HandleNCRButtonDown(Wnd, wParam, lParam);
692 
693  case WM_LBUTTONDBLCLK:
695 
696  case WM_NCLBUTTONDBLCLK:
697  return NC_HandleNCLButtonDblClk(Wnd, wParam, lParam);
698 
699  case WM_RBUTTONUP:
700  {
701  POINT Pt;
702 
703  Pt.x = GET_X_LPARAM(lParam);
704  Pt.y = GET_Y_LPARAM(lParam);
705  IntClientToScreen(Wnd, &Pt);
706  lParam = MAKELPARAM(Pt.x, Pt.y);
708  break;
709  }
710 
711  case WM_NCRBUTTONUP:
712  /*
713  * FIXME : we must NOT send WM_CONTEXTMENU on a WM_NCRBUTTONUP (checked
714  * in Windows), but what _should_ we do? According to MSDN :
715  * "If it is appropriate to do so, the system sends the WM_SYSCOMMAND
716  * message to the window". When is it appropriate?
717  */
718  ERR("WM_NCRBUTTONUP\n");
719  break;
720 
721  case WM_XBUTTONUP:
722  case WM_NCXBUTTONUP:
723  if (HIWORD(wParam) == XBUTTON1 || HIWORD(wParam) == XBUTTON2)
724  {
726  MAKELPARAM(LOWORD(wParam), FAPPCOMMAND_MOUSE | HIWORD(wParam)));
727  }
728  break;
729 
730 
731  case WM_CONTEXTMENU:
732  {
733  if (Wnd->style & WS_CHILD)
734  {
736  }
737  else
738  {
739  POINT Pt;
740  LONG_PTR Style;
741  LONG HitCode;
742 
743  Style = Wnd->style;
744 
745  Pt.x = GET_X_LPARAM(lParam);
746  Pt.y = GET_Y_LPARAM(lParam);
747  if (Style & WS_CHILD)
748  {
749  IntScreenToClient(IntGetParent(Wnd), &Pt);
750  }
751 
752  HitCode = GetNCHitEx(Wnd, Pt);
753 
754  if (HitCode == HTCAPTION || HitCode == HTSYSMENU)
755  {
756  PMENU SystemMenu;
757  UINT Flags;
758 
759  if((SystemMenu = IntGetSystemMenu(Wnd, FALSE)))
760  {
761  MENU_InitSysMenuPopup(SystemMenu, Wnd->style, Wnd->pcls->style, HitCode);
762 
763  if(HitCode == HTCAPTION)
765  else
767 
768  IntTrackPopupMenuEx(SystemMenu, Flags|TPM_SYSTEM_MENU, Pt.x, Pt.y, Wnd, NULL);
769  }
770  }
771  if (HitCode == HTHSCROLL || HitCode == HTVSCROLL)
772  {
773  WARN("Scroll Menu Not Supported\n");
774  }
775  }
776  break;
777  }
778 
779  case WM_KEYDOWN:
780  if (wParam == VK_F10)
781  {
782  pti->MessageQueue->QF_flags |= QF_FF10STATUS;
783 
784  if (UserGetKeyState(VK_SHIFT) & 0x8000)
785  {
787  }
788  }
790  {
791  HWND hwndTop = UserGetForegroundWindow();
792  PWND topWnd = UserGetWindowObject(hwndTop);
793 
794  /* Test for typical TaskBar ExStyle Values */
795  ExStyle = (topWnd->ExStyle & WS_EX_TOOLWINDOW);
796  TRACE("ExStyle is '%x'.\n", ExStyle);
797 
798  /* Test for typical TaskBar Style Values */
799  Style = (topWnd->style & (WS_POPUP | WS_VISIBLE |
801  TRACE("Style is '%x'.\n", Style);
802 
803  /* Test for masked typical TaskBar Style and ExStyles to detect TaskBar */
804  IsTaskBar = (Style == (WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN))
805  && (ExStyle == WS_EX_TOOLWINDOW);
806  TRACE("This %s the TaskBar.\n", IsTaskBar ? "is" : "is not");
807 
808  if (topWnd && !IsTaskBar) /* Second test is so we are not touching the Taskbar */
809  {
810  if ((topWnd->style & WS_THICKFRAME) == 0)
811  {
812  return 0;
813  }
814 
815  if (wParam == VK_DOWN)
816  {
817  if (topWnd->style & WS_MAXIMIZE)
818  {
820 
821  /* "Normal size" must be erased after restoring, otherwise it will block next side snap actions */
822  RECTL_vSetEmptyRect(&topWnd->InternalPos.NormalRect);
823  }
824  else
825  {
827  }
828  }
829  else if (wParam == VK_UP)
830  {
831  RECT currentRect;
832  if ((topWnd->InternalPos.NormalRect.right == topWnd->InternalPos.NormalRect.left) ||
833  (topWnd->InternalPos.NormalRect.top == topWnd->InternalPos.NormalRect.bottom))
834  {
835  currentRect = topWnd->rcWindow;
836  }
837  else
838  {
839  currentRect = topWnd->InternalPos.NormalRect;
840  }
842 
843  // save normal rect if maximazing snapped window
844  topWnd->InternalPos.NormalRect = currentRect;
845  }
846  else if (wParam == VK_LEFT || wParam == VK_RIGHT)
847  {
848  RECT snapRect, normalRect, windowRect;
849  BOOL snapped;
850  normalRect = topWnd->InternalPos.NormalRect;
851  snapped = (normalRect.left != 0 && normalRect.right != 0 &&
852  normalRect.top != 0 && normalRect.bottom != 0);
853 
854  if (topWnd->style & WS_MAXIMIZE)
855  {
857  snapped = FALSE;
858  }
859  windowRect = topWnd->rcWindow;
860 
861  UserSystemParametersInfo(SPI_GETWORKAREA, 0, &snapRect, 0);
862  if (wParam == VK_LEFT)
863  {
864  snapRect.right = (snapRect.left + snapRect.right) / 2;
865  }
866  else // VK_RIGHT
867  {
868  snapRect.left = (snapRect.left + snapRect.right) / 2;
869  }
870 
871  if (snapped)
872  {
873  // if window was snapped but moved to other location - restore normal size
874  if (!IntEqualRect(&snapRect, &windowRect))
875  {
876  RECT empty = {0, 0, 0, 0};
877  co_WinPosSetWindowPos(topWnd,
878  0,
879  normalRect.left,
880  normalRect.top,
881  normalRect.right - normalRect.left,
882  normalRect.bottom - normalRect.top,
883  0);
884  topWnd->InternalPos.NormalRect = empty;
885  }
886  }
887  else
888  {
889  co_WinPosSetWindowPos(topWnd,
890  0,
891  snapRect.left,
892  snapRect.top,
893  snapRect.right - snapRect.left,
894  snapRect.bottom - snapRect.top,
895  0);
896  topWnd->InternalPos.NormalRect = windowRect;
897  }
898  }
899  }
900  }
901  break;
902 
903  case WM_SYSKEYDOWN:
904  {
905  if (HIWORD(lParam) & KF_ALTDOWN)
906  { /* Previous state, if the key was down before this message,
907  this is a cheap way to ignore autorepeat keys. */
908  if ( !(HIWORD(lParam) & KF_REPEAT) )
909  {
910  if ( ( wParam == VK_MENU ||
911  wParam == VK_LMENU ||
912  wParam == VK_RMENU ) && !(pti->MessageQueue->QF_flags & QF_FMENUSTATUS)) //iMenuSysKey )
913  pti->MessageQueue->QF_flags |= QF_FMENUSTATUS; //iMenuSysKey = 1;
914  else
915  pti->MessageQueue->QF_flags &= ~QF_FMENUSTATUS; //iMenuSysKey = 0;
916  }
917 
918  pti->MessageQueue->QF_flags &= ~QF_FF10STATUS; //iF10Key = 0;
919 
920  if (wParam == VK_F4) /* Try to close the window */
921  {
923  if (!(top->style & CS_NOCLOSE))
925  }
926  else if (wParam == VK_SNAPSHOT) // Alt-VK_SNAPSHOT?
927  {
928  PWND pwnd = Wnd;
929  while (IntGetParent(pwnd) != NULL)
930  {
931  pwnd = IntGetParent(pwnd);
932  }
933  ERR("DefWndScreenshot\n");
934  DefWndScreenshot(pwnd);
935  }
936  else if ( wParam == VK_ESCAPE || wParam == VK_TAB ) // Alt-Tab/ESC Alt-Shift-Tab/ESC
937  {
938  WPARAM wParamTmp;
939  HWND Active = UserGetActiveWindow(); // Noticed MDI problem.
940  if (!Active)
941  {
942  FIXME("WM_SYSKEYDOWN VK_ESCAPE no active\n");
943  break;
944  }
945  wParamTmp = UserGetKeyState(VK_SHIFT) & 0x8000 ? SC_PREVWINDOW : SC_NEXTWINDOW;
947  }
948  }
949  else if( wParam == VK_F10 )
950  {
951  if (UserGetKeyState(VK_SHIFT) & 0x8000)
953  pti->MessageQueue->QF_flags |= QF_FF10STATUS; //iF10Key = 1;
954  }
955  else if( wParam == VK_ESCAPE && (UserGetKeyState(VK_SHIFT) & 0x8000))
957  break;
958  }
959 
960  case WM_KEYUP:
961  case WM_SYSKEYUP:
962  {
963  /* Press and release F10 or ALT */
964  if (((wParam == VK_MENU || wParam == VK_LMENU || wParam == VK_RMENU)
965  && (pti->MessageQueue->QF_flags & (QF_FMENUSTATUS|QF_FMENUSTATUSBREAK)) == QF_FMENUSTATUS /*iMenuSysKey*/) ||
966  ((wParam == VK_F10) && pti->MessageQueue->QF_flags & QF_FF10STATUS /*iF10Key*/))
968  pti->MessageQueue->QF_flags &= ~(QF_FMENUSTATUS|QF_FMENUSTATUSBREAK|QF_FF10STATUS); //iMenuSysKey = iF10Key = 0;
969  break;
970  }
971 
972  case WM_SYSCHAR:
973  {
974  pti->MessageQueue->QF_flags &= ~(QF_FMENUSTATUS|QF_FMENUSTATUSBREAK); //iMenuSysKey = 0;
975  if (wParam == VK_RETURN && (Wnd->style & WS_MINIMIZE) != 0)
976  {
978  break;
979  }
980  if ((HIWORD(lParam) & KF_ALTDOWN) && wParam)
981  {
982  if (wParam == VK_TAB || wParam == VK_ESCAPE) break;
983  if (wParam == VK_SPACE && Wnd->style & WS_CHILD)
985  else
987  }
988  else /* check for Ctrl-Esc */
989  if (wParam != VK_ESCAPE) UserPostMessage(hwndSAS, WM_LOGONNOTIFY, LN_MESSAGE_BEEP, 0); //MessageBeep(0);
990  break;
991  }
992 
993  case WM_CANCELMODE:
994  {
995  pti->MessageQueue->QF_flags &= ~(QF_FMENUSTATUS|QF_FMENUSTATUSBREAK);
996 
997  MENU_EndMenu( Wnd );
998  if (IntGetCaptureWindow() == UserHMGetHandle(Wnd))
999  {
1001  }
1002  break;
1003  }
1004 
1005  case WM_CLOSE:
1006  co_UserDestroyWindow(Wnd);
1007  break;
1008 
1009  case WM_CTLCOLORMSGBOX:
1010  case WM_CTLCOLOREDIT:
1011  case WM_CTLCOLORLISTBOX:
1012  case WM_CTLCOLORBTN:
1013  case WM_CTLCOLORDLG:
1014  case WM_CTLCOLORSTATIC:
1015  case WM_CTLCOLORSCROLLBAR:
1017 
1018  case WM_CTLCOLOR:
1020 
1021  case WM_SETCURSOR:
1022  {
1023  if (Wnd->style & WS_CHILD)
1024  {
1025  /* with the exception of the border around a resizable wnd,
1026  * give the parent first chance to set the cursor */
1028  {
1029  PWND parent = Wnd->spwndParent;//IntGetParent( Wnd );
1030  if (parent != UserGetDesktopWindow() &&
1032  return TRUE;
1033  }
1034  }
1035  return DefWndHandleSetCursor(Wnd, wParam, lParam);
1036  }
1037 
1038  case WM_MOUSEACTIVATE:
1039  if (Wnd->style & WS_CHILD)
1040  {
1041  LONG Ret;
1042  HWND hwndParent;
1043  PWND pwndParent = IntGetParent(Wnd);
1044  hwndParent = pwndParent ? UserHMGetHandle(pwndParent) : NULL;
1046  if (Ret) return (Ret);
1047  }
1049 
1050  case WM_ACTIVATE:
1051  /* The default action in Windows is to set the keyboard focus to
1052  * the window, if it's being activated and not minimized */
1053  if (LOWORD(wParam) != WA_INACTIVE &&
1054  !(Wnd->style & WS_MINIMIZE))
1055  {
1056  //ERR("WM_ACTIVATE %p\n",hWnd);
1057  co_UserSetFocus(Wnd);
1058  }
1059  break;
1060 
1061  case WM_MOUSEWHEEL:
1062  if (Wnd->style & WS_CHILD)
1063  {
1064  HWND hwndParent;
1065  PWND pwndParent = IntGetParent(Wnd);
1066  hwndParent = pwndParent ? UserHMGetHandle(pwndParent) : NULL;
1068  }
1069  break;
1070 
1071  case WM_ERASEBKGND:
1072  case WM_ICONERASEBKGND:
1073  {
1074  RECT Rect;
1075  HBRUSH hBrush = Wnd->pcls->hbrBackground;
1076  if (!hBrush) return 0;
1077  if (hBrush <= (HBRUSH)COLOR_MENUBAR)
1078  {
1079  hBrush = IntGetSysColorBrush(HandleToUlong(hBrush));
1080  }
1081  if (Wnd->pcls->style & CS_PARENTDC)
1082  {
1083  /* can't use GetClipBox with a parent DC or we fill the whole parent */
1084  IntGetClientRect(Wnd, &Rect);
1085  GreDPtoLP((HDC)wParam, (LPPOINT)&Rect, 2);
1086  }
1087  else
1088  {
1089  GdiGetClipBox((HDC)wParam, &Rect);
1090  }
1091  FillRect((HDC)wParam, &Rect, hBrush);
1092  return (1);
1093  }
1094 
1095  case WM_GETHOTKEY:
1096  //ERR("WM_GETHOTKEY\n");
1097  return DefWndGetHotKey(Wnd);
1098  case WM_SETHOTKEY:
1099  //ERR("WM_SETHOTKEY\n");
1100  return DefWndSetHotKey(Wnd, wParam);
1101 
1102  case WM_NCHITTEST:
1103  {
1104  POINT Point;
1107  return GetNCHitEx(Wnd, Point);
1108  }
1109 
1110  case WM_PRINT:
1111  {
1112  DefWndPrint(Wnd, (HDC)wParam, lParam);
1113  return (0);
1114  }
1115 
1116  case WM_SYSCOLORCHANGE:
1117  {
1118  /* force to redraw non-client area */
1119  UserPaintCaption(Wnd, DC_NC);
1120  /* Use InvalidateRect to redraw client area, enable
1121  * erase to redraw all subcontrols otherwise send the
1122  * WM_SYSCOLORCHANGE to child windows/controls is required
1123  */
1125  return (0);
1126  }
1127 
1128  case WM_PAINTICON:
1129  case WM_PAINT:
1130  {
1131  PAINTSTRUCT Ps;
1132  HDC hDC;
1133 
1134  /* If already in Paint and Client area is not empty just return. */
1135  if (Wnd->state2 & WNDS2_STARTPAINT && !RECTL_bIsEmptyRect(&Wnd->rcClient))
1136  {
1137  ERR("In Paint and Client area is not empty!\n");
1138  return 0;
1139  }
1140 
1141  hDC = IntBeginPaint(Wnd, &Ps);
1142  if (hDC)
1143  {
1144  if (((Wnd->style & WS_MINIMIZE) != 0) && (Wnd->pcls->spicn))
1145  {
1146  RECT ClientRect;
1147  INT x, y;
1148 
1149  ERR("Doing Paint and Client area is empty!\n");
1150  IntGetClientRect(Wnd, &ClientRect);
1151  x = (ClientRect.right - ClientRect.left - UserGetSystemMetrics(SM_CXICON)) / 2;
1152  y = (ClientRect.bottom - ClientRect.top - UserGetSystemMetrics(SM_CYICON)) / 2;
1154  UserDrawIconEx(hDC, x, y, Wnd->pcls->spicn, 0, 0, 0, 0, DI_NORMAL | DI_COMPAT | DI_DEFAULTSIZE);
1156  }
1157 
1158  IntEndPaint(Wnd, &Ps);
1159  }
1160  return (0);
1161  }
1162 
1163  case WM_SYNCPAINT:
1164  {
1165  HRGN hRgn;
1166  Wnd->state &= ~WNDS_SYNCPAINTPENDING;
1167  TRACE("WM_SYNCPAINT\n");
1168  hRgn = NtGdiCreateRectRgn(0, 0, 0, 0);
1169  if (hRgn)
1170  {
1171  if (co_UserGetUpdateRgn(Wnd, hRgn, FALSE) != NULLREGION)
1172  {
1173  PREGION pRgn = REGION_LockRgn(hRgn);
1174  if (pRgn) REGION_UnlockRgn(pRgn);
1175  if (!wParam)
1177  co_UserRedrawWindow(Wnd, NULL, pRgn, wParam);
1178  }
1180  }
1181  return 0;
1182  }
1183 
1184  case WM_SETREDRAW:
1185  if (wParam)
1186  {
1187  if (!(Wnd->style & WS_VISIBLE))
1188  {
1189  IntSetStyle( Wnd, WS_VISIBLE, 0 );
1190  Wnd->state |= WNDS_SENDNCPAINT;
1191  }
1192  }
1193  else
1194  {
1195  if (Wnd->style & WS_VISIBLE)
1196  {
1198  IntSetStyle( Wnd, 0, WS_VISIBLE );
1199  }
1200  }
1201  return 0;
1202 
1203  case WM_WINDOWPOSCHANGING:
1204  {
1206  }
1207 
1208  case WM_WINDOWPOSCHANGED:
1209  {
1211  }
1212 
1213  case WM_NCCALCSIZE:
1214  {
1215  return NC_HandleNCCalcSize( Wnd, wParam, (RECTL *)lParam, FALSE );
1216  }
1217 
1218  case WM_NCACTIVATE:
1219  {
1220  return NC_HandleNCActivate( Wnd, wParam, lParam );
1221  }
1222 
1223  //
1224  // NC Paint mode.
1225  //
1226  case WM_NCPAINT:
1227  {
1229  Wnd->state |= WNDS_FORCEMENUDRAW;
1230  NC_DoNCPaint(Wnd, hDC, -1);
1231  Wnd->state &= ~WNDS_FORCEMENUDRAW;
1232  UserReleaseDC(Wnd, hDC, FALSE);
1233  return 0;
1234  }
1235  //
1236  // Draw Caption mode.
1237  //
1238  // wParam are DC_* flags.
1239  //
1240  case WM_NCUAHDRAWCAPTION:
1241  {
1243  TRACE("WM_NCUAHDRAWCAPTION: wParam DC_ flags %08x\n",wParam);
1244  UserDrawCaptionBar(Wnd, hDC, wParam | DC_FRAME); // Include DC_FRAME to comp for drawing glitch.
1245  UserReleaseDC(Wnd, hDC, FALSE);
1246  return 0;
1247  }
1248  //
1249  // Draw Frame mode.
1250  //
1251  // wParam is HDC, lParam are DC_ACTIVE and or DC_REDRAWHUNGWND.
1252  //
1253  case WM_NCUAHDRAWFRAME:
1254  {
1255  TRACE("WM_NCUAHDRAWFRAME: wParam hDC %p lParam DC_ flags %08x\n",wParam,lParam);
1257  return 0;
1258  }
1259 
1260  /* ReactOS only. */
1261  case WM_CBT:
1262  {
1263  switch (wParam)
1264  {
1265  case HCBT_MOVESIZE:
1266  {
1267  RECTL rt;
1268 
1269  if (lParam)
1270  {
1271  _SEH2_TRY
1272  {
1274  sizeof(RECT),
1275  1);
1276 
1277  RtlCopyMemory(&rt,
1278  (PVOID)lParam,
1279  sizeof(RECT));
1280  }
1282  {
1283  lResult = 1;
1284  }
1285  _SEH2_END;
1286  }
1287  if (!lResult)
1288  lResult = co_HOOK_CallHooks(WH_CBT, HCBT_MOVESIZE, (WPARAM)Wnd->head.h, lParam ? (LPARAM)&rt : 0);
1289  }
1290  break;
1291  }
1292  break;
1293  }
1294  break;
1295  }
1296  return lResult;
1297 }
BYTE gafAsyncKeyState[256 *2/8]
Definition: keyboard.c:13
#define WM_NCLBUTTONDOWN
Definition: winuser.h:1679
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WM_SYNCPAINT
Definition: winuser.h:1677
#define WM_GETTEXTLENGTH
Definition: winuser.h:1606
#define GA_ROOT
Definition: winuser.h:2769
__kernel_entry W32KAPI HRGN APIENTRY NtGdiCreateRectRgn(_In_ INT xLeft, _In_ INT yTop, _In_ INT xRight, _In_ INT yBottom)
#define WS_THICKFRAME
Definition: pedump.c:630
#define WM_SETHOTKEY
Definition: winuser.h:1639
#define HTLEFT
Definition: winuser.h:2467
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define WM_PAINTICON
Definition: winuser.h:1628
BOOL FASTCALL UserPostMessage(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1346
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1613
void FASTCALL MENU_InitSysMenuPopup(PMENU menu, DWORD style, DWORD clsStyle, LONG HitTest)
Definition: menu.c:1362
DWORD ExStyle
Definition: ntuser.h:683
#define HTHSCROLL
Definition: winuser.h:2461
BOOL UserDrawIconEx(HDC hDc, INT xLeft, INT yTop, PCURICON_OBJECT pIcon, INT cxWidth, INT cyHeight, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags)
Definition: cursoricon.c:1688
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
Definition: gdiobj.c:1158
#define SC_KEYMENU
Definition: winuser.h:2576
#define SC_RESTORE
Definition: winuser.h:2578
#define SW_SHOWNOACTIVATE
Definition: winuser.h:768
long y
Definition: polytest.cpp:48
BOOL FASTCALL IntClientToScreen(PWND Wnd, LPPOINT lpPoint)
Definition: winpos.c:198
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define WM_LBUTTONDOWN
Definition: winuser.h:1763
FORCEINLINE VOID RECTL_vSetEmptyRect(_Out_ RECTL *prcl)
Definition: rect.h:20
HWND FASTCALL co_UserSetFocus(PWND Window)
Definition: focus.c:1309
HGDIOBJ FASTCALL IntGetSysColorBrush(INT Object)
Definition: stockobj.c:317
long x
Definition: polytest.cpp:48
#define TPM_SYSTEM_MENU
Definition: undocuser.h:72
BOOL FASTCALL IntReleaseCapture(VOID)
Definition: focus.c:1525
#define TRUE
Definition: types.h:120
#define WM_CTLCOLORDLG
Definition: winuser.h:1757
#define WM_GETHOTKEY
Definition: winuser.h:1640
#define SW_HIDE
Definition: winuser.h:762
HWND FASTCALL UserGetActiveWindow(VOID)
Definition: focus.c:1424
#define VK_RMENU
Definition: winuser.h:2267
uint16_t * PWSTR
Definition: typedefs.h:56
#define WM_CLIENTSHUTDOWN
Definition: undocuser.h:35
#define WM_MOUSEWHEEL
Definition: treelist.c:96
#define WM_NCCALCSIZE
Definition: winuser.h:1672
#define WM_CTLCOLORSTATIC
Definition: winuser.h:1759
#define WNDS_SENDNCPAINT
Definition: ntuser.h:599
#define WM_GETTEXT
Definition: winuser.h:1605
VOID FASTCALL IntNotifyWinEvent(DWORD Event, PWND pWnd, LONG idObject, LONG idChild, DWORD flags)
Definition: event.c:179
LRESULT FASTCALL DefWndHandleSysCommand(PWND pWnd, WPARAM wParam, LPARAM lParam)
Definition: defwnd.c:124
#define WARN(fmt,...)
Definition: debug.h:112
#define MAKELPARAM(l, h)
Definition: winuser.h:3988
DWORD_PTR dwContextId
Definition: winuser.h:3296
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:1721
#define HandleToUlong(h)
Definition: basetsd.h:79
static HDC
Definition: imagelist.c:92
HANDLE hItemHandle
Definition: winuser.h:3295
#define WM_SETREDRAW
Definition: winuser.h:1603
PSERVERINFO gpsi
Definition: imm.c:17
#define OBJID_WINDOW
Definition: winable.h:15
#define NULLREGION
Definition: wingdi.h:361
#define WH_SHELL
Definition: winuser.h:40
LONG top
Definition: windef.h:307
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
Definition: object.h:27
#define DI_COMPAT
Definition: wingdi.h:68
#define GET_X_LPARAM(lp)
Definition: windowsx.h:274
static HRGN hRgn
Definition: mapping.c:33
#define CS_NOCLOSE
Definition: winuser.h:649
#define DCX_USESTYLE
Definition: GetDCEx.c:10
#define MA_ACTIVATE
Definition: winuser.h:2481
#define VK_LEFT
Definition: winuser.h:2204
#define WM_SHOWWINDOW
Definition: winuser.h:1615
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
#define WM_NCRBUTTONDOWN
Definition: winuser.h:1682
HDC FASTCALL UserGetDCEx(PWND Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
#define WM_CTLCOLOR
Definition: windowsx.h:4
BOOL WINAPI IntTrackPopupMenuEx(PMENU menu, UINT wFlags, int x, int y, PWND pWnd, LPTPMPARAMS lpTpm)
Definition: menu.c:4559
BOOL FASTCALL UserDereferenceObject(PVOID Object)
Definition: object.c:644
#define WM_NCHITTEST
Definition: winuser.h:1673
UINT_PTR WPARAM
Definition: windef.h:207
#define VK_LWIN
Definition: winuser.h:2215
#define VK_TAB
Definition: winuser.h:2179
#define VK_DOWN
Definition: winuser.h:2207
#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
RECT rcClient
Definition: ntuser.h:696
#define VK_MENU
Definition: winuser.h:2184
#define RDW_FRAME
Definition: winuser.h:1202
LONG left
Definition: windef.h:306
VOID FASTCALL IntGetClientRect(PWND WindowObject, RECTL *Rect)
Definition: winpos.c:91
HWND FASTCALL IntGetCaptureWindow(VOID)
Definition: focus.c:34
#define WNDS2_STARTPAINT
Definition: ntuser.h:626
#define VK_ESCAPE
Definition: winuser.h:2194
#define WS_CLIPCHILDREN
Definition: pedump.c:619
LONG right
Definition: windef.h:308
#define WM_CTLCOLORLISTBOX
Definition: winuser.h:1755
PREGION FASTCALL REGION_LockRgn(_In_ HRGN hrgn)
Definition: region.c:2377
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
LRESULT FASTCALL DefWndHandleWindowPosChanging(PWND pWnd, WINDOWPOS *Pos)
Definition: defwnd.c:69
LRESULT FASTCALL DefWndGetIcon(PWND pWnd, WPARAM wParam, LPARAM lParam)
Definition: defwnd.c:472
int32_t INT
Definition: typedefs.h:58
#define VK_RETURN
Definition: winuser.h:2181
struct _CURICON_OBJECT * spicn
Definition: ntuser.h:568
WPARAM wParam
Definition: combotst.c:138
#define DCX_INTERSECTRGN
Definition: winuser.h:2109
#define DCX_WINDOW
Definition: winuser.h:2100
LRESULT DefWndHandleSetCursor(PWND pWnd, WPARAM wParam, LPARAM lParam)
Definition: defwnd.c:242
#define QF_FF10STATUS
Definition: msgqueue.h:98
DWORD FASTCALL UserGetKeyState(DWORD dwKey)
Definition: msgqueue.c:221
#define QF_FMENUSTATUS
Definition: msgqueue.h:97
_SEH2_TRY
Definition: create.c:4226
#define VK_F10
Definition: winuser.h:2244
#define WM_NCPAINT
Definition: winuser.h:1674
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define TPM_RIGHTBUTTON
Definition: winuser.h:2360
#define L(x)
Definition: ntvdm.h:50
#define WM_CTLCOLORBTN
Definition: winuser.h:1756
#define HTSYSMENU
Definition: winuser.h:2457
UINT style
Definition: ntuser.h:563
#define VK_UP
Definition: winuser.h:2205
#define DC_NC
Definition: winuser.h:440
#define FALSE
Definition: types.h:117
#define WM_NCACTIVATE
Definition: winuser.h:1675
#define WS_MINIMIZE
Definition: pedump.c:622
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
BOOLEAN co_UserDestroyWindow(PVOID Object)
Definition: window.c:2836
static __inline VOID UserDerefObjectCo(PVOID obj)
Definition: object.h:40
#define WM_NCRBUTTONUP
Definition: winuser.h:1683
#define WM_SETCURSOR
Definition: winuser.h:1623
BOOL FASTCALL GreDPtoLP(HDC, LPPOINT, INT)
Definition: dcutil.c:7
#define FIXME(fmt,...)
Definition: debug.h:111
#define WM_CTLCOLORSCROLLBAR
Definition: winuser.h:1758
#define WM_SYSCHAR
Definition: winuser.h:1708
#define SM_CXICON
Definition: winuser.h:966
#define VK_F4
Definition: winuser.h:2238
#define CHILDID_SELF
Definition: winable.h:14
#define SC_MAXIMIZE
Definition: winuser.h:2568
struct _WND * spwndOwner
Definition: ntuser.h:694
LRESULT NC_DoNCPaint(PWND pWnd, HDC hDC, INT Flags)
Definition: nonclient.c:1042
#define VK_SHIFT
Definition: winuser.h:2182
THRDESKHEAD head
Definition: ntuser.h:674
Definition: object.h:3
#define DCX_KEEPCLIPRGN
Definition: undocuser.h:67
#define WM_ICONERASEBKGND
Definition: winuser.h:1629
HBRUSH FASTCALL DefWndControlColor(HDC hDC, UINT ctlType)
Definition: defwnd.c:33
static HWND hwndParent
Definition: cryptui.c:300
LRESULT FASTCALL DefWndHandleWindowPosChanged(PWND pWnd, WINDOWPOS *Pos)
Definition: defwnd.c:95
#define WM_KEYDOWN
Definition: winuser.h:1702
#define WM_CTLCOLORMSGBOX
Definition: winuser.h:1753
LONG_PTR LPARAM
Definition: windef.h:208
INT FASTCALL co_UserGetUpdateRgn(PWND Window, HRGN hRgn, BOOL bErase)
Definition: painting.c:1785
PWND FASTCALL co_GetDesktopWindow(PWND pWnd)
Definition: desktop.c:1366
#define WH_CBT
Definition: winuser.h:35
#define DI_DEFAULTSIZE
Definition: wingdi.h:69
POINT MousePos
Definition: winuser.h:3297
Definition: region.h:7
#define WM_MOUSEACTIVATE
Definition: winuser.h:1624
#define WM_SETTEXT
Definition: winuser.h:1604
LARGE_UNICODE_STRING strName
Definition: ntuser.h:715
VOID FASTCALL DefWndScreenshot(PWND pWnd)
Definition: defwnd.c:495
PWND FASTCALL UserGetWindowObject(HWND hWnd)
Definition: window.c:126
HWND FASTCALL UserGetForegroundWindow(VOID)
Definition: focus.c:1416
#define WM_RBUTTONDOWN
Definition: winuser.h:1766
int iContextType
Definition: winuser.h:3293
void MENU_EndMenu(PWND pwnd)
Definition: menu.c:2662
DWORD FASTCALL IntGetWindowContextHelpId(PWND pWnd)
Definition: window.c:433
LONG NTAPI UserGetSystemMetrics(ULONG Index)
Definition: metric.c:194
#define WM_APPCOMMAND
Definition: winuser.h:1869
BOOLEAN FASTCALL co_WinPosShowWindow(PWND Wnd, INT Cmd)
Definition: winpos.c:2491
HWND hwndSAS
Definition: winsta.c:24
#define UserHMGetHandle(obj)
Definition: ntuser.h:222
#define KF_REPEAT
Definition: winuser.h:2430
#define WS_CAPTION
Definition: pedump.c:624
struct tagHELPINFO HELPINFO
BOOL FASTCALL DefSetText(HWND hWnd, PCWSTR String, BOOL Ansi)
Definition: defwnd.c:64
UINT_PTR IDMenu
Definition: ntuser.h:710
VOID FASTCALL DefWndPrint(PWND pwnd, HDC hdc, ULONG uFlags)
Definition: defwnd.c:363
#define TRACE(s)
Definition: solgame.cpp:4
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
const DWORD Style
Definition: appswitch.c:71
r parent
Definition: btrfs.c:2979
HBRUSH hbrBackground
Definition: ntuser.h:570
PMENU FASTCALL IntGetSystemMenu(PWND Window, BOOL bRevert)
Definition: menu.c:5381
__wchar_t WCHAR
Definition: xmlstorage.h:180
PWND MENU_IsMenuActive(VOID)
Definition: menu.c:2650
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
#define RDW_ERASE
Definition: winuser.h:1201
#define UlongToHandle(ul)
Definition: basetsd.h:97
#define WM_NCUAHDRAWCAPTION
Definition: undocuser.h:45
#define DC_FRAME
Definition: undocuser.h:148
#define WM_WINDOWPOSCHANGING
Definition: winuser.h:1648
#define WM_CLOSE
Definition: winuser.h:1608
#define WM_KEYUP
Definition: winuser.h:1703
unsigned long DWORD
Definition: ntddk_ex.h:95
HDC FASTCALL IntBeginPaint(PWND Window, PPAINTSTRUCT Ps)
Definition: painting.c:1435
#define HELPINFO_MENUITEM
Definition: winuser.h:1161
#define WM_RBUTTONUP
Definition: winuser.h:1767
#define WM_PRINT
Definition: winuser.h:1867
#define SC_PREVWINDOW
Definition: winuser.h:2571
#define WM_PAINT
Definition: winuser.h:1607
UINT FASTCALL DefWndGetHotKey(PWND pWnd)
Definition: hotkey.c:313
LRESULT APIENTRY co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
Definition: hook.c:1103
PWND FASTCALL UserGetDesktopWindow(VOID)
Definition: desktop.c:1386
#define RDW_VALIDATE
Definition: winuser.h:1208
LRESULT NC_HandleNCCalcSize(PWND Wnd, WPARAM wparam, RECTL *Rect, BOOL Suspended)
Definition: nonclient.c:1248
struct Point Point
#define SM_CYICON
Definition: winuser.h:967
#define WNDS_SYNCPAINTPENDING
Definition: ntuser.h:611
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
Definition: exintrin.c:102
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1446
#define VK_LMENU
Definition: winuser.h:2266
#define WM_CANCELMODE
Definition: winuser.h:1622
#define DI_NORMAL
Definition: wingdi.h:72
GLenum GLsizei len
Definition: glext.h:6722
#define WM_LBUTTONDBLCLK
Definition: winuser.h:1765
#define LRESULT
Definition: ole.h:14
BOOL FASTCALL IntScreenToClient(PWND Wnd, LPPOINT lpPoint)
Definition: winpos.c:212
RECT rcWindow
Definition: ntuser.h:695
UINT cbSize
Definition: winuser.h:3292
#define WM_LOGONNOTIFY
Definition: undocuser.h:37
#define MA_NOACTIVATE
Definition: winuser.h:2483
#define HTBOTTOMRIGHT
Definition: winuser.h:2475
#define VK_RWIN
Definition: winuser.h:2216
#define WM_USER
Definition: winuser.h:1882
PWND FASTCALL UserGetAncestor(PWND Wnd, UINT Type)
Definition: window.c:3322
#define VK_RIGHT
Definition: winuser.h:2206
#define SC_MINIMIZE
Definition: winuser.h:2566
#define ERR(fmt,...)
Definition: debug.h:110
#define HTCAPTION
Definition: winuser.h:2456
Definition: ntuser.h:672
struct _USER_MESSAGE_QUEUE * MessageQueue
Definition: win32.h:90
LRESULT NC_HandleNCLButtonDblClk(PWND pWnd, WPARAM wParam, LPARAM lParam)
Definition: nonclient.c:1610
static HDC hDC
Definition: 3dtext.c:33
VOID UserDrawCaptionBar(PWND pWnd, HDC hDC, INT Flags)
Definition: nonclient.c:900
_SEH2_END
Definition: create.c:4400
INT FASTCALL DefWndSetHotKey(PWND pWnd, WPARAM wParam)
Definition: hotkey.c:340
#define WM_ACTIVATE
Definition: winuser.h:1599
BOOL FASTCALL co_UserRedrawWindow(PWND Window, const RECTL *UpdateRect, PREGION UpdateRgn, ULONG Flags)
Definition: painting.c:888
#define RDW_ALLCHILDREN
Definition: winuser.h:1211
_Use_decl_annotations_ NTSTATUS NTAPI RtlUnicodeToMultiByteSize(_Out_ PULONG MbSize, _In_ PCWCH UnicodeString, _In_ ULONG UnicodeSize)
Definition: nlsboot.c:145
#define WM_SYSKEYUP
Definition: winuser.h:1707
LRESULT FASTCALL DefWndSetIcon(PWND pWnd, WPARAM wParam, LPARAM lParam)
Definition: defwnd.c:434
#define WM_CTLCOLOREDIT
Definition: winuser.h:1754
FORCEINLINE BOOL IntEqualRect(RECTL *lprc1, RECTL *lprc2)
Definition: winpos.h:48
#define WM_MBUTTONDOWN
Definition: winuser.h:1769
PWND FASTCALL IntGetParent(PWND Wnd)
Definition: window.c:208
DWORD state
Definition: ntuser.h:680
int iCtrlId
Definition: winuser.h:3294
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
LRESULT NC_HandleNCRButtonDown(PWND pwnd, WPARAM wParam, LPARAM lParam)
Definition: nonclient.c:1668
#define min(a, b)
Definition: monoChain.cc:55
#define WS_POPUP
Definition: pedump.c:616
BOOL FASTCALL IntEndPaint(PWND Wnd, PPAINTSTRUCT Ps)
Definition: painting.c:1532
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
BOOL UserPaintCaption(PWND pWnd, INT Flags)
Definition: defwnd.c:396
#define VK_SPACE
Definition: winuser.h:2199
BOOL empty
Definition: button.c:170
INT FASTCALL UserReleaseDC(PWND Window, HDC hDc, BOOL EndPaint)
Definition: windc.c:918
VOID co_IntShellHookNotify(WPARAM Message, WPARAM wParam, LPARAM lParam)
Definition: desktop.c:1692
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
#define KF_ALTDOWN
Definition: winuser.h:2429
#define WM_DEVICECHANGE
Definition: winuser.h:1798
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:275
#define HTVSCROLL
Definition: winuser.h:2462
#define WM_WINDOWPOSCHANGED
Definition: winuser.h:1649
INT FASTCALL IntMenuItemFromPoint(PWND pWnd, HMENU hMenu, POINT ptScreen)
Definition: menu.c:1518
VOID FASTCALL REGION_UnlockRgn(_In_ PREGION prgn)
Definition: region.c:2392
#define RDW_ERASENOW
Definition: winuser.h:1209
#define SC_CLOSE
Definition: winuser.h:2572
#define WM_NCUAHDRAWFRAME
Definition: undocuser.h:46
#define HCBT_MOVESIZE
Definition: winuser.h:55
#define WM_SYSKEYDOWN
Definition: winuser.h:1706
#define TPM_LEFTBUTTON
Definition: winuser.h:2359
struct _WND * spwndParent
Definition: ntuser.h:692
ULONG FASTCALL IntSetStyle(PWND pwnd, ULONG set_bits, ULONG clear_bits)
Definition: window.c:147
#define HIWORD(l)
Definition: typedefs.h:247
struct @1589 Msg[]
FORCEINLINE BOOL RECTL_bIsEmptyRect(_In_ const RECTL *prcl)
Definition: rect.h:44
unsigned int ULONG
Definition: retypes.h:1
DWORD state2
Definition: ntuser.h:681
LONG bottom
Definition: windef.h:309
#define IS_KEY_DOWN(ks, vk)
Definition: input.h:99
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define WNDS_FORCEMENUDRAW
Definition: ntuser.h:603
_In_ ULONG _In_ BOOLEAN Active
Definition: potypes.h:560
struct _WND::@4898 InternalPos
#define WA_INACTIVE
Definition: winuser.h:2602
BOOL FASTCALL UserSystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)
Definition: sysparams.c:2090
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:40
#define SC_NEXTWINDOW
Definition: winuser.h:2570
GLdouble GLdouble GLdouble GLdouble top
Definition: glext.h:10859
#define WM_ERASEBKGND
Definition: winuser.h:1612
#define LN_MESSAGE_BEEP
Definition: undocuser.h:119
LRESULT NC_HandleNCLButtonDown(PWND pWnd, WPARAM wParam, LPARAM lParam)
Definition: nonclient.c:1519
#define HTCLIENT
Definition: winuser.h:2455
DWORD FASTCALL GetNCHitEx(PWND pWnd, POINT pt)
Definition: nonclient.c:1927
LONG_PTR LRESULT
Definition: windef.h:209
LRESULT NC_HandleNCActivate(PWND Wnd, WPARAM wParam, LPARAM lParam)
Definition: nonclient.c:1382
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
#define WS_VISIBLE
Definition: pedump.c:620
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
#define WM_SYSCOMMAND
Definition: winuser.h:1728
#define QF_FMENUSTATUSBREAK
Definition: msgqueue.h:96
LPARAM lParam
Definition: combotst.c:139
#define VK_SNAPSHOT
Definition: winuser.h:2211
#define LOWORD(l)
Definition: pedump.c:82
#define DC_TEXT
Definition: winuser.h:430
#define CS_PARENTDC
Definition: winuser.h:651
#define WM_KEYF1
Definition: msg.c:47
#define WM_CBT
Definition: undocuser.h:62
LRESULT IntClientShutdown(IN PWND pWindow, IN WPARAM wParam, IN LPARAM lParam)
Definition: shutdown.c:22
struct Rect Rect
#define RDW_INVALIDATE
Definition: winuser.h:1204
const DWORD ExStyle
Definition: appswitch.c:72
#define WM_NCLBUTTONDBLCLK
Definition: winuser.h:1681
VOID FASTCALL UserReferenceObject(PVOID obj)
Definition: object.c:731
PCLS pcls
Definition: ntuser.h:699
#define WS_MAXIMIZE
Definition: pedump.c:623
DWORD style
Definition: ntuser.h:685

Referenced by GetControlColor(), NtUserMessageCall(), PopupMenuWndProc(), and UserMessageWindowProc().

◆ UserPaintCaption()

BOOL UserPaintCaption ( PWND  pWnd,
INT  Flags 
)

Definition at line 396 of file defwnd.c.

397 {
398  BOOL Ret = FALSE;
399 
400  if ( (pWnd->style & WS_VISIBLE) && ((pWnd->style & WS_CAPTION) == WS_CAPTION) )
401  {
402  if (pWnd->state & WNDS_HASCAPTION && pWnd->head.pti->MessageQueue == gpqForeground)
403  Flags |= DC_ACTIVE;
404  /*
405  * When themes are not enabled we can go on and paint the non client area.
406  * However if we do that with themes enabled we will draw a classic frame.
407  * This is solved by sending a themes specific message to notify the themes
408  * engine that the caption needs to be redrawn
409  */
411  {
412  /*
413  * This will cause uxtheme to either paint the themed caption or call
414  * RealUserDrawCaption in order to draw the classic caption when themes
415  * are disabled but the themes service is enabled
416  */
417  TRACE("UDCB Flags %08x\n", Flags);
419  }
420  else
421  {
423  UserDrawCaptionBar(pWnd, hDC, Flags | DC_FRAME); // DCFRAME added as fix for CORE-10855.
424  UserReleaseDC(pWnd, hDC, FALSE);
425  }
426  Ret = TRUE;
427  }
428  // Support window tray
429  return Ret;
430 }
PUSER_MESSAGE_QUEUE gpqForeground
Definition: focus.c:13
#define TRUE
Definition: types.h:120
static HDC
Definition: imagelist.c:92
PSERVERINFO gpsi
Definition: imm.c:17
#define DCX_USESTYLE
Definition: GetDCEx.c:10
HDC FASTCALL UserGetDCEx(PWND Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
#define DCX_WINDOW
Definition: winuser.h:2100
#define FALSE
Definition: types.h:117
DWORD dwSRVIFlags
Definition: ntuser.h:1022
unsigned int BOOL
Definition: ntddk_ex.h:94
THRDESKHEAD head
Definition: ntuser.h:674
#define DC_ACTIVE
Definition: winuser.h:427
#define UserHMGetHandle(obj)
Definition: ntuser.h:222
#define WS_CAPTION
Definition: pedump.c:624
#define TRACE(s)
Definition: solgame.cpp:4
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
#define WM_NCUAHDRAWCAPTION
Definition: undocuser.h:45
#define DC_FRAME
Definition: undocuser.h:148
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: message.c:1446
#define SRVINFO_APIHOOK
Definition: ntuser.h:929
static HDC hDC
Definition: 3dtext.c:33
VOID UserDrawCaptionBar(PWND pWnd, HDC hDC, INT Flags)
Definition: nonclient.c:900
DWORD state
Definition: ntuser.h:680
#define NULL
Definition: types.h:112
INT FASTCALL UserReleaseDC(PWND Window, HDC hDc, BOOL EndPaint)
Definition: windc.c:918
#define WS_VISIBLE
Definition: pedump.c:620
#define WNDS_HASCAPTION
Definition: ntuser.h:591
DWORD style
Definition: ntuser.h:685

Referenced by DefWndSetIcon(), IntDefWindowProc(), IntEnableMenuItem(), NtUserCallTwoParam(), NtUserSetClassLong(), RealDefWindowProcA(), and RealDefWindowProcW().