-Import tkreuzer's time implementation from AMD64 branch
[reactos.git] / reactos / dll / win32 / user32 / include / user32p.h
1 /*
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)
7 */
8
9 /* INCLUDES ******************************************************************/
10
11 #ifndef USER32_PRIVATE_H
12 #define USER32_PRIVATE_H
13
14 /* Private User32 Headers */
15 #include "accel.h"
16 #include "cursor.h"
17 #include "controls.h"
18 #include "draw.h"
19 #include "dde_private.h"
20 #include "menu.h"
21 #include "message.h"
22 #include "regcontrol.h"
23 #include "resource.h"
24 #include "scroll.h"
25 #include "window.h"
26 #include "winpos.h"
27 #include "winsta.h"
28 #include "ntwrapper.h"
29
30 /* One/Two Param Functions */
31 #define NtUserMsqSetWakeMask(dwWaitMask) \
32 (HANDLE)NtUserCallOneParam(dwWaitMask, ONEPARAM_ROUTINE_MSQSETWAKEMASK)
33
34 #define NtUserMsqClearWakeMask() \
35 NtUserCallNoParam(NOPARAM_ROUTINE_MSQCLEARWAKEMASK)
36
37 #define NtUserAnyPopup() \
38 (BOOL)NtUserCallNoParam(NOPARAM_ROUTINE_ANYPOPUP)
39
40 #define NtUserValidateRgn(hWnd, hRgn) \
41 (BOOL)NtUserCallTwoParam((DWORD)hWnd, (DWORD)hRgn, TWOPARAM_ROUTINE_VALIDATERGN)
42
43 #define NtUserSetWindowContextHelpId(hWnd, dwContextHelpId) \
44 (BOOL)NtUserCallTwoParam((DWORD)hwnd, dwContextHelpId, TWOPARAM_ROUTINE_SETWNDCONTEXTHLPID)
45
46 #define NtUserSetCaretPos(X, Y) \
47 (BOOL)NtUserCallTwoParam((DWORD)X, (DWORD)Y, TWOPARAM_ROUTINE_SETCARETPOS)
48
49 #define NtUserSetGUIThreadHandle(field, hwnd) \
50 (BOOL)NtUserCallTwoParam((DWORD)field, (DWORD)hwnd, TWOPARAM_ROUTINE_SETGUITHRDHANDLE)
51
52 #define NtUserSetMenuItemRect(menu, mir) \
53 (BOOL)NtUserCallTwoParam((DWORD)menu, (DWORD)mir, TWOPARAM_ROUTINE_SETMENUITEMRECT)
54
55 #define NtUserSetMenuBarHeight(menu, height) \
56 (BOOL)NtUserCallTwoParam((DWORD)menu, (DWORD)height, TWOPARAM_ROUTINE_SETMENUBARHEIGHT)
57
58 #define NtUserGetWindowInfo(hwnd, pwi) \
59 (BOOL)NtUserCallTwoParam((DWORD)hwnd, (DWORD)pwi, TWOPARAM_ROUTINE_GETWINDOWINFO)
60
61 #define NtUserRegisterLogonProcess(hproc, x) \
62 (BOOL)NtUserCallTwoParam((DWORD)hproc, (DWORD)x, TWOPARAM_ROUTINE_REGISTERLOGONPROC)
63
64 #define NtUserGetSysColorBrushes(HBrushes, count) \
65 (BOOL)NtUserCallTwoParam((DWORD)(HBrushes), (DWORD)(count), TWOPARAM_ROUTINE_GETSYSCOLORBRUSHES)
66
67 #define NtUserGetSysColors(ColorRefs, count) \
68 (BOOL)NtUserCallTwoParam((DWORD)(ColorRefs), (DWORD)(count), TWOPARAM_ROUTINE_GETSYSCOLORS)
69
70 #define NtUserSetCaretBlinkTime(uMSeconds) \
71 (BOOL)NtUserCallOneParam((DWORD)uMSeconds, ONEPARAM_ROUTINE_SETCARETBLINKTIME)
72
73 /*
74 #define NtUserEnumClipboardFormats(format) \
75 (UINT)NtUserCallOneParam(format, ONEPARAM_ROUTINE_ENUMCLIPBOARDFORMATS)
76 */
77
78 #define NtUserWindowFromDC(hDC) \
79 (HWND)NtUserCallOneParam((DWORD)hDC, ONEPARAM_ROUTINE_WINDOWFROMDC)
80
81 #define NtUserSwitchCaretShowing(CaretInfo) \
82 (BOOL)NtUserCallOneParam((DWORD)CaretInfo, ONEPARAM_ROUTINE_SWITCHCARETSHOWING)
83
84 #define NtUserSwapMouseButton(fSwap) \
85 (BOOL)NtUserCallOneParam((DWORD)fSwap, ONEPARAM_ROUTINE_SWAPMOUSEBUTTON)
86
87 #define NtUserGetMenu(hWnd) \
88 (HMENU)NtUserCallOneParam((DWORD)hWnd, ONEPARAM_ROUTINE_GETMENU)
89
90 #define NtUserSetMessageExtraInfo(lParam) \
91 (LPARAM)NtUserCallOneParam((DWORD)lParam, ONEPARAM_ROUTINE_SETMESSAGEEXTRAINFO)
92
93 #define NtUserIsWindowUnicode(hWnd) \
94 (BOOL)NtUserCallOneParam((DWORD)hWnd, ONEPARAM_ROUTINE_ISWINDOWUNICODE)
95
96 #define NtUserGetWindowContextHelpId(hwnd) \
97 NtUserCallOneParam((DWORD)hwnd, ONEPARAM_ROUTINE_GETWNDCONTEXTHLPID)
98
99 #define NtUserGetWindowInstance(hwnd) \
100 (HINSTANCE)NtUserCallOneParam((DWORD)hwnd, ONEPARAM_ROUTINE_GETWINDOWINSTANCE)
101
102 #define NtUserGetCursorPos(lpPoint) \
103 (BOOL)NtUserCallOneParam((DWORD)lpPoint, ONEPARAM_ROUTINE_GETCURSORPOSITION)
104
105 #define NtUserIsWindowInDestroy(hWnd) \
106 (BOOL)NtUserCallOneParam((DWORD)hWnd, ONEPARAM_ROUTINE_ISWINDOWINDESTROY)
107
108 #define NtUserEnableProcessWindowGhosting(bEnable) \
109 NtUserCallOneParam((DWORD)bEnable, ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING)
110
111 #define NtUserShowCursor(bShow) \
112 NtUserCallOneParam((DWORD)bShow, ONEPARAM_ROUTINE_SHOWCURSOR)
113
114 #define NtUserGetDesktopMapping(Ptr) \
115 (PVOID)NtUserCallOneParam((DWORD)Ptr, ONEPARAM_ROUTINE_GETDESKTOPMAPPING)
116
117 #define ShowCaret(hwnd) \
118 NtUserShowCaret(hwnd)
119
120 #define HideCaret(hwnd) \
121 NtUserHideCaret(hwnd)
122
123 #define NtUserRegisterSystemClasses(Count,SysClasses) \
124 (BOOL)NtUserCallTwoParam((DWORD)Count, (DWORD)SysClasses, TWOPARAM_ROUTINE_ROS_REGSYSCLASSES)
125
126 /* Internal Thread Data */
127 extern HINSTANCE User32Instance;
128 extern HINSTANCE hImmInstance;
129
130 /* Critical Section*/
131 extern RTL_CRITICAL_SECTION User32Crit;
132
133 typedef struct _USER32_TRACKINGLIST {
134 TRACKMOUSEEVENT tme;
135 POINT pos; /* center of hover rectangle */
136 UINT_PTR timer;
137 } USER32_TRACKINGLIST,*PUSER32_TRACKINGLIST;
138
139 typedef struct _USER32_THREAD_DATA
140 {
141 MSG LastMessage;
142 HKL KeyboardLayoutHandle;
143 USER32_TRACKINGLIST tracking_info; /* TrackMouseEvent stuff */
144 } USER32_THREAD_DATA, *PUSER32_THREAD_DATA;
145
146 PUSER32_THREAD_DATA User32GetThreadData();
147
148 DEVMODEW *
149 WINAPI
150 GdiConvertToDevmodeW(DEVMODEA *dm);
151
152 /* FIXME: Belongs to some header. */
153 BOOL WINAPI GdiDllInitialize(HANDLE, DWORD, LPVOID);
154 void InitStockObjects(void);
155 VOID DeleteFrameBrushes(VOID);
156
157 /* message spy definitions */
158 #define SPY_DISPATCHMESSAGE 0x0101
159 #define SPY_SENDMESSAGE 0x0103
160 #define SPY_DEFWNDPROC 0x0105
161
162 #define SPY_RESULT_OK 0x0001
163 #define SPY_RESULT_INVALIDHWND 0x0003
164 #define SPY_RESULT_DEFWND 0x0005
165
166
167 extern const char *SPY_GetMsgName(UINT msg, HWND hWnd);
168 extern const char *SPY_GetVKeyName(WPARAM wParam);
169 extern void SPY_EnterMessage(INT iFlag, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
170 extern void SPY_ExitMessage(INT iFlag, HWND hwnd, UINT msg,
171 LRESULT lReturn, WPARAM wParam, LPARAM lParam);
172 extern int SPY_Init(void);
173
174
175 /* Validate window handle types */
176 #define VALIDATE_TYPE_FREE 0
177 #define VALIDATE_TYPE_WIN 1
178 #define VALIDATE_TYPE_MENU 2
179 #define VALIDATE_TYPE_CURSOR 3
180 #define VALIDATE_TYPE_MWPOS 4
181 #define VALIDATE_TYPE_HOOK 5
182 #define VALIDATE_TYPE_CALLPROC 7
183 #define VALIDATE_TYPE_ACCEL 8
184 #define VALIDATE_TYPE_MONITOR 12
185 #define VALIDATE_TYPE_EVENT 15
186 #define VALIDATE_TYPE_TIMER 16
187
188 #define FIRST_USER_HANDLE 0x0020 /* first possible value for low word of user handle */
189 #define LAST_USER_HANDLE 0xffef /* last possible value for low word of user handle */
190 #define NB_USER_HANDLES ((LAST_USER_HANDLE - FIRST_USER_HANDLE + 1) >> 1)
191 #define USER_HANDLE_TO_INDEX(hwnd) ((LOWORD(hwnd) - FIRST_USER_HANDLE) >> 1)
192
193 #define USER_HEADER_TO_BODY(ObjectHeader) \
194 ((PVOID)(((PUSER_OBJECT_HEADER)ObjectHeader) + 1))
195
196 #define USER_BODY_TO_HEADER(ObjectBody) \
197 ((PUSER_OBJECT_HEADER)(((PUSER_OBJECT_HEADER)ObjectBody) - 1))
198
199 typedef struct _USER_HANDLE_ENTRY
200 {
201 void *ptr; /* pointer to object */
202 union
203 {
204 PVOID pi;
205 PW32THREADINFO pti; // pointer to Win32ThreadInfo
206 PPROCESSINFO ppi; // pointer to W32ProcessInfo
207 };
208 unsigned short type; /* object type (0 if free) */
209 unsigned short generation; /* generation counter */
210 } USER_HANDLE_ENTRY, * PUSER_HANDLE_ENTRY;
211
212 typedef struct _USER_HANDLE_TABLE
213 {
214 PUSER_HANDLE_ENTRY handles;
215 PUSER_HANDLE_ENTRY freelist;
216 int nb_handles;
217 int allocated_handles;
218 } USER_HANDLE_TABLE, * PUSER_HANDLE_TABLE;
219
220 extern PUSER_HANDLE_TABLE gHandleTable;
221 extern PUSER_HANDLE_ENTRY gHandleEntries;
222
223 PUSER_HANDLE_ENTRY FASTCALL GetUser32Handle(HANDLE);
224 PVOID FASTCALL ValidateHandle(HANDLE, UINT);
225
226 #define WIN_GetFullHandle(h) ((HWND)(h))
227
228 #ifndef __ms_va_list
229 # if defined(__x86_64__) && defined (__GNUC__)
230 # define __ms_va_list __builtin_ms_va_list
231 # define __ms_va_start(list,arg) __builtin_ms_va_start(list,arg)
232 # define __ms_va_end(list) __builtin_ms_va_end(list)
233 # else
234 # define __ms_va_list va_list
235 # define __ms_va_start(list,arg) va_start(list,arg)
236 # define __ms_va_end(list) va_end(list)
237 # endif
238 #endif
239
240 #ifdef _MSC_VER
241 #ifndef inline
242 #define inline __inline
243 #endif
244 #endif
245
246 /* Hack away wine hack */
247 #define __TRY if(1)
248 #define __EXCEPT_PAGE_FAULT else
249 #define __ENDTRY
250
251 #endif
252 /* EOF */