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