2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS System Libraries
4 * FILE: lib/user32/include/user32p.h
5 * PURPOSE: Win32 User Library Private Headers
6 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
9 /* INCLUDES ******************************************************************/
11 #ifndef USER32_PRIVATE_H
12 #define USER32_PRIVATE_H
14 /* Private User32 Headers */
19 #include "dde_private.h"
22 #include "regcontrol.h"
28 #include "ntwrapper.h"
30 /* One/Two Param Functions */
31 #define NtUserMsqSetWakeMask(dwWaitMask) \
32 (HANDLE)NtUserCallOneParam(dwWaitMask, ONEPARAM_ROUTINE_MSQSETWAKEMASK)
34 #define NtUserMsqClearWakeMask() \
35 NtUserCallNoParam(NOPARAM_ROUTINE_MSQCLEARWAKEMASK)
37 #define NtUserAnyPopup() \
38 (BOOL)NtUserCallNoParam(NOPARAM_ROUTINE_ANYPOPUP)
40 #define NtUserValidateRgn(hWnd, hRgn) \
41 (BOOL)NtUserCallTwoParam((DWORD_PTR)hWnd, (DWORD_PTR)hRgn, TWOPARAM_ROUTINE_VALIDATERGN)
43 #define NtUserSetWindowContextHelpId(hWnd, dwContextHelpId) \
44 (BOOL)NtUserCallTwoParam((DWORD_PTR)hwnd, dwContextHelpId, TWOPARAM_ROUTINE_SETWNDCONTEXTHLPID)
46 #define NtUserSetCaretPos(X, Y) \
47 (BOOL)NtUserCallTwoParam((DWORD_PTR)X, (DWORD_PTR)Y, TWOPARAM_ROUTINE_SETCARETPOS)
49 #define NtUserSetGUIThreadHandle(field, hwnd) \
50 (BOOL)NtUserCallTwoParam((DWORD_PTR)field, (DWORD_PTR)hwnd, TWOPARAM_ROUTINE_SETGUITHRDHANDLE)
52 #define NtUserSetMenuItemRect(menu, mir) \
53 (BOOL)NtUserCallTwoParam((DWORD_PTR)menu, (DWORD_PTR)mir, TWOPARAM_ROUTINE_SETMENUITEMRECT)
55 #define NtUserSetMenuBarHeight(menu, height) \
56 (BOOL)NtUserCallTwoParam((DWORD_PTR)menu, (DWORD_PTR)height, TWOPARAM_ROUTINE_SETMENUBARHEIGHT)
58 #define NtUserGetWindowInfo(hwnd, pwi) \
59 (BOOL)NtUserCallTwoParam((DWORD_PTR)hwnd, (DWORD_PTR)pwi, TWOPARAM_ROUTINE_GETWINDOWINFO)
61 #define NtUserRegisterLogonProcess(hproc, x) \
62 (BOOL)NtUserCallTwoParam((DWORD_PTR)hproc, (DWORD_PTR)x, TWOPARAM_ROUTINE_REGISTERLOGONPROC)
64 #define NtUserGetSysColorBrushes(HBrushes, count) \
65 (BOOL)NtUserCallTwoParam((DWORD_PTR)(HBrushes), (DWORD_PTR)(count), TWOPARAM_ROUTINE_GETSYSCOLORBRUSHES)
67 #define NtUserGetSysColorPens(HPens, count) \
68 (BOOL)NtUserCallTwoParam((DWORD_PTR)(HPens), (DWORD_PTR)(count), TWOPARAM_ROUTINE_GETSYSCOLORPENS)
70 #define NtUserGetSysColors(ColorRefs, count) \
71 (BOOL)NtUserCallTwoParam((DWORD_PTR)(ColorRefs), (DWORD_PTR)(count), TWOPARAM_ROUTINE_GETSYSCOLORS)
73 #define NtUserSetCaretBlinkTime(uMSeconds) \
74 (BOOL)NtUserCallOneParam((DWORD_PTR)uMSeconds, ONEPARAM_ROUTINE_SETCARETBLINKTIME)
76 #define NtUserRegisterUserModule(hInstance) \
77 (BOOL)NtUserCallOneParam((DWORD_PTR)hInstance, ONEPARAM_ROUTINE_REGISTERUSERMODULE)
80 #define NtUserEnumClipboardFormats(format) \
81 (UINT)NtUserCallOneParam(format, ONEPARAM_ROUTINE_ENUMCLIPBOARDFORMATS)
84 #define NtUserWindowFromDC(hDC) \
85 (HWND)NtUserCallOneParam((DWORD_PTR)hDC, ONEPARAM_ROUTINE_WINDOWFROMDC)
87 #define NtUserSwitchCaretShowing(CaretInfo) \
88 (BOOL)NtUserCallOneParam((DWORD_PTR)CaretInfo, ONEPARAM_ROUTINE_SWITCHCARETSHOWING)
90 #define NtUserSwapMouseButton(fSwap) \
91 (BOOL)NtUserCallOneParam((DWORD_PTR)fSwap, ONEPARAM_ROUTINE_SWAPMOUSEBUTTON)
93 #define NtUserGetMenu(hWnd) \
94 (HMENU)NtUserCallOneParam((DWORD_PTR)hWnd, ONEPARAM_ROUTINE_GETMENU)
96 #define NtUserSetMessageExtraInfo(lParam) \
97 (LPARAM)NtUserCallOneParam((DWORD_PTR)lParam, ONEPARAM_ROUTINE_SETMESSAGEEXTRAINFO)
99 #define NtUserIsWindowUnicode(hWnd) \
100 (BOOL)NtUserCallOneParam((DWORD_PTR)hWnd, ONEPARAM_ROUTINE_ISWINDOWUNICODE)
102 #define NtUserGetWindowContextHelpId(hwnd) \
103 NtUserCallOneParam((DWORD_PTR)hwnd, ONEPARAM_ROUTINE_GETWNDCONTEXTHLPID)
105 #define NtUserGetWindowInstance(hwnd) \
106 (HINSTANCE)NtUserCallOneParam((DWORD_PTR)hwnd, ONEPARAM_ROUTINE_GETWINDOWINSTANCE)
108 #define NtUserGetCursorPos(lpPoint) \
109 (BOOL)NtUserCallOneParam((DWORD_PTR)lpPoint, ONEPARAM_ROUTINE_GETCURSORPOSITION)
111 #define NtUserIsWindowInDestroy(hWnd) \
112 (BOOL)NtUserCallOneParam((DWORD_PTR)hWnd, ONEPARAM_ROUTINE_ISWINDOWINDESTROY)
114 #define NtUserEnableProcessWindowGhosting(bEnable) \
115 NtUserCallOneParam((DWORD_PTR)bEnable, ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING)
117 #define NtUserShowCursor(bShow) \
118 NtUserCallOneParam((DWORD_PTR)bShow, ONEPARAM_ROUTINE_SHOWCURSOR)
120 #define NtUserGetDesktopMapping(Ptr) \
121 (PVOID)NtUserCallOneParam((DWORD_PTR)Ptr, ONEPARAM_ROUTINE_GETDESKTOPMAPPING)
123 #define ShowCaret(hwnd) \
124 NtUserShowCaret(hwnd)
126 #define HideCaret(hwnd) \
127 NtUserHideCaret(hwnd)
129 #define NtUserRegisterSystemClasses(Count,SysClasses) \
130 (BOOL)NtUserCallTwoParam(Count, (DWORD_PTR)SysClasses, TWOPARAM_ROUTINE_ROS_REGSYSCLASSES)
132 /* Internal Thread Data */
133 extern HINSTANCE User32Instance
;
134 extern HINSTANCE hImmInstance
;
136 /* Critical Section*/
137 extern RTL_CRITICAL_SECTION User32Crit
;
139 typedef struct _USER32_TRACKINGLIST
{
141 POINT pos
; /* center of hover rectangle */
143 } USER32_TRACKINGLIST
,*PUSER32_TRACKINGLIST
;
145 typedef struct _USER32_THREAD_DATA
148 HKL KeyboardLayoutHandle
;
149 USER32_TRACKINGLIST tracking_info
; /* TrackMouseEvent stuff */
150 } USER32_THREAD_DATA
, *PUSER32_THREAD_DATA
;
152 PUSER32_THREAD_DATA
User32GetThreadData();
156 GdiConvertToDevmodeW(DEVMODEA
*dm
);
158 /* FIXME: Belongs to some header. */
159 BOOL WINAPI
GdiDllInitialize(HANDLE
, DWORD
, LPVOID
);
160 void InitStockObjects(void);
161 VOID
DeleteFrameBrushes(VOID
);
163 /* message spy definitions */
164 #define SPY_DISPATCHMESSAGE 0x0101
165 #define SPY_SENDMESSAGE 0x0103
166 #define SPY_DEFWNDPROC 0x0105
168 #define SPY_RESULT_OK 0x0001
169 #define SPY_RESULT_INVALIDHWND 0x0003
170 #define SPY_RESULT_DEFWND 0x0005
173 extern const char *SPY_GetMsgName(UINT msg
, HWND hWnd
);
174 extern const char *SPY_GetVKeyName(WPARAM wParam
);
175 extern void SPY_EnterMessage(INT iFlag
, HWND hwnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
);
176 extern void SPY_ExitMessage(INT iFlag
, HWND hwnd
, UINT msg
,
177 LRESULT lReturn
, WPARAM wParam
, LPARAM lParam
);
178 extern int SPY_Init(void);
181 /* Validate window handle types */
182 #define VALIDATE_TYPE_FREE 0
183 #define VALIDATE_TYPE_WIN 1
184 #define VALIDATE_TYPE_MENU 2
185 #define VALIDATE_TYPE_CURSOR 3
186 #define VALIDATE_TYPE_MWPOS 4
187 #define VALIDATE_TYPE_HOOK 5
188 #define VALIDATE_TYPE_CALLPROC 7
189 #define VALIDATE_TYPE_ACCEL 8
190 #define VALIDATE_TYPE_MONITOR 12
191 #define VALIDATE_TYPE_EVENT 15
192 #define VALIDATE_TYPE_TIMER 16
194 #define FIRST_USER_HANDLE 0x0020 /* first possible value for low word of user handle */
195 #define LAST_USER_HANDLE 0xffef /* last possible value for low word of user handle */
196 #define NB_USER_HANDLES ((LAST_USER_HANDLE - FIRST_USER_HANDLE + 1) >> 1)
197 #define USER_HANDLE_TO_INDEX(hwnd) ((LOWORD(hwnd) - FIRST_USER_HANDLE) >> 1)
199 #define USER_HEADER_TO_BODY(ObjectHeader) \
200 ((PVOID)(((PUSER_OBJECT_HEADER)ObjectHeader) + 1))
202 #define USER_BODY_TO_HEADER(ObjectBody) \
203 ((PUSER_OBJECT_HEADER)(((PUSER_OBJECT_HEADER)ObjectBody) - 1))
205 typedef struct _USER_HANDLE_ENTRY
207 void *ptr
; /* pointer to object */
211 PW32THREADINFO pti
; // pointer to Win32ThreadInfo
212 PPROCESSINFO ppi
; // pointer to W32ProcessInfo
214 unsigned short type
; /* object type (0 if free) */
215 unsigned short generation
; /* generation counter */
216 } USER_HANDLE_ENTRY
, * PUSER_HANDLE_ENTRY
;
218 typedef struct _USER_HANDLE_TABLE
220 PUSER_HANDLE_ENTRY handles
;
221 PUSER_HANDLE_ENTRY freelist
;
223 int allocated_handles
;
224 } USER_HANDLE_TABLE
, * PUSER_HANDLE_TABLE
;
226 extern PUSER_HANDLE_TABLE gHandleTable
;
227 extern PUSER_HANDLE_ENTRY gHandleEntries
;
229 PUSER_HANDLE_ENTRY FASTCALL
GetUser32Handle(HANDLE
);
230 PVOID FASTCALL
ValidateHandle(HANDLE
, UINT
);
232 #define SYSCOLOR_GetPen(index) GetSysColorPen(index)
233 #define WIN_GetFullHandle(h) ((HWND)(h))
236 # if defined(__x86_64__) && defined (__GNUC__)
237 # define __ms_va_list __builtin_ms_va_list
238 # define __ms_va_start(list,arg) __builtin_ms_va_start(list,arg)
239 # define __ms_va_end(list) __builtin_ms_va_end(list)
241 # define __ms_va_list va_list
242 # define __ms_va_start(list,arg) va_start(list,arg)
243 # define __ms_va_end(list) va_end(list)
249 #define inline __inline
253 /* Hack away wine hack */
255 #define __EXCEPT_PAGE_FAULT else