ReactOS 0.4.16-dev-1484-g212a1a5
defwnd.c File Reference
#include <user32.h>
#include <immdev.h>
Include dependency graph for defwnd.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (user32)
 
DWORD WINAPI DECLSPEC_HOTPATCH GetSysColor (int nIndex)
 
HBRUSH WINAPI DECLSPEC_HOTPATCH GetSysColorBrush (int nIndex)
 
BOOL WINAPI SetSysColors (int cElements, CONST INT *lpaElements, CONST COLORREF *lpaRgbValues)
 
BOOL FASTCALL DefSetText (HWND hWnd, PCWSTR String, BOOL Ansi)
 
HWND FASTCALL IntFindChildWindowToOwner (HWND hRoot, HWND hOwner)
 
static VOID DefWndTrackScrollBar (HWND Wnd, WPARAM wParam, POINT Pt)
 
LRESULT WINAPI DoAppSwitch (WPARAM wParam, LPARAM lParam)
 
LRESULT DefWndHandleSysCommand (HWND hWnd, WPARAM wParam, LPARAM lParam)
 
HBRUSH DefWndControlColor (HDC hDC, UINT ctlType)
 
static BOOL CALLBACK UserSendUiUpdateMsg (HWND hwnd, LPARAM lParam)
 
static void UserPaintCaption (PWND pwnd, INT Flags)
 
