blob: 5f2a420220148400e27f61167d6620f6b6b49f25 [file] [log] [blame]
Alexandre Julliard401710d1993-09-04 10:09:32 +00001/*
2 * USER definitions
3 *
4 * Copyright 1993 Alexandre Julliard
Alexandre Julliard0799c1a2002-03-09 23:29:33 +00005 *
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.
10 *
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.
15 *
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Alexandre Julliard401710d1993-09-04 10:09:32 +000019 */
20
Alexandre Julliardc6c09441997-01-12 18:32:19 +000021#ifndef __WINE_USER_H
22#define __WINE_USER_H
Alexandre Julliard401710d1993-09-04 10:09:32 +000023
Alexandre Julliarde37c6e12003-09-05 23:08:26 +000024#include <stdarg.h>
25#include <windef.h>
Dimitrie O. Paun53f9c212003-08-28 21:43:34 +000026#include <winbase.h>
27#include <wingdi.h>
28#include <winuser.h>
Alexandre Julliard9ae0fe52001-04-24 23:28:52 +000029
Dimitrie O. Paun53f9c212003-08-28 21:43:34 +000030#include <local.h>
Alexandre Julliard401710d1993-09-04 10:09:32 +000031
Alexandre Julliarde2abbb11995-03-19 17:39:39 +000032extern WORD USER_HeapSel;
Alexandre Julliard401710d1993-09-04 10:09:32 +000033
Alexandre Julliarde2abbb11995-03-19 17:39:39 +000034#define USER_HEAP_ALLOC(size) \
Alexandre Julliard7521a422002-10-19 00:55:34 +000035 ((HANDLE)(ULONG_PTR)LOCAL_Alloc( USER_HeapSel, LMEM_FIXED, (size) ))
Alexandre Julliarde2abbb11995-03-19 17:39:39 +000036#define USER_HEAP_REALLOC(handle,size) \
Alexandre Julliard7521a422002-10-19 00:55:34 +000037 ((HANDLE)(ULONG_PTR)LOCAL_ReAlloc( USER_HeapSel, LOWORD(handle), (size), LMEM_FIXED ))
Alexandre Julliarde2abbb11995-03-19 17:39:39 +000038#define USER_HEAP_FREE(handle) \
Alexandre Julliard7521a422002-10-19 00:55:34 +000039 LOCAL_Free( USER_HeapSel, LOWORD(handle) )
Alexandre Julliarde2abbb11995-03-19 17:39:39 +000040#define USER_HEAP_LIN_ADDR(handle) \
Alexandre Julliard7521a422002-10-19 00:55:34 +000041 ((handle) ? MapSL(MAKESEGPTR(USER_HeapSel, LOWORD(handle))) : NULL)
Alexandre Julliardfb9a9191994-03-01 19:48:04 +000042
Alexandre Julliard7fbd74e2002-05-23 02:53:10 +000043#define GET_WORD(ptr) (*(WORD *)(ptr))
44#define GET_DWORD(ptr) (*(DWORD *)(ptr))
45
Alexandre Julliarda69b88b1998-03-15 20:29:56 +000046#define USUD_LOCALALLOC 0x0001
47#define USUD_LOCALFREE 0x0002
48#define USUD_LOCALCOMPACT 0x0003
49#define USUD_LOCALHEAP 0x0004
50#define USUD_FIRSTCLASS 0x0005
51
Alexandre Julliard28c3a1b2000-03-20 18:21:19 +000052struct tagCURSORICONINFO;
Alexandre Julliard2b5d5642000-06-08 04:57:22 +000053
Alexandre Julliardfb0ff052001-10-16 21:58:58 +000054/* internal messages codes */
55enum wine_internal_message
56{
57 WM_WINE_DESTROYWINDOW = 0x80000000,
58 WM_WINE_SETWINDOWPOS,
59 WM_WINE_SHOWWINDOW,
Alexandre Julliardddc33172001-10-22 19:08:33 +000060 WM_WINE_SETPARENT,
61 WM_WINE_SETWINDOWLONG,
Alexandre Julliard5030bda2002-10-11 23:41:06 +000062 WM_WINE_ENABLEWINDOW,
Alexandre Julliardca3ac8f2003-07-11 21:55:58 +000063 WM_WINE_SETACTIVEWINDOW,
64 WM_WINE_KEYBOARD_LL_HOOK,
65 WM_WINE_MOUSE_LL_HOOK
Alexandre Julliardfb0ff052001-10-16 21:58:58 +000066};
Alexandre Julliard42d20f92000-08-10 01:16:19 +000067
Alexandre Julliard32fb5802001-10-18 21:38:59 +000068/* internal SendInput codes (FIXME) */
69#define WINE_INTERNAL_INPUT_MOUSE (16+INPUT_MOUSE)
70#define WINE_INTERNAL_INPUT_KEYBOARD (16+INPUT_KEYBOARD)
71
Patrik Stridvallb87fe2e1999-04-01 08:16:08 +000072typedef struct tagUSER_DRIVER {
Alexandre Julliard28c3a1b2000-03-20 18:21:19 +000073 /* keyboard functions */
Alexandre Julliard4b626182001-10-17 17:50:02 +000074 void (*pInitKeyboard)(LPBYTE);
Dmitry Timoshkovb0c2e542003-11-14 03:32:43 +000075 SHORT (*pVkKeyScanEx)(WCHAR, HKL);
76 UINT (*pMapVirtualKeyEx)(UINT, UINT, HKL);
77 INT (*pGetKeyNameText)(LONG, LPWSTR, INT);
78 INT (*pToUnicodeEx)(UINT, UINT, LPBYTE, LPWSTR, int, UINT, HKL);
79 UINT (*pGetKeyboardLayoutList)(INT, HKL *);
80 HKL (*pGetKeyboardLayout)(DWORD);
81 BOOL (*pGetKeyboardLayoutName)(LPWSTR);
82 HKL (*pLoadKeyboardLayout)(LPCWSTR, UINT);
83 HKL (*pActivateKeyboardLayout)(HKL, UINT);
84 BOOL (*pUnloadKeyboardLayout)(HKL);
Alexandre Julliard28c3a1b2000-03-20 18:21:19 +000085 void (*pBeep)(void);
Alexandre Julliard28c3a1b2000-03-20 18:21:19 +000086 /* mouse functions */
Alexandre Julliard32fb5802001-10-18 21:38:59 +000087 void (*pInitMouse)(LPBYTE);
Alexandre Julliard28c3a1b2000-03-20 18:21:19 +000088 void (*pSetCursor)(struct tagCURSORICONINFO *);
Ove Kaaven624f14e2001-06-21 00:44:09 +000089 void (*pGetCursorPos)(LPPOINT);
90 void (*pSetCursorPos)(INT,INT);
Alexandre Julliard7f3418f2000-03-25 17:30:13 +000091 /* screen saver functions */
92 BOOL (*pGetScreenSaveActive)(void);
93 void (*pSetScreenSaveActive)(BOOL);
Alexandre Julliard42d20f92000-08-10 01:16:19 +000094 /* clipboard functions */
Ulrich Czekallab2df5f92003-06-23 23:02:02 +000095 void (*pAcquireClipboard)(HWND); /* Acquire selection */
96 BOOL (*pCountClipboardFormats)(void); /* Count available clipboard formats */
Ulrich Czekallab41466b2004-05-06 23:40:30 +000097 void (*pEmptyClipboard)(BOOL); /* Empty clipboard data */
Ulrich Czekallab2df5f92003-06-23 23:02:02 +000098 BOOL (*pEndClipboardUpdate)(void); /* End clipboard update */
99 BOOL (*pEnumClipboardFormats)(UINT); /* Enumerate clipboard formats */
100 BOOL (*pGetClipboardData)(UINT, HANDLE16*, HANDLE*); /* Get specified selection data */
101 BOOL (*pGetClipboardFormatName)(UINT, LPSTR, UINT); /* Get a clipboard format name */
102 BOOL (*pIsClipboardFormatAvailable)(UINT); /* Check if specified format is available */
103 INT (*pRegisterClipboardFormat)(LPCSTR); /* Register a clipboard format */
Alexandre Julliard4ff32c82001-08-18 18:08:26 +0000104 void (*pResetSelectionOwner)(HWND, BOOL);
Ulrich Czekallab41466b2004-05-06 23:40:30 +0000105 BOOL (*pSetClipboardData)(UINT, HANDLE16, HANDLE, BOOL); /* Set specified selection data */
Alex Pasadyn330179f2003-04-22 00:15:48 +0000106 /* display modes */
107 LONG (*pChangeDisplaySettingsExW)(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID);
108 BOOL (*pEnumDisplaySettingsExW)(LPCWSTR,DWORD,LPDEVMODEW,DWORD);
Alexandre Julliard9ae0fe52001-04-24 23:28:52 +0000109 /* windowing functions */
Gerard Patelad363032001-06-06 21:26:50 +0000110 BOOL (*pCreateWindow)(HWND,CREATESTRUCTA*,BOOL);
Alexandre Julliard9ae0fe52001-04-24 23:28:52 +0000111 BOOL (*pDestroyWindow)(HWND);
112 BOOL (*pGetDC)(HWND,HDC,HRGN,DWORD);
Alexandre Julliarded15fc72001-06-29 01:26:41 +0000113 void (*pForceWindowRaise)(HWND);
Alexandre Julliard51ab43b2001-05-18 22:51:56 +0000114 DWORD (*pMsgWaitForMultipleObjectsEx)(DWORD,const HANDLE*,DWORD,DWORD,DWORD);
Alexandre Julliard3f61afb2002-11-14 22:30:20 +0000115 void (*pReleaseDC)(HWND,HDC);
Alexandre Julliarde3fe9f22001-05-10 03:23:59 +0000116 INT (*pScrollWindowEx)(HWND,INT,INT,const RECT*,const RECT*,HRGN,LPRECT,UINT);
Alexandre Julliard9ae0fe52001-04-24 23:28:52 +0000117 void (*pSetFocus)(HWND);
118 HWND (*pSetParent)(HWND,HWND);
119 BOOL (*pSetWindowPos)(WINDOWPOS *);
Alexandre Julliardddc33172001-10-22 19:08:33 +0000120 int (*pSetWindowRgn)(HWND,HRGN,BOOL);
Alexandre Julliard446d8322003-12-31 23:51:52 +0000121 void (*pSetWindowIcon)(HWND,UINT,HICON);
Gerard Patel94ce2a32001-10-03 18:44:02 +0000122 void (*pSetWindowStyle)(HWND,DWORD);
Alexandre Julliard9ae0fe52001-04-24 23:28:52 +0000123 BOOL (*pSetWindowText)(HWND,LPCWSTR);
Alexandre Julliarddc4fe772001-06-04 21:55:17 +0000124 BOOL (*pShowWindow)(HWND,INT);
Alexandre Julliard3abeae82001-05-09 17:21:04 +0000125 void (*pSysCommandSizeMove)(HWND,WPARAM);
Patrik Stridvallb87fe2e1999-04-01 08:16:08 +0000126} USER_DRIVER;
127
Alexandre Julliard42d20f92000-08-10 01:16:19 +0000128extern USER_DRIVER USER_Driver;
Patrik Stridvallb87fe2e1999-04-01 08:16:08 +0000129
Alexandre Julliarda2e2e182004-02-12 00:35:01 +0000130extern HMODULE user32_module;
131
Alexandre Julliard6837b9c2001-08-16 18:14:22 +0000132/* user lock */
133extern void USER_Lock(void);
134extern void USER_Unlock(void);
135extern void USER_CheckNotLock(void);
136
Alexandre Julliardfb0ff052001-10-16 21:58:58 +0000137extern BOOL USER_IsExitingThread( DWORD tid );
138
Alexandre Julliarda41b2cf2001-01-15 20:12:55 +0000139/* gray brush cache */
140extern HBRUSH CACHE_GetPattern55AABrush(void);
141
Alexandre Julliard02861352002-10-29 00:41:42 +0000142/* hook.c */
143extern LRESULT HOOK_CallHooks( INT id, INT code, WPARAM wparam, LPARAM lparam, BOOL unicode );
144extern BOOL HOOK_IsHooked( INT id );
145
Alexandre Julliard18d02972002-12-03 23:34:52 +0000146/* input.c */
147extern BYTE InputKeyStateTable[256];
148extern BYTE AsyncKeyStateTable[256];
149
Alexandre Julliard4344c362002-05-20 18:15:28 +0000150/* syscolor.c */
Alexandre Julliard18d02972002-12-03 23:34:52 +0000151extern void SYSCOLOR_Init(void);
Alexandre Julliard4344c362002-05-20 18:15:28 +0000152extern HPEN SYSCOLOR_GetPen( INT index );
153
Alexandre Julliard18d02972002-12-03 23:34:52 +0000154/* sysmetrics.c */
155extern void SYSMETRICS_Init(void);
156extern INT SYSMETRICS_Set( INT index, INT value );
157
Alexandre Julliard18d02972002-12-03 23:34:52 +0000158/* sysparams.c */
159extern void SYSPARAMS_GetDoubleClickSize( INT *width, INT *height );
160extern INT SYSPARAMS_GetMouseButtonSwap( void );
161
Alexandre Julliard0ccb9fe2002-10-18 04:05:49 +0000162extern HPALETTE WINAPI SelectPalette( HDC hDC, HPALETTE hPal, BOOL bForceBackground );
163
Ulrich Czekallab2df5f92003-06-23 23:02:02 +0000164extern BOOL CLIPBOARD_ReleaseOwner(void);
165
Mike McCormack096524c2001-12-26 19:46:40 +0000166extern DWORD USER16_AlertableWait;
167
Michael Stefaniuc4a75c5c2002-08-28 00:39:39 +0000168/* HANDLE16 <-> HANDLE conversions */
Alexandre Julliarda8a422f2002-11-22 20:43:01 +0000169#define HCURSOR_16(h32) (LOWORD(h32))
170#define HICON_16(h32) (LOWORD(h32))
171#define HINSTANCE_16(h32) (LOWORD(h32))
Michael Stefaniucbc54d782002-10-10 21:22:09 +0000172
Alexandre Julliarda8a422f2002-11-22 20:43:01 +0000173#define HCURSOR_32(h16) ((HCURSOR)(ULONG_PTR)(h16))
174#define HICON_32(h16) ((HICON)(ULONG_PTR)(h16))
175#define HINSTANCE_32(h16) ((HINSTANCE)(ULONG_PTR)(h16))
176#define HMODULE_32(h16) ((HMODULE)(ULONG_PTR)(h16))
Michael Stefaniuc4a75c5c2002-08-28 00:39:39 +0000177
Alexandre Julliardc6c09441997-01-12 18:32:19 +0000178#endif /* __WINE_USER_H */