blob: 7de33ea31309e3038148220cf0801f64dea1fb4a [file] [log] [blame]
Jim Aston2e1cafa1999-03-14 16:35:05 +00001/*
2 * Basic types definitions
3 *
4 * Copyright 1996 Alexandre Julliard
Michael Veksler17822f41999-02-09 15:46:25 +00005 */
Jim Aston2e1cafa1999-03-14 16:35:05 +00006
7#ifndef __WINE_WINDEF_H
8#define __WINE_WINDEF_H
9
10#ifdef __WINE__
Jim Aston2e1cafa1999-03-14 16:35:05 +000011# undef UNICODE
12#endif /* __WINE__ */
13
Francois Gougeteec9cbb2000-10-13 17:10:34 +000014#define WINVER 0x0500
15
François Gouget7d646762000-12-15 21:31:03 +000016#include "winnt.h"
Jim Aston2e1cafa1999-03-14 16:35:05 +000017
Jim Aston2e1cafa1999-03-14 16:35:05 +000018
François Gouget640ec8e2000-12-19 04:51:10 +000019#ifdef __cplusplus
20extern "C" {
21#endif
22
23
Jim Aston2e1cafa1999-03-14 16:35:05 +000024/* Macros to map Winelib names to the correct implementation name */
25/* depending on __WINE__ and UNICODE macros. */
26/* Note that Winelib is purely Win32. */
27
28#ifdef __WINE__
Steven Elliott9dd97431999-12-25 22:45:57 +000029# define WINELIB_NAME_AW(func) \
30 func##_must_be_suffixed_with_W_or_A_in_this_context \
31 func##_must_be_suffixed_with_W_or_A_in_this_context
Jim Aston2e1cafa1999-03-14 16:35:05 +000032#else /* __WINE__ */
33# ifdef UNICODE
34# define WINELIB_NAME_AW(func) func##W
35# else
36# define WINELIB_NAME_AW(func) func##A
37# endif /* UNICODE */
38#endif /* __WINE__ */
39
40#ifdef __WINE__
41# define DECL_WINELIB_TYPE_AW(type) /* nothing */
42#else /* __WINE__ */
43# define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type;
44#endif /* __WINE__ */
45
Adrian Thurston4eb5edf1999-04-25 11:05:30 +000046
47/* Integer types. These are the same for emulator and library. */
Jim Aston2e1cafa1999-03-14 16:35:05 +000048typedef UINT WPARAM;
49typedef LONG LPARAM;
Jim Aston2e1cafa1999-03-14 16:35:05 +000050typedef LONG LRESULT;
51typedef WORD ATOM;
52typedef WORD CATCHBUF[9];
53typedef WORD *LPCATCHBUF;
Jim Aston2e1cafa1999-03-14 16:35:05 +000054typedef HANDLE HHOOK;
Jim Aston2e1cafa1999-03-14 16:35:05 +000055typedef HANDLE HMONITOR;
Jim Aston2e1cafa1999-03-14 16:35:05 +000056
Jim Aston2e1cafa1999-03-14 16:35:05 +000057/* Handle types that exist both in Win16 and Win32. */
58
François Gouget45437032000-12-26 00:07:25 +000059DECLARE_OLD_HANDLE(HACMDRIVERID);
60DECLARE_OLD_HANDLE(HACMDRIVER);
61DECLARE_OLD_HANDLE(HACMOBJ);
62DECLARE_OLD_HANDLE(HACMSTREAM);
Jiuming Luo2840d1b1999-03-28 12:39:18 +000063
François Gouget45437032000-12-26 00:07:25 +000064DECLARE_OLD_HANDLE(HACCEL);
65DECLARE_OLD_HANDLE(HBITMAP);
66DECLARE_OLD_HANDLE(HBRUSH);
François Gougetca08ede2000-12-29 03:40:55 +000067DECLARE_HANDLE(HCOLORSPACE);
François Gouget45437032000-12-26 00:07:25 +000068DECLARE_OLD_HANDLE(HDC);
François Gouget45437032000-12-26 00:07:25 +000069DECLARE_OLD_HANDLE(HDRVR);
François Gouget45437032000-12-26 00:07:25 +000070DECLARE_OLD_HANDLE(HENHMETAFILE);
Francois Gouget50bcd1a2000-10-13 23:11:05 +000071typedef int HFILE;
François Gouget45437032000-12-26 00:07:25 +000072DECLARE_OLD_HANDLE(HFONT);
73DECLARE_OLD_HANDLE(HICON);
74DECLARE_OLD_HANDLE(HINSTANCE);
75DECLARE_OLD_HANDLE(HKEY);
76DECLARE_OLD_HANDLE(HMENU);
77DECLARE_OLD_HANDLE(HMETAFILE);
78DECLARE_OLD_HANDLE(HMIDI);
79DECLARE_OLD_HANDLE(HMIDIIN);
80DECLARE_OLD_HANDLE(HMIDIOUT);
81DECLARE_OLD_HANDLE(HMIDISTRM);
82DECLARE_OLD_HANDLE(HMIXER);
83DECLARE_OLD_HANDLE(HMIXEROBJ);
84DECLARE_OLD_HANDLE(HMMIO);
85DECLARE_OLD_HANDLE(HPALETTE);
86DECLARE_OLD_HANDLE(HPEN);
François Gouget45437032000-12-26 00:07:25 +000087DECLARE_OLD_HANDLE(HRGN);
88DECLARE_OLD_HANDLE(HRSRC);
89DECLARE_OLD_HANDLE(HTASK);
90DECLARE_OLD_HANDLE(HWAVE);
91DECLARE_OLD_HANDLE(HWAVEIN);
92DECLARE_OLD_HANDLE(HWAVEOUT);
François Gouget54300e52001-01-09 20:56:06 +000093DECLARE_HANDLE(HWINSTA);
François Gougetd6515df2001-01-03 21:39:33 +000094DECLARE_HANDLE(HDESK);
François Gouget45437032000-12-26 00:07:25 +000095DECLARE_OLD_HANDLE(HWND);
96DECLARE_OLD_HANDLE(HKL);
Jim Aston2e1cafa1999-03-14 16:35:05 +000097
Adrian Thurston4eb5edf1999-04-25 11:05:30 +000098/* Handle types that must remain interchangeable even with strict on */
99
Adrian Thurston4eb5edf1999-04-25 11:05:30 +0000100typedef HINSTANCE HMODULE;
Adrian Thurston4eb5edf1999-04-25 11:05:30 +0000101typedef HANDLE HGDIOBJ;
102typedef HANDLE HGLOBAL;
103typedef HANDLE HLOCAL;
Francois Gougetabdb0342000-03-19 14:21:38 +0000104typedef HANDLE GLOBALHANDLE;
105typedef HANDLE LOCALHANDLE;
Francois Gouget8c9d3e42000-11-10 22:32:45 +0000106typedef HICON HCURSOR;
Adrian Thurston4eb5edf1999-04-25 11:05:30 +0000107
Jim Aston2e1cafa1999-03-14 16:35:05 +0000108/* Callback function pointers types */
109
François Gougetf53b0e82001-01-04 19:32:22 +0000110typedef INT CALLBACK (*FARPROC)();
Francois Gougeta537bec2000-06-11 20:07:08 +0000111typedef INT CALLBACK (*PROC)();
Jim Aston2e1cafa1999-03-14 16:35:05 +0000112
Jim Aston2e1cafa1999-03-14 16:35:05 +0000113
114/* Macros to split words and longs. */
115
116#define LOBYTE(w) ((BYTE)(WORD)(w))
117#define HIBYTE(w) ((BYTE)((WORD)(w) >> 8))
118
119#define LOWORD(l) ((WORD)(DWORD)(l))
120#define HIWORD(l) ((WORD)((DWORD)(l) >> 16))
121
Alexandre Julliard83f52d12000-09-26 22:20:14 +0000122#define SLOWORD(l) ((SHORT)(LONG)(l))
123#define SHIWORD(l) ((SHORT)((LONG)(l) >> 16))
Jim Aston2e1cafa1999-03-14 16:35:05 +0000124
125#define MAKEWORD(low,high) ((WORD)(((BYTE)(low)) | ((WORD)((BYTE)(high))) << 8))
126#define MAKELONG(low,high) ((LONG)(((WORD)(low)) | (((DWORD)((WORD)(high))) << 16)))
127#define MAKELPARAM(low,high) ((LPARAM)MAKELONG(low,high))
128#define MAKEWPARAM(low,high) ((WPARAM)MAKELONG(low,high))
129#define MAKELRESULT(low,high) ((LRESULT)MAKELONG(low,high))
130#define MAKEINTATOM(atom) ((LPCSTR)MAKELONG((atom),0))
131
132#define SELECTOROF(ptr) (HIWORD(ptr))
133#define OFFSETOF(ptr) (LOWORD(ptr))
134
Alexandre Julliardb3756781999-08-01 12:15:12 +0000135#ifdef __WINE__
136/* macros to set parts of a DWORD (not in the Windows API) */
137#define SET_LOWORD(dw,val) ((dw) = ((dw) & 0xffff0000) | LOWORD(val))
138#define SET_LOBYTE(dw,val) ((dw) = ((dw) & 0xffffff00) | LOBYTE(val))
Francois Gouget52b28782000-09-22 22:18:41 +0000139#define SET_HIBYTE(dw,val) ((dw) = ((dw) & 0xffff00ff) | (LOBYTE(val) << 8))
Alexandre Julliardb3756781999-08-01 12:15:12 +0000140#define ADD_LOWORD(dw,val) ((dw) = ((dw) & 0xffff0000) | LOWORD((DWORD)(dw)+(val)))
141#endif
142
Jim Aston2e1cafa1999-03-14 16:35:05 +0000143
Francois Gouget6d77d3a2000-03-25 21:44:35 +0000144/* min and max macros */
145#define __max(a,b) (((a) > (b)) ? (a) : (b))
146#define __min(a,b) (((a) < (b)) ? (a) : (b))
Howard Abrams13277481999-07-10 13:16:29 +0000147#ifndef max
Francois Gouget6d77d3a2000-03-25 21:44:35 +0000148#define max(a,b) (((a) > (b)) ? (a) : (b))
Howard Abrams13277481999-07-10 13:16:29 +0000149#endif
150#ifndef min
Francois Gouget6d77d3a2000-03-25 21:44:35 +0000151#define min(a,b) (((a) < (b)) ? (a) : (b))
Howard Abrams13277481999-07-10 13:16:29 +0000152#endif
Jim Aston2e1cafa1999-03-14 16:35:05 +0000153
154#define _MAX_PATH 260
155#define MAX_PATH 260
156#define _MAX_DRIVE 3
157#define _MAX_DIR 256
158#define _MAX_FNAME 255
159#define _MAX_EXT 256
Michael Veksler17822f41999-02-09 15:46:25 +0000160
Jim Aston2e1cafa1999-03-14 16:35:05 +0000161#define HFILE_ERROR ((HFILE)-1)
Michael Veksler17822f41999-02-09 15:46:25 +0000162
Jim Aston2e1cafa1999-03-14 16:35:05 +0000163/* The SIZE structure */
Jim Aston2e1cafa1999-03-14 16:35:05 +0000164typedef struct tagSIZE
165{
Peter Hunnisett565b0082000-09-19 02:43:00 +0000166 LONG cx;
167 LONG cy;
Jim Aston2e1cafa1999-03-14 16:35:05 +0000168} SIZE, *PSIZE, *LPSIZE;
Michael Veksler17822f41999-02-09 15:46:25 +0000169
Jim Aston2e1cafa1999-03-14 16:35:05 +0000170typedef SIZE SIZEL, *PSIZEL, *LPSIZEL;
171
Jim Aston2e1cafa1999-03-14 16:35:05 +0000172/* The POINT structure */
Jim Aston2e1cafa1999-03-14 16:35:05 +0000173typedef struct tagPOINT
174{
175 LONG x;
176 LONG y;
177} POINT, *PPOINT, *LPPOINT;
178
Francis Beaudet3f7ad7a1999-02-13 09:13:49 +0000179typedef struct _POINTL
180{
Jim Aston2e1cafa1999-03-14 16:35:05 +0000181 LONG x;
182 LONG y;
Francis Beaudet3f7ad7a1999-02-13 09:13:49 +0000183} POINTL;
184
Jim Aston2e1cafa1999-03-14 16:35:05 +0000185/* The POINTS structure */
186
187typedef struct tagPOINTS
188{
Alexandre Julliard83f52d12000-09-26 22:20:14 +0000189 SHORT x;
190 SHORT y;
Jim Aston2e1cafa1999-03-14 16:35:05 +0000191} POINTS, *PPOINTS, *LPPOINTS;
192
Jim Aston2e1cafa1999-03-14 16:35:05 +0000193/* The RECT structure */
Jim Aston2e1cafa1999-03-14 16:35:05 +0000194typedef struct tagRECT
195{
196 INT left;
197 INT top;
198 INT right;
199 INT bottom;
200} RECT, *PRECT, *LPRECT;
201typedef const RECT *LPCRECT;
202
203
204typedef struct tagRECTL
205{
206 LONG left;
207 LONG top;
208 LONG right;
209 LONG bottom;
210} RECTL, *PRECTL, *LPRECTL;
211
212typedef const RECTL *LPCRECTL;
213
Jim Aston2e1cafa1999-03-14 16:35:05 +0000214#ifdef __cplusplus
215}
216#endif
217
Jiuming Luo2840d1b1999-03-28 12:39:18 +0000218#endif /* __WINE_WINDEF_H */