LRESULT FASTCALL DefWndGetIcon (PWND pWnd, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI User32DefWindowProc (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL bUnicode)
 
LRESULT WINAPI RealDefWindowProcA (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI RealDefWindowProcW (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI DefWindowProcA (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI DefWindowProcW (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
 

Function Documentation

◆ DefSetText()

BOOL FASTCALL DefSetText ( HWND  hWnd,
PCWSTR  String,
BOOL  Ansi 
)

Definition at line 61 of file defwnd.c.

62{
63 BOOL Ret;
64 LARGE_STRING lsString;
65
66 if ( String )
67 {
68 if ( Ansi )
70 else
72 }
73 Ret = NtUserDefSetText(hWnd, (String ? &lsString : NULL));
74
75 return Ret;
76}
HWND hWnd
Definition: settings.c:17
#define NULL
Definition: types.h:112
unsigned int BOOL
Definition: ntddk_ex.h:94
VOID NTAPI RtlInitLargeAnsiString(IN OUT PLARGE_ANSI_STRING, IN PCSZ, IN INT)
Definition: rtlstr.c:17
BOOL NTAPI NtUserDefSetText(HWND WindowHandle, PLARGE_STRING WindowText)
Definition: window.c:4471
VOID NTAPI RtlInitLargeUnicodeString(IN OUT PLARGE_UNICODE_STRING, IN PCWSTR, IN INT)
Definition: rtlstr.c:42
CONST char * PCSZ
Definition: umtypes.h:125
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433

◆ DefWindowProcA()

LRESULT WINAPI DefWindowProcA ( HWND  hWnd,
UINT  Msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1223 of file defwnd.c.

1224{
1225 BOOL Hook, msgOverride = FALSE;
1226 LRESULT Result = 0;
1227
1229
1230 Hook = BeginIfHookedUserApiHook();
1231 if (Hook)
1232 {
1233 msgOverride = IsMsgOverride(Msg, &guah.DefWndProcArray);
1234 if(msgOverride == FALSE)
1235 {
1237 }
1238 }
1239
1240 /* Bypass SEH and go direct. */
1241 if (!Hook || !msgOverride)
1243
1244 _SEH2_TRY
1245 {
1247 }
1249 {
1250 ERR("Got exception in hooked DefWindowProcA\n");
1251 }
1252 _SEH2_END;
1253
1255
1256 return Result;
1257}
#define ERR(fmt,...)
Definition: precomp.h:57
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
struct @1766 Msg[]
#define FALSE
Definition: types.h:117
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:90
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:82
#define _SEH2_END
Definition: pseh2_64.h:171
#define _SEH2_TRY
Definition: pseh2_64.h:71
UAHOWP DefWndProcArray
Definition: undocuser.h:352
WNDPROC DefWindowProcA
Definition: undocuser.h:350
LRESULT WINAPI RealDefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: defwnd.c:799
BOOL FASTCALL EndUserApiHook(VOID)
Definition: usrapihk.c:164
BOOL FASTCALL BeginIfHookedUserApiHook(VOID)
Definition: usrapihk.c:106
BOOL FASTCALL IsMsgOverride(UINT, PUAHOWP)
Definition: usrapihk.c:63
USERAPIHOOK guah
Definition: usrapihk.c:344
static __inline void LoadUserApiHook()
Definition: user_x.h:85
LONG_PTR LRESULT
Definition: windef.h:209
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409

◆ DefWindowProcW()

LRESULT WINAPI DefWindowProcW ( HWND  hWnd,
UINT  Msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1260 of file defwnd.c.

1261{
1262 BOOL Hook, msgOverride = FALSE;
1263 LRESULT Result = 0;
1264
1266
1267 Hook = BeginIfHookedUserApiHook();
1268 if (Hook)
1269 {
1270 msgOverride = IsMsgOverride(Msg, &guah.DefWndProcArray);
1271 if(msgOverride == FALSE)
1272 {
1274 }
1275 }
1276
1277 /* Bypass SEH and go direct. */
1278 if (!Hook || !msgOverride)
1280
1281 _SEH2_TRY
1282 {
1284 }
1286 {
1287 ERR("Got exception in hooked DefWindowProcW\n");
1288 }
1289 _SEH2_END;
1290
1292
1293 return Result;
1294}
WNDPROC DefWindowProcW
Definition: undocuser.h:351
LRESULT WINAPI RealDefWindowProcW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: defwnd.c:1023

◆ DefWndControlColor()

HBRUSH DefWndControlColor ( HDC  hDC,
UINT  ctlType 
)

Definition at line 208 of file defwnd.c.

209{
210 if (ctlType == CTLCOLOR_SCROLLBAR)
211 {
215 SetBkColor(hDC, bk);
216
217 /* if COLOR_WINDOW happens to be the same as COLOR_3DHILIGHT
218 * we better use 0x55aa bitmap brush to make scrollbar's background
219 * look different from the window background.
220 */
221 if ( bk == GetSysColor(COLOR_WINDOW))
222 return gpsi->hbrGray;
223
224 UnrealizeObject( hb );
225 return hb;
226 }
227
229
230 if ((ctlType == CTLCOLOR_EDIT) || (ctlType == CTLCOLOR_LISTBOX))
231 {
233 }
234 else
235 {
238 }
239
241}
static HDC hDC
Definition: 3dtext.c:33
PSERVERINFO gpsi
Definition: imm.c:18
DWORD WINAPI DECLSPEC_HOTPATCH GetSysColor(int nIndex)
Definition: defwnd.c:19
HBRUSH WINAPI DECLSPEC_HOTPATCH GetSysColorBrush(int nIndex)
Definition: defwnd.c:36
DWORD COLORREF
Definition: windef.h:300
BOOL WINAPI UnrealizeObject(_In_ HGDIOBJ)
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
Definition: dc.c:999
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:917
#define CTLCOLOR_SCROLLBAR
Definition: winuser.h:967
#define COLOR_WINDOW
Definition: winuser.h:929
#define COLOR_SCROLLBAR
Definition: winuser.h:923
#define COLOR_WINDOWTEXT
Definition: winuser.h:932
#define CTLCOLOR_LISTBOX
Definition: winuser.h:964
#define CTLCOLOR_EDIT
Definition: winuser.h:963
#define COLOR_3DHILIGHT
Definition: winuser.h:948
#define COLOR_3DFACE
Definition: winuser.h:940

◆ DefWndGetIcon()

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

Definition at line 287 of file defwnd.c.

288{
289 HICON hIconRet;
290 if ( wParam > ICON_SMALL2 )
291 {
293 return 0;
294 }
295 switch(wParam)
296 {
297 case ICON_BIG:
298 hIconRet = UserGetProp(UserHMGetHandle(pWnd), gpsi->atomIconProp, TRUE);
299 break;
300 case ICON_SMALL:
301 case ICON_SMALL2:
303 break;
304 default:
305 break;
306 }
307 return (LRESULT)hIconRet;
308}
#define TRUE
Definition: types.h:120
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
#define UserHMGetHandle(obj)
Definition: ntuser.h:230
static HICON
Definition: imagelist.c:80
ATOM atomIconProp
Definition: ntuser.h:1066
ATOM atomIconSmProp
Definition: ntuser.h:1065
#define ICON_BIG
Definition: tnclass.cpp:51
#define ICON_SMALL
Definition: tnclass.cpp:48
HANDLE FASTCALL UserGetProp(_In_ PWND Window, _In_ ATOM Atom, _In_ BOOLEAN SystemProp)
Definition: prop.c:46

◆ DefWndHandleSysCommand()

LRESULT DefWndHandleSysCommand ( HWND  hWnd,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 140 of file defwnd.c.

141{
142 POINT Pt;
143 LRESULT lResult;
144
145 if (!IsWindowEnabled( hWnd )) return 0;
146
147 switch (wParam & 0xfff0)
148 {
149 case SC_MOVE:
150 case SC_SIZE:
151// case SC_DEFAULT:
152 case SC_MOUSEMENU:
153 case SC_KEYMENU:
154 case SC_SCREENSAVE:
155 case SC_MINIMIZE:
156 case SC_MAXIMIZE:
157 case SC_RESTORE:
158 case SC_CLOSE:
159 case SC_HOTKEY:
161 return 0;
162
163 default:
164 break;
165 }
166
167 if (ISITHOOKED(WH_CBT))
168 {
170 if (lResult) return 0;
171 }
172
173 switch (wParam & 0xfff0)
174 {
175 case SC_VSCROLL:
176 case SC_HSCROLL:
177 {
178 Pt.x = (short)LOWORD(lParam);
179 Pt.y = (short)HIWORD(lParam);
181 }
182 break;
183
184 case SC_TASKLIST:
185 WinExec( "taskman.exe", SW_SHOWNORMAL );
186 break;
187
188
189 case SC_NEXTWINDOW:
190 case SC_PREVWINDOW:
192 break;
193
194 default:
195 FIXME("Unimplemented DefWndHandleSysCommand wParam 0x%x\n",wParam);
196 break;
197 }
198
199 return(0);
200}
#define FIXME(fmt,...)
Definition: precomp.h:53
UINT WINAPI DECLSPEC_HOTPATCH WinExec(LPCSTR lpCmdLine, UINT uCmdShow)
Definition: proc.c:4779
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
#define ISITHOOKED(HookId)
Definition: hook.h:6
BOOL NTAPI NtUserMessageCall(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, ULONG_PTR ResultInfo, DWORD dwType, BOOL Ansi)
Definition: message.c:2527
#define FNID_DEFWINDOWPROC
Definition: ntuser.h:863
#define SC_SCREENSAVE
Definition: mmsystem.h:933
#define LOWORD(l)
Definition: pedump.c:82
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define HIWORD(l)
Definition: typedefs.h:247
LRESULT WINAPI DoAppSwitch(WPARAM wParam, LPARAM lParam)
Definition: appswitch.c:631
static VOID DefWndTrackScrollBar(HWND Wnd, WPARAM wParam, POINT Pt)
Definition: defwnd.c:114
#define SW_SHOWNORMAL
Definition: winuser.h:781
#define SC_HSCROLL
Definition: winuser.h:2630
#define SC_MOUSEMENU
Definition: winuser.h:2631
#define WM_SYSCOMMAND
Definition: winuser.h:1769
#define SC_KEYMENU
Definition: winuser.h:2632
#define SC_PREVWINDOW
Definition: winuser.h:2627
#define SC_VSCROLL
Definition: winuser.h:2629
#define SC_TASKLIST
Definition: winuser.h:2635
#define WH_CBT
Definition: winuser.h:35
#define SC_SIZE
Definition: winuser.h:2620
#define SC_MINIMIZE
Definition: winuser.h:2622
#define SC_NEXTWINDOW
Definition: winuser.h:2626
#define SC_HOTKEY
Definition: winuser.h:2637
#define SC_CLOSE
Definition: winuser.h:2628
#define SC_MOVE
Definition: winuser.h:2621
BOOL WINAPI IsWindowEnabled(_In_ HWND)
#define SC_RESTORE
Definition: winuser.h:2634
#define SC_MAXIMIZE
Definition: winuser.h:2624

◆ DefWndTrackScrollBar()

static VOID DefWndTrackScrollBar ( HWND  Wnd,
WPARAM  wParam,
POINT  Pt 
)
static

Definition at line 114 of file defwnd.c.

115{
116 INT ScrollBar;
117
118 if (SC_HSCROLL == (wParam & 0xfff0))
119 {
120 if (HTHSCROLL != (wParam & 0x0f))
121 {
122 return;
123 }
124 ScrollBar = SB_HORZ;
125 }
126 else /* SC_VSCROLL */
127 {
128 if (HTVSCROLL != (wParam & 0x0f))
129 {
130 return;
131 }
132 ScrollBar = SB_VERT;
133 }
134 ScrollTrackScrollBar(Wnd, ScrollBar, Pt );
135}
int32_t INT
Definition: typedefs.h:58
VOID FASTCALL ScrollTrackScrollBar(HWND Wnd, INT SBType, POINT Pt)
Definition: scrollbar.c:1155
#define SB_VERT
Definition: winuser.h:553
#define HTVSCROLL
Definition: winuser.h:2518
#define HTHSCROLL
Definition: winuser.h:2517
#define SB_HORZ
Definition: winuser.h:552

Referenced by DefWndHandleSysCommand().

◆ DoAppSwitch()

LRESULT WINAPI DoAppSwitch ( WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 631 of file appswitch.c.

632{
633 HWND hwndActive;
634 MSG msg;
635
636 // FIXME: Is loading timing OK?
638
639 if (!CoolSwitch)
640 return 0;
641
642 // Already in the loop.
643 if (switchdialog || Esc) return 0;
644
645 if (lParam == VK_ESCAPE)
646 {
647 Esc = TRUE;
648
649 windowCount = 0;
651
652 if (windowCount < 2)
653 return 0;
654
656
657 hwndActive = GetActiveWindow();
658
659 if (hwndActive == NULL)
660 {
661 Esc = FALSE;
662 return 0;
663 }
664 }
665
666 // Capture current active window.
667 hwndActive = GetActiveWindow();
668 if (hwndActive)
669 SetCapture(hwndActive);
670
671 switch (lParam)
672 {
673 case VK_TAB:
674 if (!GetDialogFont() || !ProcessHotKey())
675 goto Exit;
676 break;
677
678 case VK_ESCAPE:
679 break;
680
681 default:
682 goto Exit;
683 }
684
685 if (!hwndActive)
686 goto Exit;
687
688 // Main message loop:
689 while (1)
690 {
691 for (;;)
692 {
693 if (PeekMessageW( &msg, 0, 0, 0, PM_NOREMOVE ))
694 {
695 if (!CallMsgFilterW( &msg, MSGF_NEXTWINDOW )) break;
696 /* remove the message from the queue */
697 PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
698 }
699 else
700 WaitMessage();
701 }
702
703 switch (msg.message)
704 {
705 case WM_KEYUP:
706 {
707 PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
708 if (msg.wParam == VK_MENU)
709 {
711 }
712 else if (msg.wParam == VK_RETURN)
713 {
715 }
716 else if (msg.wParam == VK_ESCAPE)
717 {
718 TRACE("DoAppSwitch VK_ESCAPE 2\n");
720 }
721 goto Exit; //break;
722 }
723
724 case WM_SYSKEYDOWN:
725 {
726 PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
727 if (HIWORD(msg.lParam) & KF_ALTDOWN)
728 {
729 if ( msg.wParam == VK_TAB )
730 {
731 if (Esc) break;
732 if (GetKeyState(VK_SHIFT) < 0)
733 {
734 MoveLeft();
735 }
736 else
737 {
738 MoveRight();
739 }
740 }
741 else if ( msg.wParam == VK_ESCAPE )
742 {
743 if (!Esc) break;
745 }
746 else if ( msg.wParam == VK_LEFT )
747 {
748 MoveLeft();
749 }
750 else if ( msg.wParam == VK_RIGHT )
751 {
752 MoveRight();
753 }
754 else if ( msg.wParam == VK_UP )
755 {
756 MoveUp();
757 }
758 else if ( msg.wParam == VK_DOWN )
759 {
760 MoveDown();
761 }
762 }
763 break;
764 }
765
766 case WM_LBUTTONUP:
767 PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
768 ProcessMouseMessage(msg.message, msg.lParam);
769 goto Exit;
770
771 default:
772 if (PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE ))
773 {
776 }
777 break;
778 }
779 }
780Exit:
783 if (Esc) DestroyAppWindows();
785 selectedWindow = 0;
786 windowCount = 0;
787 Esc = FALSE;
788 return 0;
789}
static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
Definition: appswitch.c:314
static void MoveLeft(void)
Definition: appswitch.c:574
static void MoveUp(void)
Definition: appswitch.c:588
void ProcessMouseMessage(UINT message, LPARAM lParam)
Definition: appswitch.c:324
static void MoveRight(void)
Definition: appswitch.c:582
void CompleteSwitch(BOOL doSwitch)
Definition: appswitch.c:155
DWORD GetDialogFont(VOID)
Definition: appswitch.c:465
void RotateTasks(BOOL bShift)
Definition: appswitch.c:537
static void LoadCoolSwitchSettings(void)
Definition: appswitch.c:97
BOOL ProcessHotKey(VOID)
Definition: appswitch.c:502
BOOL CoolSwitch
Definition: appswitch.c:66
int windowCount
Definition: appswitch.c:52
VOID DestroyAppWindows(VOID)
Definition: appswitch.c:619
HWND switchdialog
Definition: appswitch.c:41
static void MoveDown(void)
Definition: appswitch.c:603
int selectedWindow
Definition: appswitch.c:43
BOOL Esc
Definition: appswitch.c:63
#define msg(x)
Definition: auth_time.c:54
static void Exit(void)
Definition: sock.c:1330
#define TRACE(s)
Definition: solgame.cpp:4
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
HWND WINAPI SetCapture(_In_ HWND hWnd)
HWND WINAPI GetActiveWindow(void)
Definition: winpos.c:138
#define VK_TAB
Definition: winuser.h:2235
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define WM_KEYUP
Definition: winuser.h:1744
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2890
#define KF_ALTDOWN
Definition: winuser.h:2485
#define VK_UP
Definition: winuser.h:2261
BOOL WINAPI CallMsgFilterW(_In_ LPMSG, _In_ INT)
#define VK_RETURN
Definition: winuser.h:2237
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
#define MSGF_NEXTWINDOW
Definition: winuser.h:1190
#define PM_REMOVE
Definition: winuser.h:1207
BOOL WINAPI WaitMessage(void)
Definition: ntwrapper.h:350
#define WM_LBUTTONUP
Definition: winuser.h:1805
#define VK_LEFT
Definition: winuser.h:2260
#define VK_RIGHT
Definition: winuser.h:2262
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
#define VK_DOWN
Definition: winuser.h:2263
#define VK_SHIFT
Definition: winuser.h:2238
SHORT WINAPI GetAsyncKeyState(_In_ int)
#define VK_ESCAPE
Definition: winuser.h:2250
BOOL WINAPI DestroyWindow(_In_ HWND)
#define PM_NOREMOVE
Definition: winuser.h:1206
#define WM_SYSKEYDOWN
Definition: winuser.h:1747
SHORT WINAPI GetKeyState(_In_ int)
#define VK_MENU
Definition: winuser.h:2240

Referenced by DefWndHandleSysCommand().

◆ GetSysColor()

DWORD WINAPI DECLSPEC_HOTPATCH GetSysColor ( int  nIndex)

Definition at line 19 of file defwnd.c.

20{
21 if(nIndex >= 0 && nIndex < NUM_SYSCOLORS)
22 {
23 return gpsi->argbSystem[nIndex];
24 }
25
27 return 0;
28}
#define NUM_SYSCOLORS
Definition: SetSysColors.c:10

Referenced by DefWndControlColor().

◆ GetSysColorBrush()

HBRUSH WINAPI DECLSPEC_HOTPATCH GetSysColorBrush ( int  nIndex)

Definition at line 36 of file defwnd.c.

37{
38 if(nIndex >= 0 && nIndex < NUM_SYSCOLORS)
39 {
40 return gpsi->ahbrSystem[nIndex];
41 }
42
43 return NULL;
44}

Referenced by DefWndControlColor(), FillRect(), IntDrawRectEdge(), IntDrawState(), UITOOLS95_DFC_ButtonPush(), and UITOOLS_DrawCheckedRect().

◆ IntFindChildWindowToOwner()

HWND FASTCALL IntFindChildWindowToOwner ( HWND  hRoot,
HWND  hOwner 
)

Definition at line 79 of file defwnd.c.

80{
81 HWND Ret;
82 PWND Child, OwnerWnd, Root, Owner;
83
85 Owner = ValidateHwnd(hOwner);
86
87 for( Child = Root->spwndChild ? DesktopPtrToUser(Root->spwndChild) : NULL;
88 Child;
89 Child = Child->spwndNext ? DesktopPtrToUser(Child->spwndNext) : NULL )
90 {
91 OwnerWnd = Child->spwndOwner ? DesktopPtrToUser(Child->spwndOwner) : NULL;
92 if(!OwnerWnd)
93 continue;
94
95 if (!(Child->style & WS_POPUP) || !(Child->style & WS_VISIBLE))
96 continue;
97
98 if(OwnerWnd == Owner)
99 {
100 Ret = Child->head.h;
101 return Ret;
102 }
103 }
104 ERR("IDCWTO Nothing found\n");
105 return NULL;
106}
static HTREEITEM hRoot
Definition: treeview.c:383
_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:1621
#define WS_POPUP
Definition: pedump.c:616
#define WS_VISIBLE
Definition: pedump.c:620
root entry for file system trees
Definition: entries.h:148
Definition: ntuser.h:694
struct _WND * spwndOwner
Definition: ntuser.h:715
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
Definition: wdffdo.h:536
#define ValidateHwnd(hwnd)
Definition: precomp.h:101
static PVOID FASTCALL DesktopPtrToUser(PVOID ptr)
Definition: utils.c:188

◆ RealDefWindowProcA()

LRESULT WINAPI RealDefWindowProcA ( HWND  hWnd,
UINT  Msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 799 of file defwnd.c.

803{
804 LRESULT Result = 0;
805 PWND Wnd;
806
807 Wnd = ValidateHwnd(hWnd);
808
809 if ( !Wnd &&
811 Msg != WM_CTLCOLORBTN &&
812 Msg != WM_CTLCOLORDLG &&
814 return 0;
815
817 switch (Msg)
818 {
819 case WM_NCCREATE:
820 {
821 if ( Wnd &&
822 Wnd->style & (WS_HSCROLL | WS_VSCROLL) )
823 {
824 if (!Wnd->pSBInfo)
825 {
826 SCROLLINFO si = {sizeof si, SIF_ALL, 0, 100, 0, 0, 0};
829 }
830 }
831
832 if (lParam)
833 {
835 /* check for string, as static icons, bitmaps (SS_ICON, SS_BITMAP)
836 * may have child window IDs instead of window name */
837 if (HIWORD(cs->lpszName))
838 {
839 DefSetText(hWnd, (PCWSTR)cs->lpszName, TRUE);
840 }
841 Result = 1;
842 }
843 break;
844 }
845
846 case WM_GETTEXTLENGTH:
847 {
848 PWSTR buf;
849 ULONG len;
850
851 if (Wnd != NULL && Wnd->strName.Length != 0)
852 {
854 if (buf != NULL &&
856 buf,
857 Wnd->strName.Length)))
858 {
859 Result = (LRESULT) len;
860 }
861 }
862 else Result = 0L;
863
864 break;
865 }
866
867 case WM_GETTEXT:
868 {
869 PWSTR buf = NULL;
870 PSTR outbuf = (PSTR)lParam;
871 SIZE_T copy;
872
873 if (Wnd != NULL && wParam != 0)
874 {
875 if (Wnd->strName.Buffer != NULL)
877 else
878 outbuf[0] = L'\0';
879
880 if (buf != NULL)
881 {
882 if (Wnd->strName.Length != 0)
883 {
884 copy = min(Wnd->strName.Length / sizeof(WCHAR), wParam - 1);
886 0,
887 buf,
888 copy,
889 outbuf,
890 wParam,
891 NULL,
892 NULL);
893 outbuf[Result] = '\0';
894 }
895 else
896 outbuf[0] = '\0';
897 }
898 }
899 break;
900 }
901
902 case WM_SETTEXT:
903 {
905
907 {
909 IntNotifyWinEvent(EVENT_OBJECT_NAMECHANGE, hWnd, OBJID_WINDOW, CHILDID_SELF, 0);
910 }
911 Result = 1;
912 break;
913 }
914
915 case WM_IME_KEYDOWN:
916 {
918 break;
919 }
920
921 case WM_IME_KEYUP:
922 {
924 break;
925 }
926
927 case WM_IME_CHAR:
928 {
929 if (HIBYTE(wParam))
932 break;
933 }
934
935 case WM_IME_COMPOSITION:
936 if (lParam & GCS_RESULTSTR)
937 {
938 LONG size, i;
939 unsigned char lead = 0;
940 char *buf = NULL;
941 HIMC himc = IMM_FN(ImmGetContext)( hWnd );
942
943 if (himc)
944 {
946 {
947 if (!(buf = HeapAlloc( GetProcessHeap(), 0, size ))) size = 0;
949 }
950 IMM_FN(ImmReleaseContext)( hWnd, himc );
951
952 for (i = 0; i < size; i++)
953 {
954 unsigned char c = buf[i];
955 if (!lead)
956 {
957 if (IsDBCSLeadByte( c ))
958 lead = c;
959 else
961 }
962 else
963 {
964 SendMessageA( hWnd, WM_IME_CHAR, MAKEWORD(c, lead), 1 );
965 lead = 0;
966 }
967 }
968 HeapFree( GetProcessHeap(), 0, buf );
969 }
970 }
971 /* fall through */
972 case WM_IME_STARTCOMPOSITION:
973 case WM_IME_ENDCOMPOSITION:
974 case WM_IME_SELECT:
975 case WM_IME_NOTIFY:
976 case WM_IME_CONTROL:
978NormalImeMsgHandling:
979 {
980 HWND hwndIME;
981
982 if (GetWin32ClientInfo()->dwTIFlags & TIF_DISABLEIME)
983 {
984 TRACE("This thread's IME is disabled\n");
985 break;
986 }
987
988 hwndIME = IMM_FN(ImmGetDefaultIMEWnd)(hWnd);
989 if (!hwndIME)
990 {
991 ERR("hwndIME was NULL\n");
992 break;
993 }
994
995 if (hwndIME == hWnd)
996 {
998 break;
999 }
1000
1001 Result = SendMessageA(hwndIME, Msg, wParam, lParam);
1002 break;
1003 }
1004
1005 case WM_IME_SYSTEM:
1006 {
1007 if (wParam == 4)
1008 break;
1009
1010 goto NormalImeMsgHandling;
1011 }
1012
1013 default:
1015 }
1016
1018 return Result;
1019}
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
Definition: copy.c:51
DWORD HIMC
Definition: dimm.idl:75
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define WideCharToMultiByte
Definition: compat.h:111
BOOL WINAPI IsDBCSLeadByte(BYTE testchar)
Definition: locale.c:2126
#define L(x)
Definition: resources.c:13
GLsizeiptr size
Definition: glext.h:5919
const GLubyte * c
Definition: glext.h:8905
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define cs
Definition: i386-dis.c:442
#define WM_IME_SYSTEM
Definition: imm32_undoc.h:32
LONG WINAPI ImmGetCompositionStringA(_In_ HIMC hIMC, _In_ DWORD dwIndex, _Out_writes_bytes_opt_(dwBufLen) LPVOID lpBuf, _In_ DWORD dwBufLen)
Definition: compstr.c:860
#define GCS_RESULTSTR
Definition: imm.h:234
HIMC WINAPI ImmGetContext(_In_ HWND hWnd)
Definition: imm.c:1065
BOOL WINAPI ImmReleaseContext(_In_ HWND hWnd, _In_ HIMC hIMC)
Definition: imm.c:1109
HWND WINAPI ImmGetDefaultIMEWnd(_In_opt_ HWND hWnd)
Definition: ime.c:440
#define TIF_DISABLEIME
Definition: ntuser.h:288
#define GetWin32ClientInfo()
Definition: ntuser.h:352
#define LOBYTE(W)
Definition: jmemdos.c:487
#define HIBYTE(W)
Definition: jmemdos.c:486
#define min(a, b)
Definition: monoChain.cc:55
_Use_decl_annotations_ NTSTATUS NTAPI RtlUnicodeToMultiByteSize(_Out_ PULONG MbSize, _In_ PCWCH UnicodeString, _In_ ULONG UnicodeSize)
Definition: nlsboot.c:145
BOOL UserPaintCaption(PWND pWnd, INT Flags)
Definition: defwnd.c:398
#define LRESULT
Definition: ole.h:14
#define WS_CAPTION
Definition: pedump.c:624
#define WS_VSCROLL
Definition: pedump.c:627
long LONG
Definition: pedump.c:60
#define WS_HSCROLL
Definition: pedump.c:628
LRESULT WINAPI ImeWndProc_common(HWND, UINT, WPARAM, LPARAM, BOOL)
Definition: imm.c:989
DWORD style
Definition: ntuser.h:706
PSBINFO pSBInfo
Definition: ntuser.h:726
LARGE_UNICODE_STRING strName
Definition: ntuser.h:736
uint16_t * PWSTR
Definition: typedefs.h:56
char * PSTR
Definition: typedefs.h:51
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define MAKEWORD(a, b)
Definition: typedefs.h:248
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t ULONG
Definition: typedefs.h:59
LRESULT WINAPI User32DefWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL bUnicode)
Definition: defwnd.c:312
void SPY_EnterMessage(INT iFlag, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: spy.c:2593
#define IMM_FN(name)
Definition: user32p.h:56
#define SPY_RESULT_DEFWND
Definition: user32p.h:72
void SPY_ExitMessage(INT iFlag, HWND hwnd, UINT msg, LRESULT lReturn, WPARAM wParam, LPARAM lParam)
Definition: spy.c:2648
#define SPY_DEFWNDPROC
Definition: user32p.h:69
BOOL APIENTRY DefSetText(PWND Wnd, PCWSTR WindowText)
Definition: window.c:4390
VOID FASTCALL IntNotifyWinEvent(DWORD Event, PWND pWnd, LONG idObject, LONG idChild, DWORD flags)
Definition: event.c:178
#define OBJID_WINDOW
Definition: winable.h:15
#define CHILDID_SELF
Definition: winable.h:14
#define WM_IME_KEYUP
Definition: winuser.h:1867
#define WM_CTLCOLORSTATIC
Definition: winuser.h:1800
#define WM_GETTEXTLENGTH
Definition: winuser.h:1647
#define GetWindowLongPtrW
Definition: winuser.h:4931
#define WM_IME_NOTIFY
Definition: winuser.h:1858
#define WM_IME_KEYDOWN
Definition: winuser.h:1866
struct tagCREATESTRUCTA * LPCREATESTRUCTA
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_GETTEXT
Definition: winuser.h:1646
#define WM_CTLCOLORMSGBOX
Definition: winuser.h:1794
#define WM_NCCREATE
Definition: winuser.h:1711
#define WM_IME_SETCONTEXT
Definition: winuser.h:1857
#define WM_CTLCOLORBTN
Definition: winuser.h:1797
#define WM_SETTEXT
Definition: winuser.h:1645
#define WM_IME_CHAR
Definition: winuser.h:1862
#define SIF_ALL
Definition: winuser.h:1243
#define DC_TEXT
Definition: winuser.h:430
#define WM_CHAR
Definition: winuser.h:1745
#define WM_IME_CONTROL
Definition: winuser.h:1859
int WINAPI SetScrollInfo(_In_ HWND, _In_ int, _In_ LPCSCROLLINFO, _In_ BOOL)
#define WM_IME_SELECT
Definition: winuser.h:1861
#define WM_KEYDOWN
Definition: winuser.h:1743
#define GWL_STYLE
Definition: winuser.h:863
BOOL WINAPI PostMessageA(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_CTLCOLORDLG
Definition: winuser.h:1798
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by DefWindowProcA(), and ResetUserApiHook().

◆ RealDefWindowProcW()

LRESULT WINAPI RealDefWindowProcW ( HWND  hWnd,
UINT  Msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1023 of file defwnd.c.

1027{
1028 LRESULT Result = 0;
1029 PWND Wnd;
1030
1031 Wnd = ValidateHwnd(hWnd);
1032
1033 if ( !Wnd &&
1035 Msg != WM_CTLCOLORBTN &&
1036 Msg != WM_CTLCOLORDLG &&
1038 return 0;
1039
1041 switch (Msg)
1042 {
1043 case WM_NCCREATE:
1044 {
1045 if ( Wnd &&
1046 Wnd->style & (WS_HSCROLL | WS_VSCROLL) )
1047 {
1048 if (!Wnd->pSBInfo)
1049 {
1050 SCROLLINFO si = {sizeof si, SIF_ALL, 0, 100, 0, 0, 0};
1051 if (Wnd->style & WS_HSCROLL)
1053 if (Wnd->style & WS_VSCROLL)
1055 }
1056 }
1057
1058 if (lParam)
1059 {
1061 /* check for string, as static icons, bitmaps (SS_ICON, SS_BITMAP)
1062 * may have child window IDs instead of window name */
1063 if (HIWORD(cs->lpszName))
1064 {
1065 DefSetText(hWnd, cs->lpszName, FALSE);
1066 }
1067 Result = 1;
1068 }
1069 break;
1070 }
1071
1072 case WM_GETTEXTLENGTH:
1073 {
1074 PWSTR buf;
1075 ULONG len;
1076
1077 if (Wnd != NULL && Wnd->strName.Length != 0)
1078 {
1080 if (buf != NULL &&
1082 buf,
1083 Wnd->strName.Length)))
1084 {
1085 Result = (LRESULT) (Wnd->strName.Length / sizeof(WCHAR));
1086 }
1087 }
1088 else Result = 0L;
1089
1090 break;
1091 }
1092
1093 case WM_GETTEXT:
1094 {
1095 PWSTR buf = NULL;
1096 PWSTR outbuf = (PWSTR)lParam;
1097
1098 if (Wnd != NULL && wParam != 0)
1099 {
1100 if (Wnd->strName.Buffer != NULL)
1102 else
1103 outbuf[0] = L'\0';
1104
1105 if (buf != NULL)
1106 {
1107 if (Wnd->strName.Length != 0)
1108 {
1109 Result = min(Wnd->strName.Length / sizeof(WCHAR), wParam - 1);
1110 RtlCopyMemory(outbuf,
1111 buf,
1112 Result * sizeof(WCHAR));
1113 outbuf[Result] = L'\0';
1114 }
1115 else
1116 outbuf[0] = L'\0';
1117 }
1118 }
1119 break;
1120 }
1121
1122 case WM_SETTEXT:
1123 {
1125
1128 Result = 1;
1129 break;
1130 }
1131
1132 case WM_IME_CHAR:
1133 {
1135 Result = 0;
1136 break;
1137 }
1138
1139 case WM_IME_KEYDOWN:
1140 {
1142 break;
1143 }
1144
1145 case WM_IME_KEYUP:
1146 {
1148 break;
1149 }
1150
1151 case WM_IME_COMPOSITION:
1152 if (lParam & GCS_RESULTSTR)
1153 {
1154 LONG size, i;
1155 WCHAR *buf = NULL;
1156 HIMC himc = IMM_FN(ImmGetContext)( hWnd );
1157
1158 if (himc)
1159 {
1161 {
1162 if (!(buf = HeapAlloc( GetProcessHeap(), 0, size * sizeof(WCHAR) ))) size = 0;
1163 else size = IMM_FN(ImmGetCompositionStringW)( himc, GCS_RESULTSTR, buf, size * sizeof(WCHAR) );
1164 }
1165 IMM_FN(ImmReleaseContext)( hWnd, himc );
1166
1167 for (i = 0; i < size / sizeof(WCHAR); i++)
1169 HeapFree( GetProcessHeap(), 0, buf );
1170 }
1171 }
1172 /* fall through */
1173 case WM_IME_STARTCOMPOSITION:
1174 case WM_IME_ENDCOMPOSITION:
1175 case WM_IME_SELECT:
1176 case WM_IME_NOTIFY:
1177 case WM_IME_CONTROL:
1178 case WM_IME_SETCONTEXT:
1179NormalImeMsgHandling:
1180 {
1181 HWND hwndIME;
1182
1183 if (GetWin32ClientInfo()->dwTIFlags & TIF_DISABLEIME)
1184 {
1185 TRACE("This thread's IME is disabled\n");
1186 break;
1187 }
1188
1189 hwndIME = IMM_FN(ImmGetDefaultIMEWnd)(hWnd);
1190 if (!hwndIME)
1191 {
1192 ERR("hwndIME was NULL\n");
1193 break;
1194 }
1195
1196 if (hwndIME == hWnd)
1197 {
1198 ImeWndProc_common(hwndIME, Msg, wParam, lParam, TRUE);
1199 break;
1200 }
1201
1202 Result = SendMessageW(hwndIME, Msg, wParam, lParam);
1203 break;
1204 }
1205
1206 case WM_IME_SYSTEM:
1207 {
1208 if (wParam == 4)
1209 break;
1210
1211 goto NormalImeMsgHandling;
1212 }
1213
1214 default:
1216 }
1218
1219 return Result;
1220}
LONG WINAPI ImmGetCompositionStringW(_In_ HIMC hIMC, _In_ DWORD dwIndex, _Out_writes_bytes_opt_(dwBufLen) LPVOID lpBuf, _In_ DWORD dwBufLen)
Definition: compstr.c:908
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
struct tagCREATESTRUCTW * LPCREATESTRUCTW
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by DefWindowProcW(), and ResetUserApiHook().

◆ SetSysColors()

BOOL WINAPI SetSysColors ( int  cElements,
CONST INT lpaElements,
CONST COLORREF lpaRgbValues 
)

Definition at line 51 of file defwnd.c.

55{
56 return NtUserSetSysColors(cElements, lpaElements, lpaRgbValues, 0);
57}
BOOL NTAPI NtUserSetSysColors(int cElements, IN CONST INT *lpaElements, IN CONST COLORREF *lpaRgbValues, FLONG Flags)
Definition: ntstubs.c:288

◆ User32DefWindowProc()

LRESULT WINAPI User32DefWindowProc ( HWND  hWnd,
UINT  Msg,
WPARAM  wParam,
LPARAM  lParam,
BOOL  bUnicode 
)

Definition at line 312 of file defwnd.c.

317{
318 PWND pWnd = NULL;
319 if (hWnd)
320 {
321 pWnd = ValidateHwnd(hWnd);
322 if (!pWnd) return 0;
323 }
324
325 switch (Msg)
326 {
327 case WM_DEVICECHANGE:
328 return TRUE;
329
330 case WM_RBUTTONUP:
331 {
332 POINT Pt;
333 Pt.x = GET_X_LPARAM(lParam);
334 Pt.y = GET_Y_LPARAM(lParam);
335 ClientToScreen(hWnd, &Pt);
336 lParam = MAKELPARAM(Pt.x, Pt.y);
337 if (bUnicode)
338 {
340 }
341 else
342 {
344 }
345 break;
346 }
347
348 case WM_NCRBUTTONUP:
349 /*
350 * FIXME : we must NOT send WM_CONTEXTMENU on a WM_NCRBUTTONUP (checked
351 * in Windows), but what _should_ we do? According to MSDN :
352 * "If it is appropriate to do so, the system sends the WM_SYSCOMMAND
353 * message to the window". When is it appropriate?
354 */
355 ERR("WM_NCRBUTTONUP\n");
356 break;
357
358 case WM_XBUTTONUP:
359 case WM_NCXBUTTONUP:
360 if (HIWORD(wParam) == XBUTTON1 || HIWORD(wParam) == XBUTTON2)
361 {
363 MAKELPARAM(LOWORD(wParam), FAPPCOMMAND_MOUSE | HIWORD(wParam)));
364 }
365 break;
366
367 case WM_CONTEXTMENU:
368 {
370 {
371 if (bUnicode)
372 {
374 }
375 else
376 {
378 }
379 }
380 else
381 {
382 goto GoSS;
383 }
384 break;
385 }
386
387 case WM_CLOSE:
389 return (0);
390
391 case WM_MOUSEACTIVATE:
393 {
395 if (Ret) return (Ret);
396 }
398
399 case WM_ACTIVATE:
400 /* The default action in Windows is to set the keyboard focus to
401 * the window, if it's being activated and not minimized */
402 if (LOWORD(wParam) != WA_INACTIVE &&
404 {
405 //ERR("WM_ACTIVATE %p\n",hWnd);
406 SetFocus(hWnd);
407 }
408 break;
409
410 case WM_MOUSEWHEEL:
413 break;
414
415 case WM_ERASEBKGND:
417 {
418 RECT Rect;
419 HBRUSH hBrush = (HBRUSH)GetClassLongPtrW(hWnd, GCL_HBRBACKGROUND);
420
421 if (NULL == hBrush)
422 {
423 return 0;
424 }
426 {
427 /* can't use GetClipBox with a parent DC or we fill the whole parent */
429 DPtoLP((HDC)wParam, (LPPOINT)&Rect, 2);
430 }
431 else
432 {
434 }
435 FillRect((HDC)wParam, &Rect, hBrush);
436 return (1);
437 }
438
440 case WM_CTLCOLOREDIT:
442 case WM_CTLCOLORBTN:
443 case WM_CTLCOLORDLG:
447
448 case WM_CTLCOLOR:
450
451 case WM_SYSCOMMAND:
453
454 case WM_VKEYTOITEM:
455 case WM_CHARTOITEM:
456 return (-1);
457/*
458 case WM_DROPOBJECT:
459 return DRAG_FILE;
460*/
462 {
464 {
465 return(1);
466 }
467 break;
468 }
469
470 case WM_QUERYDRAGICON:
471 {
472 UINT Len;
473 HICON hIcon;
474
476 if (hIcon)
477 {
478 return ((LRESULT)hIcon);
479 }
480 for (Len = 1; Len < 64; Len++)
481 {
483 {
484 return((LRESULT)hIcon);
485 }
486 }
487 return ((LRESULT)LoadIconW(0, IDI_APPLICATION));
488 }
489
490 case WM_ISACTIVEICON:
491 {
492 BOOL isai;
493 isai = (pWnd->state & WNDS_ACTIVEFRAME) != 0;
494 return isai;
495 }
496
497 case WM_NOTIFYFORMAT:
498 {
499 if (lParam == NF_QUERY)
501 break;
502 }
503
504 case WM_GETICON:
505 {
506 return DefWndGetIcon(pWnd, wParam, lParam);
507 }
508
509 case WM_HELP:
510 {
511 if (bUnicode)
512 {
514 }
515 else
516 {
518 }
519 break;
520 }
521
522 case WM_QUERYOPEN:
524 {
525 return (1);
526 }
527
528 case WM_INPUTLANGCHANGEREQUEST:
529 {
530 HKL hNewKL;
531 HWND hwndFocus;
532
533 if ((wParam & INPUTLANGCHANGE_BACKWARD) && (wParam & INPUTLANGCHANGE_FORWARD))
534 return FALSE;
535
536 hwndFocus = GetFocus();
537 if (hwndFocus && hwndFocus != hWnd &&
539 {
540 return SendMessageW(hwndFocus, Msg, wParam, lParam);
541 }
542
543 if (wParam & INPUTLANGCHANGE_FORWARD)
544 hNewKL = (HKL)UlongToHandle(HKL_NEXT);
545 else if (wParam & INPUTLANGCHANGE_BACKWARD)
546 hNewKL = (HKL)UlongToHandle(HKL_PREV);
547 else
548 hNewKL = (HKL)lParam;
549
551 return TRUE;
552 }
553
554 case WM_INPUTLANGCHANGE:
555 {
556 int count = 0;
557 HWND *win_array = WIN_ListChildren( hWnd );
558
559 if (!win_array)
560 break;
561 while (win_array[count])
562 SendMessageW( win_array[count++], WM_INPUTLANGCHANGE, wParam, lParam);
563 HeapFree(GetProcessHeap(),0,win_array);
564 break;
565 }
566
567 case WM_QUERYUISTATE:
568 {
569 LRESULT Ret = 0;
570 PWND Wnd = ValidateHwnd(hWnd);
571 if (Wnd != NULL)
572 {
573 if (Wnd->HideFocus)
574 Ret |= UISF_HIDEFOCUS;
575 if (Wnd->HideAccel)
576 Ret |= UISF_HIDEACCEL;
577 }
578 return Ret;
579 }
580
581 case WM_CHANGEUISTATE:
582 {
583 BOOL AlwaysShowCues = FALSE;
586 PWND Wnd;
587
588 SystemParametersInfoW(SPI_GETKEYBOARDCUES, 0, &AlwaysShowCues, 0);
589 if (AlwaysShowCues)
590 break;
591
592 Wnd= ValidateHwnd(hWnd);
593 if (!Wnd || lParam != 0)
594 break;
595
596 if (Flags & ~(UISF_HIDEFOCUS | UISF_HIDEACCEL | UISF_ACTIVE))
597 break;
598
599 if (Flags & UISF_ACTIVE)
600 {
601 WARN("WM_CHANGEUISTATE does not yet support UISF_ACTIVE\n");
602 }
603
604 if (Action == UIS_INITIALIZE)
605 {
607 if (Desk == NULL)
608 break;
609
610 Action = Desk->LastInputWasKbd ? UIS_CLEAR : UIS_SET;
611 Flags = UISF_HIDEFOCUS | UISF_HIDEACCEL;
612
613 /* We need to update wParam in case we need to send out messages */
615 }
616
617 switch (Action)
618 {
619 case UIS_SET:
620 /* See if we actually need to change something */
621 if ((Flags & UISF_HIDEFOCUS) && !Wnd->HideFocus)
622 break;
623 if ((Flags & UISF_HIDEACCEL) && !Wnd->HideAccel)
624 break;
625
626 /* Don't need to do anything... */
627 return 0;
628
629 case UIS_CLEAR:
630 /* See if we actually need to change something */
631 if ((Flags & UISF_HIDEFOCUS) && Wnd->HideFocus)
632 break;
633 if ((Flags & UISF_HIDEACCEL) && Wnd->HideAccel)
634 break;
635
636 /* Don't need to do anything... */
637 return 0;
638
639 default:
640 WARN("WM_CHANGEUISTATE: Unsupported Action 0x%x\n", Action);
641 break;
642 }
643
644 if ((Wnd->style & WS_CHILD) && Wnd->spwndParent != NULL)
645 {
646 /* We're a child window and we need to pass this message down until
647 we reach the root */
649 }
650 else
651 {
652 /* We're a top level window, we need to change the UI state */
653 Msg = WM_UPDATEUISTATE;
654 }
655
656 if (bUnicode)
657 return SendMessageW(hWnd, Msg, wParam, lParam);
658 else
659 return SendMessageA(hWnd, Msg, wParam, lParam);
660 }
661
662 case WM_UPDATEUISTATE:
663 {
664 BOOL Change = TRUE;
665 BOOL AlwaysShowCues = FALSE;
668 PWND Wnd;
669
670 SystemParametersInfoW(SPI_GETKEYBOARDCUES, 0, &AlwaysShowCues, 0);
671 if (AlwaysShowCues)
672 break;
673
674 Wnd = ValidateHwnd(hWnd);
675 if (!Wnd || lParam != 0)
676 break;
677
678 if (Flags & ~(UISF_HIDEFOCUS | UISF_HIDEACCEL | UISF_ACTIVE))
679 break;
680
681 if (Flags & UISF_ACTIVE)
682 {
683 WARN("WM_UPDATEUISTATE does not yet support UISF_ACTIVE\n");
684 }
685
686 if (Action == UIS_INITIALIZE)
687 {
689 if (Desk == NULL)
690 break;
691
692 Action = Desk->LastInputWasKbd ? UIS_CLEAR : UIS_SET;
693 Flags = UISF_HIDEFOCUS | UISF_HIDEACCEL;
694
695 /* We need to update wParam for broadcasting the update */
697 }
698
699 switch (Action)
700 {
701 case UIS_SET:
702 /* See if we actually need to change something */
703 if ((Flags & UISF_HIDEFOCUS) && !Wnd->HideFocus)
704 break;
705 if ((Flags & UISF_HIDEACCEL) && !Wnd->HideAccel)
706 break;
707
708 /* Don't need to do anything... */
709 Change = FALSE;
710 break;
711
712 case UIS_CLEAR:
713 /* See if we actually need to change something */
714 if ((Flags & UISF_HIDEFOCUS) && Wnd->HideFocus)
715 break;
716 if ((Flags & UISF_HIDEACCEL) && Wnd->HideAccel)
717 break;
718
719 /* Don't need to do anything... */
720 Change = FALSE;
721 break;
722
723 default:
724 WARN("WM_UPDATEUISTATE: Unsupported Action 0x%x\n", Action);
725 return 0;
726 }
727
728 /* Pack the information and call win32k */
729 if (Change)
730 {
731 if (!NtUserxUpdateUiState(hWnd, Flags | ((DWORD)Action << 3)))
732 break;
733 }
734
735 /* Always broadcast the update to all children */
738 (LPARAM)wParam);
739
740 break;
741 }
742
744 {
745 TRACE("WM_COPYGLOBALDATA hGlobal %p Size %d Flags 0x%x\n",lParam,wParam,GlobalFlags((HGLOBAL)lParam));
746 return lParam;
747 }
748
749/* Move to Win32k !*/
750 case WM_SHOWWINDOW:
751 if (!lParam) break; // Call when it is necessary.
752 case WM_LBUTTONDOWN:
753 case WM_RBUTTONDOWN:
754 case WM_MBUTTONDOWN:
755 case WM_NCLBUTTONDOWN:
756 case WM_NCRBUTTONDOWN:
757 case WM_LBUTTONDBLCLK:
759 case WM_KEYF1:
760 case WM_KEYUP:
761 case WM_SYSKEYUP:
762 case WM_KEYDOWN:
763 case WM_SYSKEYDOWN:
764 case WM_SYSCHAR:
765 case WM_CANCELMODE:
766 case WM_PAINTICON:
767 case WM_PAINT:
768 case WM_PRINT:
769 case WM_SETICON:
773 case WM_NCPAINT:
774 case WM_NCACTIVATE:
775 case WM_NCCALCSIZE:
776 case WM_NCHITTEST:
777 case WM_SYNCPAINT:
778 case WM_SETREDRAW:
780 case WM_GETHOTKEY:
781 case WM_SETHOTKEY:
784 case WM_APPCOMMAND:
785 case WM_SETCURSOR:
787GoSS:
788 {
789 LRESULT lResult;
791 return lResult;
792 }
793 }
794 return 0;
795}
#define WARN(fmt,...)
Definition: precomp.h:61
#define UlongToHandle(ul)
Definition: basetsd.h:97
#define Len
Definition: deflate.h:82
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
GLuint GLuint GLsizei count
Definition: gl.h:1545
UINT NTAPI GlobalFlags(HGLOBAL hMem)
Definition: heapmem.c:520
HKL NTAPI NtUserActivateKeyboardLayout(HKL hKL, ULONG Flags)
Definition: kbdlayout.c:1226
#define WNDS_ACTIVEFRAME
Definition: ntuser.h:611
static HDC
Definition: imagelist.c:88
#define WM_KEYF1
Definition: msg.c:47
HICON hIcon
Definition: msconfig.c:44
UINT_PTR HKL
Definition: msctf.idl:125
unsigned int UINT
Definition: ndis.h:50
LRESULT FASTCALL DefWndGetIcon(PWND pWnd, WPARAM wParam, LPARAM lParam)
Definition: defwnd.c:476
LRESULT FASTCALL DefWndHandleSysCommand(PWND pWnd, WPARAM wParam, LPARAM lParam)
Definition: defwnd.c:125
HBRUSH FASTCALL DefWndControlColor(HDC hDC, UINT ctlType)
Definition: defwnd.c:32
EXTINLINE BOOL NtUserxUpdateUiState(HWND hWnd, DWORD Param)
Definition: ntwrapper.h:686
#define WS_CHILD
Definition: pedump.c:617
#define WS_EX_ACCEPTFILES
Definition: pedump.c:648
#define WS_MINIMIZE
Definition: pedump.c:622
#define WM_CONTEXTMENU
Definition: richedit.h:64
UINT LastInputWasKbd
Definition: ntuser.h:154
UINT HideFocus
Definition: ntuser.h:758
UINT HideAccel
Definition: ntuser.h:759
DWORD state
Definition: ntuser.h:701
struct _WND * spwndParent
Definition: ntuser.h:713
#define WM_MOUSEWHEEL
Definition: treelist.c:96
#define WM_COPYGLOBALDATA
Definition: undocuser.h:38
#define WM_NCUAHDRAWCAPTION
Definition: undocuser.h:48
#define WM_QUERYDROPOBJECT
Definition: undocuser.h:57
#define WM_ISACTIVEICON
Definition: undocuser.h:35
#define WM_CLIENTSHUTDOWN
Definition: undocuser.h:37
#define WM_POPUPSYSTEMMENU
Definition: undocuser.h:62
#define WC_DIALOG
Definition: undocuser.h:13
#define WM_NCUAHDRAWFRAME
Definition: undocuser.h:49
static BOOL CALLBACK UserSendUiUpdateMsg(HWND hwnd, LPARAM lParam)
Definition: defwnd.c:244
HWND * WIN_ListChildren(HWND hWndparent)
Definition: mdi.c:139
static __inline PDESKTOPINFO GetThreadDesktopInfo(VOID)
Definition: user_x.h:43
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
Definition: wdfiotarget.h:510
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:300
#define WM_CTLCOLOR
Definition: windowsx.h:29
#define GET_X_LPARAM(lp)
Definition: windowsx.h:299
int WINAPI GetClipBox(_In_ HDC, _Out_ LPRECT)
BOOL WINAPI DPtoLP(_In_ HDC hdc, _Inout_updates_(c) LPPOINT lppt, _In_ int c)
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
#define WM_PAINT
Definition: winuser.h:1648
HWND WINAPI GetFocus(void)
Definition: window.c:1863
#define WM_ERASEBKGND
Definition: winuser.h:1653
#define WM_GETHOTKEY
Definition: winuser.h:1681
#define MAKEWPARAM(l, h)
Definition: winuser.h:4111
#define WM_CLOSE
Definition: winuser.h:1649
#define MAKELPARAM(l, h)
Definition: winuser.h:4110
#define KLF_SETFORPROCESS
Definition: winuser.h:117
#define WM_CHARTOITEM
Definition: winuser.h:1677
#define HTCAPTION
Definition: winuser.h:2512
#define WM_QUERYOPEN
Definition: winuser.h:1652
#define WM_SETHOTKEY
Definition: winuser.h:1680
#define WM_WINDOWPOSCHANGING
Definition: winuser.h:1689
#define WM_SYNCPAINT
Definition: winuser.h:1718
#define WM_CANCELMODE
Definition: winuser.h:1663
#define WM_LBUTTONDBLCLK
Definition: winuser.h:1806
#define MA_ACTIVATE
Definition: winuser.h:2537
#define WM_APPCOMMAND
Definition: winuser.h:1910
#define HKL_PREV
Definition: winuser.h:110
#define WM_NCHITTEST
Definition: winuser.h:1714
#define WM_RBUTTONUP
Definition: winuser.h:1808
#define WM_CTLCOLORSCROLLBAR
Definition: winuser.h:1799
#define WA_INACTIVE
Definition: winuser.h:2664
#define MA_NOACTIVATE
Definition: winuser.h:2539
#define WM_LBUTTONDOWN
Definition: winuser.h:1804
#define WM_DEVICECHANGE
Definition: winuser.h:1839
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1654
BOOL WINAPI EnumChildWindows(_In_opt_ HWND, _In_ WNDENUMPROC, _In_ LPARAM)
#define WM_QUERYDRAGICON
Definition: winuser.h:1682
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define WM_NCLBUTTONDBLCLK
Definition: winuser.h:1722
#define IDI_APPLICATION
Definition: winuser.h:712
#define WM_ACTIVATE
Definition: winuser.h:1640
#define WM_SHOWWINDOW
Definition: winuser.h:1656
#define WM_RBUTTONDOWN
Definition: winuser.h:1807
BOOL WINAPI IsWindowUnicode(_In_ HWND)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define WM_NCACTIVATE
Definition: winuser.h:1716
#define WM_SYSCHAR
Definition: winuser.h:1749
#define HKL_NEXT
Definition: winuser.h:109
HWND WINAPI SetFocus(_In_opt_ HWND)
#define WM_QUERYENDSESSION
Definition: winuser.h:1650
#define WM_SYSKEYUP
Definition: winuser.h:1748
#define GCL_HBRBACKGROUND
Definition: winuser.h:672
#define WM_MOUSEACTIVATE
Definition: winuser.h:1665
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
HWND WINAPI GetParent(_In_ HWND)
#define GetClassLongPtrW
Definition: winuser.h:4666
#define NFR_ANSI
Definition: winuser.h:2494
#define WM_SETCURSOR
Definition: winuser.h:1664
#define WM_CTLCOLORLISTBOX
Definition: winuser.h:1796
#define WM_NCRBUTTONUP
Definition: winuser.h:1724
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define WM_ICONERASEBKGND
Definition: winuser.h:1670
#define WM_PRINT
Definition: winuser.h:1908
#define NFR_UNICODE
Definition: winuser.h:2495
#define GCL_HICON
Definition: winuser.h:674
#define WM_NCCALCSIZE
Definition: winuser.h:1713
#define CS_PARENTDC
Definition: winuser.h:664
#define WM_CTLCOLOREDIT
Definition: winuser.h:1795
#define WM_WINDOWPOSCHANGED
Definition: winuser.h:1690
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2427
#define WM_NCLBUTTONDOWN
Definition: winuser.h:1720
#define GCW_ATOM
Definition: winuser.h:669
#define GCL_STYLE
Definition: winuser.h:678
#define WM_PAINTICON
Definition: winuser.h:1669
#define NF_QUERY
Definition: winuser.h:2496
#define WM_MBUTTONDOWN
Definition: winuser.h:1810
#define WM_NCPAINT
Definition: winuser.h:1715
#define WM_VKEYTOITEM
Definition: winuser.h:1676
#define WM_NCRBUTTONDOWN
Definition: winuser.h:1723
#define GWL_EXSTYLE
Definition: winuser.h:862
#define WM_SETREDRAW
Definition: winuser.h:1644
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170

Referenced by RealDefWindowProcA(), RealDefWindowProcW(), and RegisterClientPFN().

◆ UserPaintCaption()

static void UserPaintCaption ( PWND  pwnd,
INT  Flags 
)
static

Definition at line 254 of file defwnd.c.

255{
256 if ( pwnd->style & WS_VISIBLE && (pwnd->style & WS_CAPTION) == WS_CAPTION )
257 {
259 Flags |= DC_ACTIVE;
260 /*
261 * When themes are not enabled we can go on and paint the non client area.
262 * However if we do that with themes enabled we will draw a classic frame.
263 * This is solved by sending a themes specific message to notify the themes
264 * engine that the caption needs to be redrawn
265 */
267 {
268 /*
269 * This will cause uxtheme to either paint the themed caption or call
270 * RealUserDrawCaption in order to draw the classic caption when themes
271 * are disabled but the themes service is enabled
272 */
274 }
275 else
276 {
277 RECT rc = {0,0,0,0};
281 }
282 }
283 //NtUserCallTwoParam((DWORD_PTR)UserHMGetHandle(pwnd),Flags,TWOPARAM_ROUTINE_REDRAWTITLE)
284}
#define DCX_USESTYLE
Definition: GetDCEx.c:10
#define DC_ACTIVE
Definition: dc21x4.h:120
BOOL NTAPI NtUserDrawCaption(HWND hWnd, HDC hDc, LPCRECT lpRc, UINT uFlags)
Definition: painting.c:2457
#define QUERY_WINDOW_FOREGROUND
Definition: ntuser.h:2849
DWORD_PTR NTAPI NtUserQueryWindow(HWND hWnd, DWORD Index)
Definition: window.c:4207
#define SRVINFO_APIHOOK
Definition: ntuser.h:950
#define WNDS_HASCAPTION
Definition: ntuser.h:608
DWORD dwSRVIFlags
Definition: ntuser.h:1051
#define DC_DRAWCAPTIONMD
Definition: undocuser.h:152
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define DCX_WINDOW
Definition: winuser.h:2149
HDC WINAPI GetDCEx(_In_opt_ HWND, _In_opt_ HRGN, _In_ DWORD)

◆ UserSendUiUpdateMsg()

static BOOL CALLBACK UserSendUiUpdateMsg ( HWND  hwnd,
LPARAM  lParam 
)
static

Definition at line 244 of file defwnd.c.

245{
246 SendMessageW(hwnd, WM_UPDATEUISTATE, (WPARAM)lParam, 0);
247 return TRUE;
248}
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

Referenced by User32DefWindowProc().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( user32  )