win32u: Store thread info in 64-bit TEB on wow64.
[wine.git] / dlls / win32u / win32u_private.h
blobeb21551964385b155450007c94f1e1447c66279a
1 /*
2 * Unix call wrappers
4 * Copyright 2021 Jacek Caban for CodeWeavers
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #ifndef __WINE_WIN32U_PRIVATE
22 #define __WINE_WIN32U_PRIVATE
24 #include <stdarg.h>
25 #include <stdlib.h>
26 #include "windef.h"
27 #include "winbase.h"
28 #include "ntgdi.h"
29 #include "ntuser.h"
30 #include "wine/gdi_driver.h"
31 #include "wine/unixlib.h"
32 #include "wine/debug.h"
33 #include "wine/server.h"
35 struct unix_funcs
37 /* win32u functions */
38 INT (WINAPI *pNtGdiAbortDoc)( HDC hdc );
39 BOOL (WINAPI *pNtGdiAbortPath)( HDC hdc );
40 BOOL (WINAPI *pNtGdiAlphaBlend)( HDC hdc_dst, int x_dst, int y_dst, int width_dst, int height_dst,
41 HDC hdc_src, int x_src, int y_src, int width_src, int height_src,
42 BLENDFUNCTION blend_function, HANDLE xform );
43 BOOL (WINAPI *pNtGdiAngleArc)( HDC hdc, INT x, INT y, DWORD radius, FLOAT start_angle,
44 FLOAT sweep_angle );
45 BOOL (WINAPI *pNtGdiArcInternal)( UINT type, HDC hdc, INT left, INT top, INT right, INT bottom,
46 INT xstart, INT ystart, INT xend, INT yend );
47 BOOL (WINAPI *pNtGdiBeginPath)( HDC hdc );
48 BOOL (WINAPI *pNtGdiBitBlt)( HDC hdc_dst, INT x_dst, INT y_dst, INT width, INT height, HDC hdc_src,
49 INT x_src, INT y_src, DWORD rop, DWORD bk_color, FLONG fl );
50 BOOL (WINAPI *pNtGdiCloseFigure)( HDC hdc );
51 BOOL (WINAPI *pNtGdiComputeXformCoefficients)( HDC hdc );
52 HBITMAP (WINAPI *pNtGdiCreateCompatibleBitmap)( HDC hdc, INT width, INT height );
53 HDC (WINAPI *pNtGdiCreateCompatibleDC)( HDC hdc );
54 HBITMAP (WINAPI *pNtGdiCreateDIBitmapInternal)( HDC hdc, INT width, INT height, DWORD init,
55 const void *bits, const BITMAPINFO *data,
56 UINT coloruse, UINT max_info, UINT max_bits,
57 ULONG flags, HANDLE xform );
58 HDC (WINAPI *pNtGdiCreateMetafileDC)( HDC hdc );
59 NTSTATUS (WINAPI *pNtGdiDdDDICheckVidPnExclusiveOwnership)( const D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *desc );
60 NTSTATUS (WINAPI *pNtGdiDdDDICloseAdapter)( const D3DKMT_CLOSEADAPTER *desc );
61 NTSTATUS (WINAPI *pNtGdiDdDDICreateDCFromMemory)( D3DKMT_CREATEDCFROMMEMORY *desc );
62 NTSTATUS (WINAPI *pNtGdiDdDDIDestroyDCFromMemory)( const D3DKMT_DESTROYDCFROMMEMORY *desc );
63 NTSTATUS (WINAPI *pNtGdiDdDDIDestroyDevice)( const D3DKMT_DESTROYDEVICE *desc );
64 NTSTATUS (WINAPI *pNtGdiDdDDIEscape)( const D3DKMT_ESCAPE *desc );
65 NTSTATUS (WINAPI *pNtGdiDdDDIOpenAdapterFromDeviceName)( D3DKMT_OPENADAPTERFROMDEVICENAME *desc );
66 NTSTATUS (WINAPI *pNtGdiDdDDIOpenAdapterFromLuid)( D3DKMT_OPENADAPTERFROMLUID *desc );
67 NTSTATUS (WINAPI *pNtGdiDdDDIQueryVideoMemoryInfo)( D3DKMT_QUERYVIDEOMEMORYINFO *desc );
68 NTSTATUS (WINAPI *pNtGdiDdDDISetVidPnSourceOwner)( const D3DKMT_SETVIDPNSOURCEOWNER *desc );
69 BOOL (WINAPI *pNtGdiDeleteObjectApp)( HGDIOBJ obj );
70 LONG (WINAPI *pNtGdiDoPalette)( HGDIOBJ handle, WORD start, WORD count, void *entries,
71 DWORD func, BOOL inbound );
72 BOOL (WINAPI *pNtGdiEllipse)( HDC hdc, INT left, INT top, INT right, INT bottom );
73 INT (WINAPI *pNtGdiEndDoc)(HDC hdc);
74 BOOL (WINAPI *pNtGdiEndPath)( HDC hdc );
75 INT (WINAPI *pNtGdiEndPage)( HDC hdc );
76 BOOL (WINAPI *pNtGdiEnumFonts)( HDC hdc, ULONG type, ULONG win32_compat, ULONG face_name_len,
77 const WCHAR *face_name, ULONG charset, ULONG *count, void *buf );
78 INT (WINAPI *pNtGdiExcludeClipRect)( HDC hdc, INT left, INT top, INT right, INT bottom );
79 INT (WINAPI *pNtGdiExtEscape)( HDC hdc, WCHAR *driver, INT driver_id, INT escape, INT input_size,
80 const char *input, INT output_size, char *output );
81 BOOL (WINAPI *pNtGdiExtFloodFill)( HDC hdc, INT x, INT y, COLORREF color, UINT type );
82 BOOL (WINAPI *pNtGdiExtTextOutW)( HDC hdc, INT x, INT y, UINT flags, const RECT *rect,
83 const WCHAR *str, UINT count, const INT *dx, DWORD cp );
84 INT (WINAPI *pNtGdiExtSelectClipRgn)( HDC hdc, HRGN region, INT mode );
85 BOOL (WINAPI *pNtGdiFillPath)( HDC hdc );
86 BOOL (WINAPI *pNtGdiFillRgn)( HDC hdc, HRGN hrgn, HBRUSH hbrush );
87 BOOL (WINAPI *pNtGdiFontIsLinked)( HDC hdc );
88 BOOL (WINAPI *pNtGdiFrameRgn)( HDC hdc, HRGN hrgn, HBRUSH brush, INT width, INT height );
89 BOOL (WINAPI *pNtGdiGetAndSetDCDword)( HDC hdc, UINT method, DWORD value, DWORD *result );
90 INT (WINAPI *pNtGdiGetAppClipBox)( HDC hdc, RECT *rect );
91 UINT (WINAPI *pNtGdiGetBoundsRect)( HDC hdc, RECT *rect, UINT flags );
92 BOOL (WINAPI *pNtGdiGetCharABCWidthsW)( HDC hdc, UINT first, UINT last, WCHAR *chars,
93 ULONG flags, void *buffer );
94 BOOL (WINAPI *pNtGdiGetCharWidthW)( HDC hdc, UINT first_char, UINT last_char, WCHAR *chars,
95 ULONG flags, void *buffer );
96 BOOL (WINAPI *pNtGdiGetCharWidthInfo)( HDC hdc, struct char_width_info *info );
97 INT (WINAPI *pNtGdiGetDIBitsInternal)( HDC hdc, HBITMAP hbitmap, UINT startscan, UINT lines,
98 void *bits, BITMAPINFO *info, UINT coloruse,
99 UINT max_bits, UINT max_info );
100 INT (WINAPI *pNtGdiGetDeviceCaps)( HDC hdc, INT cap );
101 BOOL (WINAPI *pNtGdiGetDeviceGammaRamp)( HDC hdc, void *ptr );
102 DWORD (WINAPI *pNtGdiGetFontData)( HDC hdc, DWORD table, DWORD offset, void *buffer, DWORD length );
103 DWORD (WINAPI *pNtGdiGetFontUnicodeRanges)( HDC hdc, GLYPHSET *lpgs );
104 DWORD (WINAPI *pNtGdiGetGlyphIndicesW)( HDC hdc, const WCHAR *str, INT count,
105 WORD *indices, DWORD flags );
106 DWORD (WINAPI *pNtGdiGetGlyphOutline)( HDC hdc, UINT ch, UINT format, GLYPHMETRICS *metrics,
107 DWORD size, void *buffer, const MAT2 *mat2,
108 BOOL ignore_rotation );
109 DWORD (WINAPI *pNtGdiGetKerningPairs)( HDC hdc, DWORD count, KERNINGPAIR *kern_pair );
110 COLORREF (WINAPI *pNtGdiGetNearestColor)( HDC hdc, COLORREF color );
111 UINT (WINAPI *pNtGdiGetOutlineTextMetricsInternalW)( HDC hdc, UINT cbData,
112 OUTLINETEXTMETRICW *otm, ULONG opts );
113 COLORREF (WINAPI *pNtGdiGetPixel)( HDC hdc, INT x, INT y );
114 INT (WINAPI *pNtGdiGetRandomRgn)( HDC hdc, HRGN region, INT code );
115 BOOL (WINAPI *pNtGdiGetRasterizerCaps)( RASTERIZER_STATUS *status, UINT size );
116 BOOL (WINAPI *pNtGdiGetRealizationInfo)( HDC hdc, struct font_realization_info *info );
117 UINT (WINAPI *pNtGdiGetTextCharsetInfo)( HDC hdc, FONTSIGNATURE *fs, DWORD flags );
118 BOOL (WINAPI *pNtGdiGetTextExtentExW)( HDC hdc, const WCHAR *str, INT count, INT max_ext,
119 INT *nfit, INT *dxs, SIZE *size, UINT flags );
120 INT (WINAPI *pNtGdiGetTextFaceW)( HDC hdc, INT count, WCHAR *name, BOOL alias_name );
121 BOOL (WINAPI *pNtGdiGetTextMetricsW)( HDC hdc, TEXTMETRICW *metrics, ULONG flags );
122 BOOL (WINAPI *pNtGdiGradientFill)( HDC hdc, TRIVERTEX *vert_array, ULONG nvert,
123 void *grad_array, ULONG ngrad, ULONG mode );
124 INT (WINAPI *pNtGdiIntersectClipRect)( HDC hdc, INT left, INT top, INT right, INT bottom );
125 BOOL (WINAPI *pNtGdiInvertRgn)( HDC hdc, HRGN hrgn );
126 BOOL (WINAPI *pNtGdiLineTo)( HDC hdc, INT x, INT y );
127 BOOL (WINAPI *pNtGdiMaskBlt)( HDC hdc, INT x_dst, INT y_dst, INT width_dst, INT height_dst,
128 HDC hdc_src, INT x_src, INT y_src, HBITMAP mask,
129 INT x_mask, INT y_mask, DWORD rop, DWORD bk_color );
130 BOOL (WINAPI *pNtGdiModifyWorldTransform)( HDC hdc, const XFORM *xform, DWORD mode );
131 BOOL (WINAPI *pNtGdiMoveTo)( HDC hdc, INT x, INT y, POINT *pt );
132 INT (WINAPI *pNtGdiOffsetClipRgn)( HDC hdc, INT x, INT y );
133 HDC (WINAPI *pNtGdiOpenDCW)( UNICODE_STRING *device, const DEVMODEW *devmode,
134 UNICODE_STRING *output, ULONG type, BOOL is_display,
135 HANDLE hspool, DRIVER_INFO_2W *driver_info, void *pdev );
136 BOOL (WINAPI *pNtGdiPatBlt)( HDC hdc, INT left, INT top, INT width, INT height, DWORD rop );
137 BOOL (WINAPI *pNtGdiPlgBlt)( HDC hdc, const POINT *point, HDC hdc_src, INT x_src, INT y_src,
138 INT width, INT height, HBITMAP mask, INT x_mask, INT y_mask,
139 DWORD bk_color );
140 BOOL (WINAPI *pNtGdiPolyDraw)(HDC hdc, const POINT *points, const BYTE *types, DWORD count );
141 ULONG (WINAPI *pNtGdiPolyPolyDraw)( HDC hdc, const POINT *points, const UINT *counts,
142 DWORD count, UINT function );
143 BOOL (WINAPI *pNtGdiPtVisible)( HDC hdc, INT x, INT y );
144 BOOL (WINAPI *pNtGdiRectVisible)( HDC hdc, const RECT *rect );
145 BOOL (WINAPI *pNtGdiRectangle)( HDC hdc, INT left, INT top, INT right, INT bottom );
146 BOOL (WINAPI *pNtGdiResetDC)( HDC hdc, const DEVMODEW *devmode, BOOL *banding,
147 DRIVER_INFO_2W *driver_info, void *dev );
148 BOOL (WINAPI *pNtGdiResizePalette)( HPALETTE palette, UINT count );
149 BOOL (WINAPI *pNtGdiRestoreDC)( HDC hdc, INT level );
150 BOOL (WINAPI *pNtGdiRoundRect)( HDC hdc, INT left, INT top, INT right,
151 INT bottom, INT ell_width, INT ell_height );
152 BOOL (WINAPI *pNtGdiScaleViewportExtEx)( HDC hdc, INT x_num, INT x_denom,
153 INT y_num, INT y_denom, SIZE *size );
154 BOOL (WINAPI *pNtGdiScaleWindowExtEx)( HDC hdc, INT x_num, INT x_denom,
155 INT y_num, INT y_denom, SIZE *size );
156 HGDIOBJ (WINAPI *pNtGdiSelectBitmap)( HDC hdc, HGDIOBJ handle );
157 HGDIOBJ (WINAPI *pNtGdiSelectBrush)( HDC hdc, HGDIOBJ handle );
158 BOOL (WINAPI *pNtGdiSelectClipPath)( HDC hdc, INT mode );
159 HGDIOBJ (WINAPI *pNtGdiSelectFont)( HDC hdc, HGDIOBJ handle );
160 HGDIOBJ (WINAPI *pNtGdiSelectPen)( HDC hdc, HGDIOBJ handle );
161 UINT (WINAPI *pNtGdiSetBoundsRect)( HDC hdc, const RECT *rect, UINT flags );
162 INT (WINAPI *pNtGdiSetDIBitsToDeviceInternal)( HDC hdc, INT x_dst, INT y_dst, DWORD cx,
163 DWORD cy, INT x_src, INT y_src, UINT startscan,
164 UINT lines, const void *bits, const BITMAPINFO *bmi,
165 UINT coloruse, UINT max_bits, UINT max_info,
166 BOOL xform_coords, HANDLE xform );
167 BOOL (WINAPI *pNtGdiSetDeviceGammaRamp)( HDC hdc, void *ptr );
168 DWORD (WINAPI *pNtGdiSetLayout)( HDC hdc, LONG wox, DWORD layout );
169 COLORREF (WINAPI *pNtGdiSetPixel)( HDC hdc, INT x, INT y, COLORREF color );
170 UINT (WINAPI *pNtGdiSetSystemPaletteUse)( HDC hdc, UINT use );
171 INT (WINAPI *pNtGdiStartDoc)( HDC hdc, const DOCINFOW *doc, BOOL *banding, INT job );
172 INT (WINAPI *pNtGdiStartPage)( HDC hdc );
173 BOOL (WINAPI *pNtGdiStretchBlt)( HDC hdc, INT x_dst, INT y_dst, INT width_dst, INT height_dst,
174 HDC hdc_src, INT x_src, INT y_src, INT width_src, INT height_src,
175 DWORD rop, COLORREF bk_color );
176 INT (WINAPI *pNtGdiStretchDIBitsInternal)( HDC hdc, INT x_dst, INT y_dst, INT width_dst,
177 INT height_dst, INT x_src, INT y_src, INT width_src,
178 INT height_src, const void *bits, const BITMAPINFO *bmi,
179 UINT coloruse, DWORD rop, UINT max_info, UINT max_bits,
180 HANDLE xform );
181 BOOL (WINAPI *pNtGdiStrokeAndFillPath)( HDC hdc );
182 BOOL (WINAPI *pNtGdiStrokePath)( HDC hdc );
183 BOOL (WINAPI *pNtGdiTransparentBlt)( HDC hdc, int x_dst, int y_dst, int width_dst, int height_dst,
184 HDC hdc_src, int x_src, int y_src, int width_src, int height_src,
185 UINT color );
186 BOOL (WINAPI *pNtGdiUnrealizeObject)( HGDIOBJ obj );
187 BOOL (WINAPI *pNtGdiUpdateColors)( HDC hdc );
188 BOOL (WINAPI *pNtGdiWidenPath)( HDC hdc );
189 BOOL (WINAPI *pNtUserDrawCaptionTemp)( HWND hwnd, HDC hdc, const RECT *rect, HFONT font,
190 HICON icon, const WCHAR *str, UINT flags );
191 DWORD (WINAPI *pNtUserDrawMenuBarTemp)( HWND hwnd, HDC hdc, RECT *rect, HMENU handle, HFONT font );
192 BOOL (WINAPI *pNtUserEndPaint)( HWND hwnd, const PAINTSTRUCT *ps );
193 INT (WINAPI *pNtUserExcludeUpdateRgn)( HDC hdc, HWND hwnd );
194 INT (WINAPI *pNtUserReleaseDC)( HWND hwnd, HDC hdc );
195 BOOL (WINAPI *pNtUserScrollDC)( HDC hdc, INT dx, INT dy, const RECT *scroll, const RECT *clip,
196 HRGN ret_update_rgn, RECT *update_rect );
197 HPALETTE (WINAPI *pNtUserSelectPalette)( HDC hdc, HPALETTE hpal, WORD bkg );
198 BOOL (WINAPI *pNtUserUpdateLayeredWindow)( HWND hwnd, HDC hdc_dst, const POINT *pts_dst,
199 const SIZE *size, HDC hdc_src, const POINT *pts_src,
200 COLORREF key, const BLENDFUNCTION *blend,
201 DWORD flags, const RECT *dirty );
203 /* Wine-specific functions */
204 INT (WINAPI *pSetDIBits)( HDC hdc, HBITMAP hbitmap, UINT startscan,
205 UINT lines, const void *bits, const BITMAPINFO *info,
206 UINT coloruse );
207 BOOL (CDECL *get_brush_bitmap_info)( HBRUSH handle, BITMAPINFO *info, void *bits, UINT *usage );
208 BOOL (CDECL *get_file_outline_text_metric)( const WCHAR *path, OUTLINETEXTMETRICW *otm );
209 BOOL (CDECL *get_icm_profile)( HDC hdc, BOOL allow_default, DWORD *size, WCHAR *filename );
210 struct opengl_funcs * (CDECL *get_wgl_driver)( HDC hdc, UINT version );
211 BOOL (CDECL *wine_send_input)( HWND hwnd, const INPUT *input, const RAWINPUT *rawinput );
214 /* clipboard.c */
215 extern UINT enum_clipboard_formats( UINT format ) DECLSPEC_HIDDEN;
216 extern void release_clipboard_owner( HWND hwnd ) DECLSPEC_HIDDEN;
218 /* cursoricon.c */
219 extern HICON alloc_cursoricon_handle( BOOL is_icon ) DECLSPEC_HIDDEN;
220 extern BOOL get_clip_cursor( RECT *rect ) DECLSPEC_HIDDEN;
221 extern ULONG_PTR get_icon_param( HICON handle ) DECLSPEC_HIDDEN;
222 extern ULONG_PTR set_icon_param( HICON handle, ULONG_PTR param ) DECLSPEC_HIDDEN;
224 /* dce.c */
225 extern struct window_surface dummy_surface DECLSPEC_HIDDEN;
226 extern BOOL create_dib_surface( HDC hdc, const BITMAPINFO *info ) DECLSPEC_HIDDEN;
227 extern void create_offscreen_window_surface( const RECT *visible_rect,
228 struct window_surface **surface ) DECLSPEC_HIDDEN;
229 extern void erase_now( HWND hwnd, UINT rdw_flags ) DECLSPEC_HIDDEN;
230 extern void flush_window_surfaces( BOOL idle ) DECLSPEC_HIDDEN;
231 extern void move_window_bits( HWND hwnd, struct window_surface *old_surface,
232 struct window_surface *new_surface,
233 const RECT *visible_rect, const RECT *old_visible_rect,
234 const RECT *window_rect, const RECT *valid_rects ) DECLSPEC_HIDDEN;
235 extern void move_window_bits_parent( HWND hwnd, HWND parent, const RECT *window_rect,
236 const RECT *valid_rects ) DECLSPEC_HIDDEN;
237 extern void register_window_surface( struct window_surface *old,
238 struct window_surface *new ) DECLSPEC_HIDDEN;
240 /* defwnd.c */
241 extern LRESULT default_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam,
242 BOOL ansi ) DECLSPEC_HIDDEN;
243 extern LRESULT desktop_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) DECLSPEC_HIDDEN;
244 extern BOOL draw_frame_caption( HDC dc, LPRECT r, UINT uFlags ) DECLSPEC_HIDDEN;
245 extern BOOL draw_frame_menu( HDC dc, RECT *r, UINT flags ) DECLSPEC_HIDDEN;
246 extern BOOL draw_nc_sys_button( HWND hwnd, HDC hdc, BOOL down ) DECLSPEC_HIDDEN;
247 extern BOOL draw_rect_edge( HDC hdc, RECT *rc, UINT uType, UINT uFlags, UINT width ) DECLSPEC_HIDDEN;
248 extern void fill_rect( HDC dc, const RECT *rect, HBRUSH hbrush ) DECLSPEC_HIDDEN;
249 extern void get_sys_popup_pos( HWND hwnd, RECT *rect ) DECLSPEC_HIDDEN;
250 extern LRESULT handle_nc_hit_test( HWND hwnd, POINT pt ) DECLSPEC_HIDDEN;
252 /* hook.c */
253 extern LRESULT call_current_hook( HHOOK hhook, INT code, WPARAM wparam, LPARAM lparam ) DECLSPEC_HIDDEN;
254 extern LRESULT call_hooks( INT id, INT code, WPARAM wparam, LPARAM lparam, BOOL unicode ) DECLSPEC_HIDDEN;
255 extern BOOL is_hooked( INT id ) DECLSPEC_HIDDEN;
256 extern BOOL unhook_windows_hook( INT id, HOOKPROC proc ) DECLSPEC_HIDDEN;
258 /* imm.c */
259 extern void cleanup_imm_thread(void) DECLSPEC_HIDDEN;
260 extern HWND get_default_ime_window( HWND hwnd ) DECLSPEC_HIDDEN;
261 extern HIMC get_default_input_context(void) DECLSPEC_HIDDEN;
262 extern HIMC get_window_input_context( HWND hwnd ) DECLSPEC_HIDDEN;
263 extern BOOL register_imm_window( HWND hwnd ) DECLSPEC_HIDDEN;
264 extern void unregister_imm_window( HWND hwnd ) DECLSPEC_HIDDEN;
266 /* input.c */
267 extern BOOL destroy_caret(void) DECLSPEC_HIDDEN;
268 extern LONG global_key_state_counter DECLSPEC_HIDDEN;
269 extern HWND get_active_window(void) DECLSPEC_HIDDEN;
270 extern HWND get_capture(void) DECLSPEC_HIDDEN;
271 extern BOOL get_cursor_pos( POINT *pt ) DECLSPEC_HIDDEN;
272 extern HWND get_focus(void) DECLSPEC_HIDDEN;
273 extern DWORD get_input_state(void) DECLSPEC_HIDDEN;
274 extern BOOL WINAPI release_capture(void) DECLSPEC_HIDDEN;
275 extern BOOL set_capture_window( HWND hwnd, UINT gui_flags, HWND *prev_ret ) DECLSPEC_HIDDEN;
276 extern BOOL set_caret_blink_time( unsigned int time ) DECLSPEC_HIDDEN;
277 extern BOOL set_caret_pos( int x, int y ) DECLSPEC_HIDDEN;
278 extern BOOL set_foreground_window( HWND hwnd, BOOL mouse ) DECLSPEC_HIDDEN;
279 extern void toggle_caret( HWND hwnd ) DECLSPEC_HIDDEN;
280 extern void update_mouse_tracking_info( HWND hwnd ) DECLSPEC_HIDDEN;
282 /* menu.c */
283 extern HMENU create_menu( BOOL is_popup ) DECLSPEC_HIDDEN;
284 extern BOOL draw_menu_bar( HWND hwnd ) DECLSPEC_HIDDEN;
285 extern UINT draw_nc_menu_bar( HDC hdc, RECT *rect, HWND hwnd ) DECLSPEC_HIDDEN;
286 extern void end_menu( HWND hwnd ) DECLSPEC_HIDDEN;
287 extern HMENU get_menu( HWND hwnd ) DECLSPEC_HIDDEN;
288 extern UINT get_menu_bar_height( HWND hwnd, UINT width, INT org_x, INT org_y ) DECLSPEC_HIDDEN;
289 extern BOOL get_menu_info( HMENU handle, MENUINFO *info ) DECLSPEC_HIDDEN;
290 extern INT get_menu_item_count( HMENU handle ) DECLSPEC_HIDDEN;
291 extern UINT get_menu_state( HMENU handle, UINT item_id, UINT flags ) DECLSPEC_HIDDEN;
292 extern HMENU get_window_sys_sub_menu( HWND hwnd ) DECLSPEC_HIDDEN;
293 extern BOOL is_menu( HMENU handle ) DECLSPEC_HIDDEN;
294 extern HWND is_menu_active(void) DECLSPEC_HIDDEN;
295 extern LRESULT popup_menu_window_proc( HWND hwnd, UINT message, WPARAM wparam,
296 LPARAM lparam ) DECLSPEC_HIDDEN;
297 extern BOOL set_window_menu( HWND hwnd, HMENU handle ) DECLSPEC_HIDDEN;
298 extern void track_keyboard_menu_bar( HWND hwnd, UINT wparam, WCHAR ch ) DECLSPEC_HIDDEN;
299 extern void track_mouse_menu_bar( HWND hwnd, INT ht, int x, int y ) DECLSPEC_HIDDEN;
301 /* message.c */
302 extern BOOL kill_system_timer( HWND hwnd, UINT_PTR id ) DECLSPEC_HIDDEN;
303 extern BOOL reply_message_result( LRESULT result, MSG *msg ) DECLSPEC_HIDDEN;
304 extern NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *rawinput,
305 UINT flags ) DECLSPEC_HIDDEN;
306 extern LRESULT send_internal_message_timeout( DWORD dest_pid, DWORD dest_tid, UINT msg, WPARAM wparam,
307 LPARAM lparam, UINT flags, UINT timeout,
308 PDWORD_PTR res_ptr ) DECLSPEC_HIDDEN;
309 extern LRESULT send_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) DECLSPEC_HIDDEN;
310 extern LRESULT send_message_timeout( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam,
311 UINT flags, UINT timeout, PDWORD_PTR res_ptr, BOOL ansi );
313 /* rawinput.c */
314 extern BOOL process_rawinput_message( MSG *msg, UINT hw_id, const struct hardware_msg_data *msg_data ) DECLSPEC_HIDDEN;
315 extern BOOL rawinput_device_get_usages( HANDLE handle, USHORT *usage_page, USHORT *usage ) DECLSPEC_HIDDEN;
317 /* scroll.c */
318 extern void draw_nc_scrollbar( HWND hwnd, HDC hdc, BOOL draw_horizontal, BOOL draw_vertical ) DECLSPEC_HIDDEN;
319 extern BOOL get_scroll_info( HWND hwnd, INT bar, SCROLLINFO *info ) DECLSPEC_HIDDEN;
320 extern void handle_scroll_event( HWND hwnd, INT bar, UINT msg, POINT pt ) DECLSPEC_HIDDEN;
321 extern LRESULT scroll_bar_window_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam,
322 BOOL ansi ) DECLSPEC_HIDDEN;
323 extern void set_standard_scroll_painted( HWND hwnd, int bar, BOOL painted ) DECLSPEC_HIDDEN;
324 extern void track_scroll_bar( HWND hwnd, int scrollbar, POINT pt ) DECLSPEC_HIDDEN;
326 /* sysparams.c */
327 extern BOOL enable_thunk_lock DECLSPEC_HIDDEN;
328 extern DWORD process_layout DECLSPEC_HIDDEN;
329 extern HBRUSH get_55aa_brush(void) DECLSPEC_HIDDEN;
330 extern DWORD get_dialog_base_units(void) DECLSPEC_HIDDEN;
331 extern LONG get_char_dimensions( HDC hdc, TEXTMETRICW *metric, LONG *height ) DECLSPEC_HIDDEN;
332 extern RECT get_display_rect( const WCHAR *display ) DECLSPEC_HIDDEN;
333 extern UINT get_monitor_dpi( HMONITOR monitor ) DECLSPEC_HIDDEN;
334 extern BOOL get_monitor_info( HMONITOR handle, MONITORINFO *info ) DECLSPEC_HIDDEN;
335 extern UINT get_win_monitor_dpi( HWND hwnd ) DECLSPEC_HIDDEN;
336 extern RECT get_primary_monitor_rect( UINT dpi ) DECLSPEC_HIDDEN;
337 extern COLORREF get_sys_color( int index ) DECLSPEC_HIDDEN;
338 extern HBRUSH get_sys_color_brush( unsigned int index ) DECLSPEC_HIDDEN;
339 extern HPEN get_sys_color_pen( unsigned int index ) DECLSPEC_HIDDEN;
340 extern UINT get_system_dpi(void) DECLSPEC_HIDDEN;
341 extern int get_system_metrics( int index ) DECLSPEC_HIDDEN;
342 extern UINT get_thread_dpi(void) DECLSPEC_HIDDEN;
343 extern DPI_AWARENESS get_thread_dpi_awareness(void) DECLSPEC_HIDDEN;
344 extern RECT get_virtual_screen_rect( UINT dpi ) DECLSPEC_HIDDEN;
345 extern BOOL is_exiting_thread( DWORD tid ) DECLSPEC_HIDDEN;
346 extern POINT map_dpi_point( POINT pt, UINT dpi_from, UINT dpi_to ) DECLSPEC_HIDDEN;
347 extern RECT map_dpi_rect( RECT rect, UINT dpi_from, UINT dpi_to ) DECLSPEC_HIDDEN;
348 extern BOOL message_beep( UINT i ) DECLSPEC_HIDDEN;
349 extern POINT point_phys_to_win_dpi( HWND hwnd, POINT pt ) DECLSPEC_HIDDEN;
350 extern POINT point_thread_to_win_dpi( HWND hwnd, POINT pt ) DECLSPEC_HIDDEN;
351 extern RECT rect_thread_to_win_dpi( HWND hwnd, RECT rect ) DECLSPEC_HIDDEN;
352 extern HMONITOR monitor_from_point( POINT pt, DWORD flags, UINT dpi ) DECLSPEC_HIDDEN;
353 extern HMONITOR monitor_from_rect( const RECT *rect, DWORD flags, UINT dpi ) DECLSPEC_HIDDEN;
354 extern HMONITOR monitor_from_window( HWND hwnd, DWORD flags, UINT dpi ) DECLSPEC_HIDDEN;
355 extern void user_lock(void) DECLSPEC_HIDDEN;
356 extern void user_unlock(void) DECLSPEC_HIDDEN;
357 extern void user_check_not_lock(void) DECLSPEC_HIDDEN;
359 /* window.c */
360 struct tagWND;
361 extern HDWP begin_defer_window_pos( INT count ) DECLSPEC_HIDDEN;
362 extern BOOL client_to_screen( HWND hwnd, POINT *pt ) DECLSPEC_HIDDEN;
363 extern void destroy_thread_windows(void) DECLSPEC_HIDDEN;
364 extern LRESULT destroy_window( HWND hwnd ) DECLSPEC_HIDDEN;
365 extern BOOL enable_window( HWND hwnd, BOOL enable ) DECLSPEC_HIDDEN;
366 extern BOOL get_client_rect( HWND hwnd, RECT *rect ) DECLSPEC_HIDDEN;
367 extern HWND get_desktop_window(void) DECLSPEC_HIDDEN;
368 extern UINT get_dpi_for_window( HWND hwnd ) DECLSPEC_HIDDEN;
369 extern HWND get_full_window_handle( HWND hwnd ) DECLSPEC_HIDDEN;
370 extern HWND get_parent( HWND hwnd ) DECLSPEC_HIDDEN;
371 extern HWND get_hwnd_message_parent(void) DECLSPEC_HIDDEN;
372 extern DPI_AWARENESS_CONTEXT get_window_dpi_awareness_context( HWND hwnd ) DECLSPEC_HIDDEN;
373 extern MINMAXINFO get_min_max_info( HWND hwnd ) DECLSPEC_HIDDEN;
374 extern DWORD get_window_context_help_id( HWND hwnd ) DECLSPEC_HIDDEN;
375 extern HWND get_window_relative( HWND hwnd, UINT rel ) DECLSPEC_HIDDEN;
376 extern DWORD get_window_thread( HWND hwnd, DWORD *process ) DECLSPEC_HIDDEN;
377 extern HWND is_current_process_window( HWND hwnd ) DECLSPEC_HIDDEN;
378 extern HWND is_current_thread_window( HWND hwnd ) DECLSPEC_HIDDEN;
379 extern BOOL is_desktop_window( HWND hwnd ) DECLSPEC_HIDDEN;
380 extern BOOL is_iconic( HWND hwnd ) DECLSPEC_HIDDEN;
381 extern BOOL is_window_drawable( HWND hwnd, BOOL icon ) DECLSPEC_HIDDEN;
382 extern BOOL is_window_enabled( HWND hwnd ) DECLSPEC_HIDDEN;
383 extern BOOL is_window_unicode( HWND hwnd ) DECLSPEC_HIDDEN;
384 extern BOOL is_window_visible( HWND hwnd ) DECLSPEC_HIDDEN;
385 extern BOOL is_zoomed( HWND hwnd ) DECLSPEC_HIDDEN;
386 extern DWORD get_window_long( HWND hwnd, INT offset ) DECLSPEC_HIDDEN;
387 extern ULONG_PTR get_window_long_ptr( HWND hwnd, INT offset, BOOL ansi ) DECLSPEC_HIDDEN;
388 extern BOOL get_window_rect( HWND hwnd, RECT *rect, UINT dpi ) DECLSPEC_HIDDEN;
389 enum coords_relative;
390 extern BOOL get_window_rects( HWND hwnd, enum coords_relative relative, RECT *window_rect,
391 RECT *client_rect, UINT dpi ) DECLSPEC_HIDDEN;
392 extern HWND *list_window_children( HDESK desktop, HWND hwnd, UNICODE_STRING *class,
393 DWORD tid ) DECLSPEC_HIDDEN;
394 extern int map_window_points( HWND hwnd_from, HWND hwnd_to, POINT *points, UINT count,
395 UINT dpi ) DECLSPEC_HIDDEN;
396 extern void map_window_region( HWND from, HWND to, HRGN hrgn ) DECLSPEC_HIDDEN;
397 extern BOOL screen_to_client( HWND hwnd, POINT *pt ) DECLSPEC_HIDDEN;
398 extern LONG_PTR set_window_long( HWND hwnd, INT offset, UINT size, LONG_PTR newval,
399 BOOL ansi ) DECLSPEC_HIDDEN;
400 extern BOOL set_window_pos( WINDOWPOS *winpos, int parent_x, int parent_y ) DECLSPEC_HIDDEN;
401 extern ULONG set_window_style( HWND hwnd, ULONG set_bits, ULONG clear_bits ) DECLSPEC_HIDDEN;
402 extern BOOL show_owned_popups( HWND owner, BOOL show ) DECLSPEC_HIDDEN;
403 extern void update_window_state( HWND hwnd ) DECLSPEC_HIDDEN;
404 extern HWND window_from_point( HWND hwnd, POINT pt, INT *hittest ) DECLSPEC_HIDDEN;
406 /* to release pointers retrieved by win_get_ptr */
407 static inline void release_win_ptr( struct tagWND *ptr )
409 user_unlock();
412 extern void wrappers_init( unixlib_handle_t handle ) DECLSPEC_HIDDEN;
413 extern NTSTATUS gdi_init(void) DECLSPEC_HIDDEN;
414 extern NTSTATUS callbacks_init( void *args ) DECLSPEC_HIDDEN;
415 extern void winstation_init(void) DECLSPEC_HIDDEN;
416 extern void sysparams_init(void) DECLSPEC_HIDDEN;
417 extern int muldiv( int a, int b, int c ) DECLSPEC_HIDDEN;
419 extern HKEY reg_create_key( HKEY root, const WCHAR *name, ULONG name_len,
420 DWORD options, DWORD *disposition ) DECLSPEC_HIDDEN;
421 extern HKEY reg_open_hkcu_key( const char *name ) DECLSPEC_HIDDEN;
422 extern HKEY reg_open_key( HKEY root, const WCHAR *name, ULONG name_len ) DECLSPEC_HIDDEN;
423 extern ULONG query_reg_value( HKEY hkey, const WCHAR *name,
424 KEY_VALUE_PARTIAL_INFORMATION *info, ULONG size ) DECLSPEC_HIDDEN;
425 extern ULONG query_reg_ascii_value( HKEY hkey, const char *name,
426 KEY_VALUE_PARTIAL_INFORMATION *info, ULONG size ) DECLSPEC_HIDDEN;
427 extern void set_reg_ascii_value( HKEY hkey, const char *name, const char *value ) DECLSPEC_HIDDEN;
428 extern BOOL set_reg_value( HKEY hkey, const WCHAR *name, UINT type, const void *value,
429 DWORD count ) DECLSPEC_HIDDEN;
430 extern BOOL reg_delete_tree( HKEY parent, const WCHAR *name, ULONG name_len ) DECLSPEC_HIDDEN;
431 extern void reg_delete_value( HKEY hkey, const WCHAR *name ) DECLSPEC_HIDDEN;
433 extern HKEY hkcu_key DECLSPEC_HIDDEN;
435 extern const struct user_driver_funcs *user_driver DECLSPEC_HIDDEN;
437 static inline BOOL set_ntstatus( NTSTATUS status )
439 if (status) SetLastError( RtlNtStatusToDosError( status ));
440 return !status;
443 static inline WCHAR win32u_towupper( WCHAR ch )
445 return RtlUpcaseUnicodeChar( ch );
448 extern CPTABLEINFO ansi_cp DECLSPEC_HIDDEN;
450 DWORD win32u_mbtowc( CPTABLEINFO *info, WCHAR *dst, DWORD dstlen, const char *src,
451 DWORD srclen ) DECLSPEC_HIDDEN;
452 DWORD win32u_wctomb( CPTABLEINFO *info, char *dst, DWORD dstlen, const WCHAR *src,
453 DWORD srclen ) DECLSPEC_HIDDEN;
454 DWORD win32u_wctomb_size( CPTABLEINFO *info, const WCHAR *src, DWORD srclen ) DECLSPEC_HIDDEN;
456 static inline WCHAR *win32u_wcsdup( const WCHAR *str )
458 DWORD size = (lstrlenW( str ) + 1) * sizeof(WCHAR);
459 WCHAR *ret = malloc( size );
460 if (ret) memcpy( ret, str, size );
461 return ret;
464 static inline WCHAR *towstr( const char *str )
466 DWORD len = strlen( str ) + 1;
467 WCHAR *ret = malloc( len * sizeof(WCHAR) );
468 if (ret) win32u_mbtowc( &ansi_cp, ret, len, str, len );
469 return ret;
472 #define towupper(c) win32u_towupper(c)
473 #define wcsdup(s) win32u_wcsdup(s)
475 static inline void ascii_to_unicode( WCHAR *dst, const char *src, size_t len )
477 while (len--) *dst++ = (unsigned char)*src++;
480 static inline UINT asciiz_to_unicode( WCHAR *dst, const char *src )
482 WCHAR *p = dst;
483 while ((*p++ = *src++));
484 return (p - dst) * sizeof(WCHAR);
487 static inline BOOL is_win9x(void)
489 return NtCurrentTeb()->Peb->OSPlatformId == VER_PLATFORM_WIN32s;
492 static inline ULONG_PTR zero_bits(void)
494 #ifdef _WIN64
495 return !NtCurrentTeb()->WowTebOffset ? 0 : 0x7fffffff;
496 #else
497 return 0;
498 #endif
501 static inline const char *debugstr_us( const UNICODE_STRING *us )
503 if (!us) return "<null>";
504 return debugstr_wn( us->Buffer, us->Length / sizeof(WCHAR) );
507 #endif /* __WINE_WIN32U_PRIVATE */