xref: /reactos/sdk/include/psdk/ddraw.h (revision 0e88f048)
1 
2 #ifndef __DDRAW_INCLUDED__
3 #define __DDRAW_INCLUDED__
4 
5 #if defined(_WIN32) && !defined(_NO_COM )
6 #define COM_NO_WINDOWS_H
7 #include <objbase.h>
8 #else
9 #define IUnknown void
10 #if !defined(NT_BUILD_ENVIRONMENT) && !defined(WINNT)
11         #define CO_E_NOTINITIALIZED 0x800401F0L
12 #endif
13 #endif
14 
15 #define _FACDD        0x876
16 
17 #ifndef MAKE_DDHRESULT
18 #define MAKE_DDHRESULT(c) MAKE_HRESULT(1,_FACDD,c)
19 #endif
20 
21 #ifndef DIRECTDRAW_VERSION
22   #define DIRECTDRAW_VERSION 0x0700
23 #endif
24 
25 #undef ENABLE_NAMELESS_UNION_PRAGMA
26 #ifdef DIRECTX_REDIST
27   #define ENABLE_NAMELESS_UNION_PRAGMA
28 #endif
29 
30 #ifdef ENABLE_NAMELESS_UNION_PRAGMA
31   #pragma warning(disable:4201)
32 #endif
33 
34 #ifndef DUMMYUNIONNAMEN
35   #if defined(__cplusplus) || !defined(NONAMELESSUNION)
36     #define DUMMYUNIONNAMEN(n)
37   #else
38     #define DUMMYUNIONNAMEN(n)      u##n
39   #endif
40 #endif
41 
42 #if defined(WINNT) || !defined(WIN32)
43 #ifndef _HRESULT_DEFINED
44 #define _HRESULT_DEFINED
45   typedef long HRESULT;
46 #endif
47 #endif
48 
49 /* Helper macro to enable gcc's extension. */
50 #ifndef __GNU_EXTENSION
51 #ifdef __GNUC__
52 #define __GNU_EXTENSION __extension__
53 #else
54 #define __GNU_EXTENSION
55 #endif
56 #endif
57 
58 #ifdef __cplusplus
59 extern "C" {
60 #endif
61 
62 /* This define are obsolete in ms ddk, but are use internal in Windows NT4/2000/XP/2003/ReactOS */
63 #define DDCAPS_STEREOVIEW                      0x00040000
64 
65 
66 /* Orgnal */
67 #define DDERR_ALREADYINITIALIZED               MAKE_DDHRESULT( 5)
68 #define DDERR_CANNOTATTACHSURFACE              MAKE_DDHRESULT(10)
69 #define DDERR_CANNOTDETACHSURFACE              MAKE_DDHRESULT(20)
70 #define DDERR_CURRENTLYNOTAVAIL                MAKE_DDHRESULT(40)
71 #define DDERR_EXCEPTION                        MAKE_DDHRESULT(55)
72 #define DDERR_GENERIC                          E_FAIL
73 #define DDERR_HEIGHTALIGN                      MAKE_DDHRESULT( 90)
74 #define DDERR_INCOMPATIBLEPRIMARY              MAKE_DDHRESULT( 95)
75 #define DDERR_INVALIDCAPS                      MAKE_DDHRESULT(100)
76 #define DDERR_INVALIDCLIPLIST                  MAKE_DDHRESULT(110)
77 #define DDERR_INVALIDMODE                      MAKE_DDHRESULT(120)
78 #define DDERR_INVALIDOBJECT                    MAKE_DDHRESULT(130)
79 #define DDERR_INVALIDPARAMS                    E_INVALIDARG
80 #define DDERR_INVALIDPIXELFORMAT               MAKE_DDHRESULT(145)
81 #define DDERR_INVALIDRECT                      MAKE_DDHRESULT(150)
82 #define DDERR_LOCKEDSURFACES                   MAKE_DDHRESULT(160)
83 #define DDERR_NO3D                             MAKE_DDHRESULT(170)
84 #define DDERR_NOALPHAHW                        MAKE_DDHRESULT(180)
85 #define DDERR_NOSTEREOHARDWARE                 MAKE_DDHRESULT(181)
86 #define DDERR_NOSURFACELEFT                    MAKE_DDHRESULT(182)
87 #define DDERR_NOCLIPLIST                       MAKE_DDHRESULT(205)
88 #define DDERR_NOCOLORCONVHW                    MAKE_DDHRESULT(210)
89 #define DDERR_NOCOOPERATIVELEVELSET            MAKE_DDHRESULT(212)
90 #define DDERR_NOCOLORKEY                       MAKE_DDHRESULT(215)
91 #define DDERR_NOCOLORKEYHW                     MAKE_DDHRESULT(220)
92 #define DDERR_NODIRECTDRAWSUPPORT              MAKE_DDHRESULT(222)
93 #define DDERR_NOEXCLUSIVEMODE                  MAKE_DDHRESULT(225)
94 #define DDERR_NOFLIPHW                         MAKE_DDHRESULT(230)
95 #define DDERR_NOGDI                            MAKE_DDHRESULT(240)
96 #define DDERR_NOMIRRORHW                       MAKE_DDHRESULT(250)
97 #define DDERR_NOTFOUND                         MAKE_DDHRESULT(255)
98 #define DDERR_NOOVERLAYHW                      MAKE_DDHRESULT(260)
99 #define DDERR_OVERLAPPINGRECTS                 MAKE_DDHRESULT(270)
100 #define DDERR_NORASTEROPHW                     MAKE_DDHRESULT(280)
101 #define DDERR_NOROTATIONHW                     MAKE_DDHRESULT(290)
102 #define DDERR_NOSTRETCHHW                      MAKE_DDHRESULT(310)
103 #define DDERR_NOT4BITCOLOR                     MAKE_DDHRESULT(316)
104 #define DDERR_NOT4BITCOLORINDEX                MAKE_DDHRESULT(317)
105 #define DDERR_NOT8BITCOLOR                     MAKE_DDHRESULT(320)
106 #define DDERR_NOTEXTUREHW                      MAKE_DDHRESULT(330)
107 #define DDERR_NOVSYNCHW                        MAKE_DDHRESULT(335)
108 #define DDERR_NOZBUFFERHW                      MAKE_DDHRESULT(340)
109 #define DDERR_NOZOVERLAYHW                     MAKE_DDHRESULT(350)
110 #define DDERR_OUTOFCAPS                        MAKE_DDHRESULT(360)
111 #define DDERR_OUTOFMEMORY                      E_OUTOFMEMORY
112 #define DDERR_OUTOFVIDEOMEMORY                 MAKE_DDHRESULT(380)
113 #define DDERR_OVERLAYCANTCLIP                  MAKE_DDHRESULT(382)
114 #define DDERR_OVERLAYCOLORKEYONLYONEACTIVE     MAKE_DDHRESULT(384)
115 #define DDERR_PALETTEBUSY                      MAKE_DDHRESULT(387)
116 #define DDERR_COLORKEYNOTSET                   MAKE_DDHRESULT(400)
117 #define DDERR_SURFACEALREADYATTACHED           MAKE_DDHRESULT(410)
118 #define DDERR_SURFACEALREADYDEPENDENT          MAKE_DDHRESULT(420)
119 #define DDERR_SURFACEBUSY                      MAKE_DDHRESULT(430)
120 #define DDERR_CANTLOCKSURFACE                  MAKE_DDHRESULT(435)
121 #define DDERR_SURFACEISOBSCURED                MAKE_DDHRESULT(440)
122 #define DDERR_SURFACELOST                      MAKE_DDHRESULT(450)
123 #define DDERR_SURFACENOTATTACHED               MAKE_DDHRESULT(460)
124 #define DDERR_TOOBIGHEIGHT                     MAKE_DDHRESULT(470)
125 #define DDERR_TOOBIGSIZE                       MAKE_DDHRESULT(480)
126 #define DDERR_TOOBIGWIDTH                      MAKE_DDHRESULT(490)
127 #define DDERR_UNSUPPORTED                      E_NOTIMPL
128 #define DDERR_UNSUPPORTEDFORMAT                MAKE_DDHRESULT(510)
129 #define DDERR_UNSUPPORTEDMASK                  MAKE_DDHRESULT(520)
130 #define DDERR_INVALIDSTREAM                    MAKE_DDHRESULT(521)
131 #define DDERR_VERTICALBLANKINPROGRESS          MAKE_DDHRESULT(537)
132 #define DDERR_WASSTILLDRAWING                  MAKE_DDHRESULT(540)
133 #define DDERR_DDSCAPSCOMPLEXREQUIRED           MAKE_DDHRESULT(542)
134 #define DDERR_XALIGN                           MAKE_DDHRESULT(560)
135 #define DDERR_INVALIDDIRECTDRAWGUID            MAKE_DDHRESULT(561)
136 #define DDERR_DIRECTDRAWALREADYCREATED         MAKE_DDHRESULT(562)
137 #define DDERR_NODIRECTDRAWHW                   MAKE_DDHRESULT(563)
138 #define DDERR_PRIMARYSURFACEALREADYEXISTS      MAKE_DDHRESULT(564)
139 #define DDERR_NOEMULATION                      MAKE_DDHRESULT(565)
140 #define DDERR_REGIONTOOSMALL                   MAKE_DDHRESULT(566)
141 #define DDERR_CLIPPERISUSINGHWND               MAKE_DDHRESULT(567)
142 #define DDERR_NOCLIPPERATTACHED                MAKE_DDHRESULT(568)
143 #define DDERR_NOHWND                           MAKE_DDHRESULT(569)
144 #define DDERR_HWNDSUBCLASSED                   MAKE_DDHRESULT(570)
145 #define DDERR_HWNDALREADYSET                   MAKE_DDHRESULT(571)
146 #define DDERR_NOPALETTEATTACHED                MAKE_DDHRESULT(572)
147 #define DDERR_NOPALETTEHW                      MAKE_DDHRESULT(573)
148 #define DDERR_BLTFASTCANTCLIP                  MAKE_DDHRESULT(574)
149 #define DDERR_NOBLTHW                          MAKE_DDHRESULT(575)
150 #define DDERR_NODDROPSHW                       MAKE_DDHRESULT(576)
151 #define DDERR_OVERLAYNOTVISIBLE                MAKE_DDHRESULT(577)
152 #define DDERR_NOOVERLAYDEST                    MAKE_DDHRESULT(578)
153 #define DDERR_INVALIDPOSITION                  MAKE_DDHRESULT(579)
154 #define DDERR_NOTAOVERLAYSURFACE               MAKE_DDHRESULT(580)
155 #define DDERR_EXCLUSIVEMODEALREADYSET          MAKE_DDHRESULT(581)
156 #define DDERR_NOTFLIPPABLE                     MAKE_DDHRESULT(582)
157 #define DDERR_CANTDUPLICATE                    MAKE_DDHRESULT(583)
158 #define DDERR_NOTLOCKED                        MAKE_DDHRESULT(584)
159 #define DDERR_CANTCREATEDC                     MAKE_DDHRESULT(585)
160 #define DDERR_NODC                             MAKE_DDHRESULT(586)
161 #define DDERR_WRONGMODE                        MAKE_DDHRESULT(587)
162 #define DDERR_IMPLICITLYCREATED                MAKE_DDHRESULT(588)
163 #define DDERR_NOTPALETTIZED                    MAKE_DDHRESULT(589)
164 #define DDERR_UNSUPPORTEDMODE                  MAKE_DDHRESULT(590)
165 #define DDERR_NOMIPMAPHW                       MAKE_DDHRESULT(591)
166 #define DDERR_INVALIDSURFACETYPE               MAKE_DDHRESULT(592)
167 #define DDERR_NOOPTIMIZEHW                     MAKE_DDHRESULT(600)
168 #define DDERR_NOTLOADED                        MAKE_DDHRESULT(601)
169 #define DDERR_NOFOCUSWINDOW                    MAKE_DDHRESULT(602)
170 #define DDERR_NOTONMIPMAPSUBLEVEL              MAKE_DDHRESULT(603)
171 #define DDERR_DCALREADYCREATED                 MAKE_DDHRESULT(620)
172 #define DDERR_NONONLOCALVIDMEM                 MAKE_DDHRESULT(630)
173 #define DDERR_CANTPAGELOCK                     MAKE_DDHRESULT(640)
174 #define DDERR_CANTPAGEUNLOCK                   MAKE_DDHRESULT(660)
175 #define DDERR_NOTPAGELOCKED                    MAKE_DDHRESULT(680)
176 #define DDERR_MOREDATA                         MAKE_DDHRESULT(690)
177 #define DDERR_EXPIRED                          MAKE_DDHRESULT(691)
178 #define DDERR_TESTFINISHED                     MAKE_DDHRESULT(692)
179 #define DDERR_NEWMODE                          MAKE_DDHRESULT(693)
180 #define DDERR_D3DNOTINITIALIZED                MAKE_DDHRESULT(694)
181 #define DDERR_VIDEONOTACTIVE                   MAKE_DDHRESULT(695)
182 #define DDERR_NOMONITORINFORMATION             MAKE_DDHRESULT(696)
183 #define DDERR_NODRIVERSUPPORT                  MAKE_DDHRESULT(697)
184 #define DDERR_DEVICEDOESNTOWNSURFACE           MAKE_DDHRESULT(699)
185 #define DDERR_NOTINITIALIZED                   CO_E_NOTINITIALIZED
186 #define DD_OK                                  S_OK
187 #define DD_FALSE                               S_FALSE
188 #define DDENUMRET_CANCEL                       0
189 #define DDENUMRET_OK                           1
190 
191 #define DDENUM_ATTACHEDSECONDARYDEVICES        0x00000001
192 #define DDENUM_DETACHEDSECONDARYDEVICES        0x00000002
193 #define DDENUM_NONDISPLAYDEVICES               0x00000004
194 
195 #define REGSTR_KEY_DDHW_DESCRIPTION            "Description"
196 #define REGSTR_KEY_DDHW_DRIVERNAME             "DriverName"
197 #define REGSTR_PATH_DDHW                       "Hardware\\DirectDrawDrivers"
198 #define DDCREATE_HARDWAREONLY                  0x00000001
199 #define DDCREATE_EMULATIONONLY                 0x00000002
200 #define DD_ROP_SPACE                           (256/32)
201 #define MAX_DDDEVICEID_STRING                  512
202 #define DDGDI_GETHOSTIDENTIFIER                0x00000001
203 #define DDSGR_CALIBRATE                        0x00000001
204 #define DDSMT_ISTESTREQUIRED                   0x00000001
205 #define DDEM_MODEPASSED                        0x00000001
206 #define DDEM_MODEFAILED                        0x00000002
207 
208 #define DDSD_CAPS                              0x00000001
209 #define DDSD_HEIGHT                            0x00000002
210 #define DDSD_WIDTH                             0x00000004
211 #define DDSD_PITCH                             0x00000008
212 #define DDSD_BACKBUFFERCOUNT                   0x00000020
213 #define DDSD_ZBUFFERBITDEPTH                   0x00000040
214 #define DDSD_ALPHABITDEPTH                     0x00000080
215 #define DDSD_LPSURFACE                         0x00000800
216 #define DDSD_PIXELFORMAT                       0x00001000
217 #define DDSD_CKDESTOVERLAY                     0x00002000
218 #define DDSD_CKDESTBLT                         0x00004000
219 #define DDSD_CKSRCOVERLAY                      0x00008000
220 #define DDSD_CKSRCBLT                          0x00010000
221 #define DDSD_MIPMAPCOUNT                       0x00020000
222 #define DDSD_REFRESHRATE                       0x00040000
223 #define DDSD_LINEARSIZE                        0x00080000
224 #define DDSD_TEXTURESTAGE                      0x00100000
225 #define DDSD_FVF                               0x00200000
226 #define DDSD_SRCVBHANDLE                       0x00400000
227 #define DDSD_DEPTH                             0x00800000
228 #define DDSD_ALL                               0x00FFF9EE
229 
230 #define DDOSD_GUID                             0x00000001
231 #define DDOSD_COMPRESSION_RATIO                0x00000002
232 #define DDOSD_SCAPS                            0x00000004
233 #define DDOSD_OSCAPS                           0x00000008
234 #define DDOSD_ALL                              0x0000000f
235 #define DDOSDCAPS_OPTCOMPRESSED                0x00000001
236 #define DDOSDCAPS_OPTREORDERED                 0x00000002
237 #define DDOSDCAPS_MONOLITHICMIPMAP             0x00000004
238 #define DDOSDCAPS_VALIDSCAPS                   0x30004800
239 #define DDOSDCAPS_VALIDOSCAPS                  0x00000007
240 
241 #define DDCOLOR_BRIGHTNESS                     0x00000001
242 #define DDCOLOR_CONTRAST                       0x00000002
243 #define DDCOLOR_HUE                            0x00000004
244 #define DDCOLOR_SATURATION                     0x00000008
245 #define DDCOLOR_SHARPNESS                      0x00000010
246 #define DDCOLOR_GAMMA                          0x00000020
247 #define DDCOLOR_COLORENABLE                    0x00000040
248 
249 #define DDSCAPS_RESERVED1                      0x00000001
250 #define DDSCAPS_ALPHA                          0x00000002
251 #define DDSCAPS_BACKBUFFER                     0x00000004
252 #define DDSCAPS_COMPLEX                        0x00000008
253 #define DDSCAPS_FLIP                           0x00000010
254 #define DDSCAPS_FRONTBUFFER                    0x00000020
255 #define DDSCAPS_OFFSCREENPLAIN                 0x00000040
256 #define DDSCAPS_OVERLAY                        0x00000080
257 #define DDSCAPS_PALETTE                        0x00000100
258 #define DDSCAPS_PRIMARYSURFACE                 0x00000200
259 #define DDSCAPS_RESERVED3                      0x00000400
260 #define DDSCAPS_PRIMARYSURFACELEFT             0x00000000
261 #define DDSCAPS_SYSTEMMEMORY                   0x00000800
262 #define DDSCAPS_TEXTURE                        0x00001000
263 #define DDSCAPS_3DDEVICE                       0x00002000
264 #define DDSCAPS_VIDEOMEMORY                    0x00004000
265 #define DDSCAPS_VISIBLE                        0x00008000
266 #define DDSCAPS_WRITEONLY                      0x00010000
267 #define DDSCAPS_ZBUFFER                        0x00020000
268 #define DDSCAPS_OWNDC                          0x00040000
269 #define DDSCAPS_LIVEVIDEO                      0x00080000
270 #define DDSCAPS_HWCODEC                        0x00100000
271 #define DDSCAPS_MODEX                          0x00200000
272 #define DDSCAPS_MIPMAP                         0x00400000
273 #define DDSCAPS_RESERVED2                      0x00800000
274 #define DDSCAPS_ALLOCONLOAD                    0x04000000
275 #define DDSCAPS_VIDEOPORT                      0x08000000
276 #define DDSCAPS_LOCALVIDMEM                    0x10000000
277 #define DDSCAPS_NONLOCALVIDMEM                 0x20000000
278 #define DDSCAPS_STANDARDVGAMODE                0x40000000
279 #define DDSCAPS_OPTIMIZED                      0x80000000
280 
281 #define DDSCAPS2_HARDWAREDEINTERLACE           0x00000000
282 #define DDSCAPS2_RESERVED4                     0x00000002
283 #define DDSCAPS2_HINTDYNAMIC                   0x00000004
284 #define DDSCAPS2_HINTSTATIC                    0x00000008
285 #define DDSCAPS2_TEXTUREMANAGE                 0x00000010
286 #define DDSCAPS2_RESERVED1                     0x00000020
287 #define DDSCAPS2_RESERVED2                     0x00000040
288 #define DDSCAPS2_OPAQUE                        0x00000080
289 #define DDSCAPS2_HINTANTIALIASING              0x00000100
290 #define DDSCAPS2_CUBEMAP                       0x00000200
291 #define DDSCAPS2_CUBEMAP_POSITIVEX             0x00000400
292 #define DDSCAPS2_CUBEMAP_NEGATIVEX             0x00000800
293 #define DDSCAPS2_CUBEMAP_POSITIVEY             0x00001000
294 #define DDSCAPS2_CUBEMAP_NEGATIVEY             0x00002000
295 #define DDSCAPS2_CUBEMAP_POSITIVEZ             0x00004000
296 #define DDSCAPS2_CUBEMAP_NEGATIVEZ             0x00008000
297 #define DDSCAPS2_CUBEMAP_ALLFACES              ( DDSCAPS2_CUBEMAP_POSITIVEX |\
298                                                  DDSCAPS2_CUBEMAP_NEGATIVEX |\
299                                                  DDSCAPS2_CUBEMAP_POSITIVEY |\
300                                                  DDSCAPS2_CUBEMAP_NEGATIVEY |\
301                                                  DDSCAPS2_CUBEMAP_POSITIVEZ |\
302                                                  DDSCAPS2_CUBEMAP_NEGATIVEZ )
303 
304 #define DDSCAPS2_MIPMAPSUBLEVEL                0x00010000
305 #define DDSCAPS2_D3DTEXTUREMANAGE              0x00020000
306 #define DDSCAPS2_DONOTPERSIST                  0x00040000
307 #define DDSCAPS2_STEREOSURFACELEFT             0x00080000
308 #define DDSCAPS2_VOLUME                        0x00200000
309 #define DDSCAPS2_NOTUSERLOCKABLE               0x00400000
310 #define DDSCAPS2_POINTS                        0x00800000
311 
312 #define DDSCAPS2_RTPATCHES                     0x01000000
313 #define DDSCAPS2_NPATCHES                      0x02000000
314 #define DDSCAPS2_RESERVED3                     0x04000000
315 #define DDSCAPS2_DISCARDBACKBUFFER             0x10000000
316 #define DDSCAPS2_ENABLEALPHACHANNEL            0x20000000
317 #define DDSCAPS2_EXTENDEDFORMATPRIMARY         0x40000000
318 #define DDSCAPS2_ADDITIONALPRIMARY             0x80000000
319 
320 #define DDSCAPS3_MULTISAMPLE_MASK              0x0000001F
321 #define DDSCAPS3_MULTISAMPLE_QUALITY_MASK      0x000000E0
322 #define DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT     5
323 #define DDSCAPS3_RESERVED1                     0x00000100
324 #define DDSCAPS3_RESERVED2                     0x00000200
325 #define DDSCAPS3_LIGHTWEIGHTMIPMAP             0x00000400
326 #define DDSCAPS3_AUTOGENMIPMAP                 0x00000800
327 #define DDSCAPS3_DMAP                          0x00001000
328 
329 #define DDCAPS_3D                              0x00000001
330 #define DDCAPS_ALIGNBOUNDARYDEST               0x00000002
331 #define DDCAPS_ALIGNSIZEDEST                   0x00000004
332 #define DDCAPS_ALIGNBOUNDARYSRC                0x00000008
333 #define DDCAPS_ALIGNSIZESRC                    0x00000010
334 #define DDCAPS_ALIGNSTRIDE                     0x00000020
335 #define DDCAPS_BLT                             0x00000040
336 #define DDCAPS_BLTQUEUE                        0x00000080
337 #define DDCAPS_BLTFOURCC                       0x00000100
338 #define DDCAPS_BLTSTRETCH                      0x00000200
339 #define DDCAPS_GDI                             0x00000400
340 #define DDCAPS_OVERLAY                         0x00000800
341 #define DDCAPS_OVERLAYCANTCLIP                 0x00001000
342 #define DDCAPS_OVERLAYFOURCC                   0x00002000
343 #define DDCAPS_OVERLAYSTRETCH                  0x00004000
344 #define DDCAPS_PALETTE                         0x00008000
345 #define DDCAPS_PALETTEVSYNC                    0x00010000
346 #define DDCAPS_READSCANLINE                    0x00020000
347 #define DDCAPS_RESERVED1                       0x00040000
348 #define DDCAPS_VBI                             0x00080000
349 #define DDCAPS_ZBLTS                           0x00100000
350 #define DDCAPS_ZOVERLAYS                       0x00200000
351 #define DDCAPS_COLORKEY                        0x00400000
352 #define DDCAPS_ALPHA                           0x00800000
353 #define DDCAPS_COLORKEYHWASSIST                0x01000000
354 #define DDCAPS_NOHARDWARE                      0x02000000
355 #define DDCAPS_BLTCOLORFILL                    0x04000000
356 #define DDCAPS_BANKSWITCHED                    0x08000000
357 #define DDCAPS_BLTDEPTHFILL                    0x10000000
358 #define DDCAPS_CANCLIP                         0x20000000
359 #define DDCAPS_CANCLIPSTRETCHED                0x40000000
360 #define DDCAPS_CANBLTSYSMEM                    0x80000000
361 
362 #define DDCAPS2_CERTIFIED                      0x00000001
363 #define DDCAPS2_NO2DDURING3DSCENE              0x00000002
364 #define DDCAPS2_VIDEOPORT                      0x00000004
365 #define DDCAPS2_AUTOFLIPOVERLAY                0x00000008
366 #define DDCAPS2_CANBOBINTERLEAVED              0x00000010
367 #define DDCAPS2_CANBOBNONINTERLEAVED           0x00000020
368 #define DDCAPS2_COLORCONTROLOVERLAY            0x00000040
369 #define DDCAPS2_COLORCONTROLPRIMARY            0x00000080
370 #define DDCAPS2_CANDROPZ16BIT                  0x00000100
371 #define DDCAPS2_NONLOCALVIDMEM                 0x00000200
372 #define DDCAPS2_NONLOCALVIDMEMCAPS             0x00000400
373 #define DDCAPS2_NOPAGELOCKREQUIRED             0x00000800
374 #define DDCAPS2_WIDESURFACES                   0x00001000
375 #define DDCAPS2_CANFLIPODDEVEN                 0x00002000
376 #define DDCAPS2_CANBOBHARDWARE                 0x00004000
377 #define DDCAPS2_COPYFOURCC                     0x00008000
378 #define DDCAPS2_PRIMARYGAMMA                   0x00020000
379 #define DDCAPS2_CANRENDERWINDOWED              0x00080000
380 #define DDCAPS2_CANCALIBRATEGAMMA              0x00100000
381 #define DDCAPS2_FLIPINTERVAL                   0x00200000
382 #define DDCAPS2_FLIPNOVSYNC                    0x00400000
383 #define DDCAPS2_CANMANAGETEXTURE               0x00800000
384 #define DDCAPS2_TEXMANINNONLOCALVIDMEM         0x01000000
385 #define DDCAPS2_STEREO                         0x02000000
386 #define DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL    0x04000000
387 #define DDCAPS2_RESERVED1                      0x08000000
388 #define DDCAPS2_CANMANAGERESOURCE              0x10000000
389 #define DDCAPS2_DYNAMICTEXTURES                0x20000000
390 #define DDCAPS2_CANAUTOGENMIPMAP               0x40000000
391 
392 #define DDFXALPHACAPS_BLTALPHAEDGEBLEND        0x00000001
393 #define DDFXALPHACAPS_BLTALPHAPIXELS           0x00000002
394 #define DDFXALPHACAPS_BLTALPHAPIXELSNEG        0x00000004
395 #define DDFXALPHACAPS_BLTALPHASURFACES         0x00000008
396 #define DDFXALPHACAPS_BLTALPHASURFACESNEG      0x00000010
397 #define DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND    0x00000020
398 #define DDFXALPHACAPS_OVERLAYALPHAPIXELS       0x00000040
399 #define DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG    0x00000080
400 #define DDFXALPHACAPS_OVERLAYALPHASURFACES     0x00000100
401 #define DDFXALPHACAPS_OVERLAYALPHASURFACESNEG  0x00000200
402 
403 
404 #define DDFXCAPS_BLTALPHA                      0x00000001
405 #define DDFXCAPS_OVERLAYALPHA                  0x00000004
406 #define DDFXCAPS_OVERLAYARITHSTRETCHYN         0x00000008
407 #define DDFXCAPS_BLTARITHSTRETCHY              0x00000020
408 #define DDFXCAPS_BLTARITHSTRETCHYN             0x00000010
409 #define DDFXCAPS_BLTMIRRORLEFTRIGHT            0x00000040
410 #define DDFXCAPS_BLTMIRRORUPDOWN               0x00000080
411 #define DDFXCAPS_BLTROTATION                   0x00000100
412 #define DDFXCAPS_BLTROTATION90                 0x00000200
413 #define DDFXCAPS_BLTSHRINKX                    0x00000400
414 #define DDFXCAPS_BLTSHRINKXN                   0x00000800
415 #define DDFXCAPS_BLTSHRINKY                    0x00001000
416 #define DDFXCAPS_BLTSHRINKYN                   0x00002000
417 #define DDFXCAPS_BLTSTRETCHX                   0x00004000
418 #define DDFXCAPS_BLTSTRETCHXN                  0x00008000
419 #define DDFXCAPS_BLTSTRETCHY                   0x00010000
420 #define DDFXCAPS_BLTSTRETCHYN                  0x00020000
421 #define DDFXCAPS_OVERLAYARITHSTRETCHY          0x00040000
422 #define DDFXCAPS_OVERLAYSHRINKX                0x00080000
423 #define DDFXCAPS_OVERLAYSHRINKXN               0x00100000
424 #define DDFXCAPS_OVERLAYSHRINKY                0x00200000
425 #define DDFXCAPS_OVERLAYSHRINKYN               0x00400000
426 #define DDFXCAPS_OVERLAYSTRETCHX               0x00800000
427 #define DDFXCAPS_OVERLAYSTRETCHXN              0x01000000
428 #define DDFXCAPS_OVERLAYSTRETCHY               0x02000000
429 #define DDFXCAPS_OVERLAYSTRETCHYN              0x04000000
430 #define DDFXCAPS_OVERLAYMIRRORLEFTRIGHT        0x08000000
431 #define DDFXCAPS_OVERLAYMIRRORUPDOWN           0x10000000
432 #define DDFXCAPS_OVERLAYDEINTERLACE            0x20000000
433 #define DDFXCAPS_BLTFILTER                     DDFXCAPS_BLTARITHSTRETCHY
434 #define DDFXCAPS_OVERLAYFILTER                 DDFXCAPS_OVERLAYARITHSTRETCHY
435 
436 
437   #define DDSVCAPS_RESERVED1                     0x00000001
438   #define DDSVCAPS_RESERVED2                     0x00000002
439   #define DDSVCAPS_RESERVED3                     0x00000004
440   #define DDSVCAPS_RESERVED4                     0x00000008
441 /* rember that DDSVCAPS_ENIGMA is same as DDSVCAPS_RESERVED1 */
442   #define DDSVCAPS_ENIGMA                        0x00000001
443 /* rember that DDSVCAPS_FLICKER is same as DDSVCAPS_RESERVED2 */
444   #define DDSVCAPS_FLICKER                       0x00000002
445 /* rember that DDSVCAPS_REDBLUE is same as DDSVCAPS_RESERVED3 */
446   #define DDSVCAPS_REDBLUE                       0x00000004
447 /* rember that DDSVCAPS_SPLIT is same as DDSVCAPS_RESERVED4 */
448   #define DDSVCAPS_SPLIT                         0x00000008
449 
450 #define DDSVCAPS_STEREOSEQUENTIAL              0x00000010
451 
452 #define DDPCAPS_INITIALIZE                     0x00000000
453 #define DDPCAPS_4BIT                           0x00000001
454 #define DDPCAPS_8BITENTRIES                    0x00000002
455 #define DDPCAPS_8BIT                           0x00000004
456 #define DDPCAPS_PRIMARYSURFACE                 0x00000010
457 #define DDPCAPS_PRIMARYSURFACELEFT             0x00000020
458 #define DDPCAPS_ALLOW256                       0x00000040
459 #define DDPCAPS_VSYNC                          0x00000080
460 #define DDPCAPS_1BIT                           0x00000100
461 #define DDPCAPS_2BIT                           0x00000200
462 #define DDPCAPS_ALPHA                          0x00000400
463 
464 #define DDSPD_IUNKNOWNPOINTER                  0x00000001
465 #define DDSPD_VOLATILE                         0x00000002
466 
467 #define DDBD_1                                 0x00004000
468 #define DDBD_2                                 0x00002000
469 #define DDBD_4                                 0x00001000
470 #define DDBD_8                                 0x00000800
471 #define DDBD_16                                0x00000400
472 #define DDBD_24                                0x00000200
473 #define DDBD_32                                0x00000100
474 
475 #define DDCKEY_COLORSPACE                      0x00000001
476 #define DDCKEY_DESTBLT                         0x00000002
477 #define DDCKEY_DESTOVERLAY                     0x00000004
478 #define DDCKEY_SRCBLT                          0x00000008
479 #define DDCKEY_SRCOVERLAY                      0x00000010
480 
481 #define DDCKEYCAPS_DESTBLT                     0x00000001
482 #define DDCKEYCAPS_DESTBLTCLRSPACE             0x00000002
483 #define DDCKEYCAPS_DESTBLTCLRSPACEYUV          0x00000004
484 #define DDCKEYCAPS_DESTBLTYUV                  0x00000008
485 #define DDCKEYCAPS_DESTOVERLAY                 0x00000010
486 #define DDCKEYCAPS_DESTOVERLAYCLRSPACE         0x00000020
487 #define DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV      0x00000040
488 #define DDCKEYCAPS_DESTOVERLAYONEACTIVE        0x00000080
489 #define DDCKEYCAPS_DESTOVERLAYYUV              0x00000100
490 #define DDCKEYCAPS_SRCBLT                      0x00000200
491 #define DDCKEYCAPS_SRCBLTCLRSPACE              0x00000400
492 #define DDCKEYCAPS_SRCBLTCLRSPACEYUV           0x00000800
493 #define DDCKEYCAPS_SRCBLTYUV                   0x00001000
494 #define DDCKEYCAPS_SRCOVERLAY                  0x00002000
495 #define DDCKEYCAPS_SRCOVERLAYCLRSPACE          0x00004000
496 #define DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV       0x00008000
497 #define DDCKEYCAPS_SRCOVERLAYONEACTIVE         0x00010000
498 #define DDCKEYCAPS_SRCOVERLAYYUV               0x00020000
499 #define DDCKEYCAPS_NOCOSTOVERLAY               0x00040000
500 
501 #define DDPF_ALPHAPIXELS                       0x00000001
502 #define DDPF_ALPHA                             0x00000002
503 #define DDPF_FOURCC                            0x00000004
504 #define DDPF_PALETTEINDEXED4                   0x00000008
505 #define DDPF_PALETTEINDEXEDTO8                 0x00000010
506 #define DDPF_PALETTEINDEXED8                   0x00000020
507 #define DDPF_RGB                               0x00000040
508 #define DDPF_COMPRESSED                        0x00000080
509 #define DDPF_RGBTOYUV                          0x00000100
510 #define DDPF_YUV                               0x00000200
511 #define DDPF_ZBUFFER                           0x00000400
512 #define DDPF_PALETTEINDEXED1                   0x00000800
513 #define DDPF_PALETTEINDEXED2                   0x00001000
514 #define DDPF_ZPIXELS                           0x00002000
515 #define DDPF_STENCILBUFFER                     0x00004000
516 #define DDPF_ALPHAPREMULT                      0x00008000
517 #define DDPF_LUMINANCE                         0x00020000
518 #define DDPF_BUMPLUMINANCE                     0x00040000
519 #define DDPF_BUMPDUDV                          0x00080000
520 
521 #define DDENUMSURFACES_ALL                     0x00000001
522 #define DDENUMSURFACES_MATCH                   0x00000002
523 #define DDENUMSURFACES_NOMATCH                 0x00000004
524 #define DDENUMSURFACES_CANBECREATED            0x00000008
525 #define DDENUMSURFACES_DOESEXIST               0x00000010
526 
527 #define DDSDM_STANDARDVGAMODE                  0x00000001
528 
529 #define DDEDM_REFRESHRATES                     0x00000001
530 #define DDEDM_STANDARDVGAMODES                 0x00000002
531 
532 #define DDSCL_FULLSCREEN                       0x00000001
533 #define DDSCL_ALLOWREBOOT                      0x00000002
534 #define DDSCL_NOWINDOWCHANGES                  0x00000004
535 #define DDSCL_NORMAL                           0x00000008
536 #define DDSCL_EXCLUSIVE                        0x00000010
537 #define DDSCL_ALLOWMODEX                       0x00000040
538 #define DDSCL_SETFOCUSWINDOW                   0x00000080
539 #define DDSCL_SETDEVICEWINDOW                  0x00000100
540 #define DDSCL_CREATEDEVICEWINDOW               0x00000200
541 #define DDSCL_MULTITHREADED                    0x00000400
542 #define DDSCL_FPUSETUP                         0x00000800
543 #define DDSCL_FPUPRESERVE                      0x00001000
544 
545 #define DDBLT_ALPHADEST                        0x00000001
546 #define DDBLT_ALPHADESTCONSTOVERRIDE           0x00000002
547 #define DDBLT_ALPHADESTNEG                     0x00000004
548 #define DDBLT_ALPHADESTSURFACEOVERRIDE         0x00000008
549 #define DDBLT_ALPHAEDGEBLEND                   0x00000010
550 #define DDBLT_ALPHASRC                         0x00000020
551 #define DDBLT_ALPHASRCCONSTOVERRIDE            0x00000040
552 #define DDBLT_ALPHASRCNEG                      0x00000080
553 #define DDBLT_ALPHASRCSURFACEOVERRIDE          0x00000100
554 #define DDBLT_ASYNC                            0x00000200
555 #define DDBLT_COLORFILL                        0x00000400
556 #define DDBLT_DDFX                             0x00000800
557 #define DDBLT_DDROPS                           0x00001000
558 #define DDBLT_KEYDEST                          0x00002000
559 #define DDBLT_KEYDESTOVERRIDE                  0x00004000
560 #define DDBLT_KEYSRC                           0x00008000
561 #define DDBLT_KEYSRCOVERRIDE                   0x00010000
562 #define DDBLT_ROP                              0x00020000
563 #define DDBLT_ROTATIONANGLE                    0x00040000
564 #define DDBLT_ZBUFFER                          0x00080000
565 #define DDBLT_ZBUFFERDESTCONSTOVERRIDE         0x00100000
566 #define DDBLT_ZBUFFERDESTOVERRIDE              0x00200000
567 #define DDBLT_ZBUFFERSRCCONSTOVERRIDE          0x00400000
568 #define DDBLT_ZBUFFERSRCOVERRIDE               0x00800000
569 #define DDBLT_WAIT                             0x01000000
570 #define DDBLT_DEPTHFILL                        0x02000000
571 #define DDBLT_DONOTWAIT                        0x08000000
572 #define DDBLT_PRESENTATION                     0x10000000
573 #define DDBLT_LAST_PRESENTATION                0x20000000
574 #define DDBLT_EXTENDED_FLAGS                   0x40000000
575 #define DDBLT_EXTENDED_LINEAR_CONTENT          0x00000004
576 
577 #define DDBLTFAST_NOCOLORKEY                   0x00000000
578 #define DDBLTFAST_SRCCOLORKEY                  0x00000001
579 #define DDBLTFAST_DESTCOLORKEY                 0x00000002
580 #define DDBLTFAST_WAIT                         0x00000010
581 #define DDBLTFAST_DONOTWAIT                    0x00000020
582 
583 #define DDFLIP_WAIT                            0x00000001
584 #define DDFLIP_EVEN                            0x00000002
585 #define DDFLIP_ODD                             0x00000004
586 #define DDFLIP_NOVSYNC                         0x00000008
587 #define DDFLIP_STEREO                          0x00000010
588 #define DDFLIP_DONOTWAIT                       0x00000020
589 #define DDFLIP_INTERVAL2                       0x02000000
590 #define DDFLIP_INTERVAL3                       0x03000000
591 #define DDFLIP_INTERVAL4                       0x04000000
592 
593 
594 #define DDOVER_ALPHADEST                       0x00000001
595 #define DDOVER_ALPHADESTCONSTOVERRIDE          0x00000002
596 #define DDOVER_ALPHADESTNEG                    0x00000004
597 #define DDOVER_ALPHADESTSURFACEOVERRIDE        0x00000008
598 #define DDOVER_ALPHAEDGEBLEND                  0x00000010
599 #define DDOVER_ALPHASRC                        0x00000020
600 #define DDOVER_ALPHASRCCONSTOVERRIDE           0x00000040
601 #define DDOVER_ALPHASRCNEG                     0x00000080
602 #define DDOVER_ALPHASRCSURFACEOVERRIDE         0x00000100
603 #define DDOVER_HIDE                            0x00000200
604 #define DDOVER_KEYDEST                         0x00000400
605 #define DDOVER_KEYDESTOVERRIDE                 0x00000800
606 #define DDOVER_KEYSRC                          0x00001000
607 #define DDOVER_KEYSRCOVERRIDE                  0x00002000
608 #define DDOVER_SHOW                            0x00004000
609 #define DDOVER_ADDDIRTYRECT                    0x00008000
610 #define DDOVER_REFRESHDIRTYRECTS               0x00010000
611 #define DDOVER_REFRESHALL                      0x00020000
612 #define DDOVER_DDFX                            0x00080000
613 #define DDOVER_AUTOFLIP                        0x00100000
614 #define DDOVER_BOB                             0x00200000
615 #define DDOVER_OVERRIDEBOBWEAVE                0x00400000
616 #define DDOVER_INTERLEAVED                     0x00800000
617 #define DDOVER_BOBHARDWARE                     0x01000000
618 #define DDOVER_ARGBSCALEFACTORS                0x02000000
619 #define DDOVER_DEGRADEARGBSCALING              0x04000000
620 
621 #define DDLOCK_SURFACEMEMORYPTR                0x00000000
622 #define DDLOCK_WAIT                            0x00000001
623 #define DDLOCK_EVENT                           0x00000002
624 #define DDLOCK_READONLY                        0x00000010
625 #define DDLOCK_WRITEONLY                       0x00000020
626 #define DDLOCK_NOSYSLOCK                       0x00000800
627 #define DDLOCK_NOOVERWRITE                     0x00001000
628 #define DDLOCK_DISCARDCONTENTS                 0x00002000
629 #define DDLOCK_OKTOSWAP                        0x00002000
630 #define DDLOCK_DONOTWAIT                       0x00004000
631 #define DDLOCK_HASVOLUMETEXTUREBOXRECT         0x00008000
632 #define DDLOCK_NODIRTYUPDATE                   0x00010000
633 
634 #define DDBLTFX_ARITHSTRETCHY                  0x00000001
635 #define DDBLTFX_MIRRORLEFTRIGHT                0x00000002
636 #define DDBLTFX_MIRRORUPDOWN                   0x00000004
637 #define DDBLTFX_NOTEARING                      0x00000008
638 #define DDBLTFX_ROTATE180                      0x00000010
639 #define DDBLTFX_ROTATE270                      0x00000020
640 #define DDBLTFX_ROTATE90                       0x00000040
641 #define DDBLTFX_ZBUFFERRANGE                   0x00000080
642 #define DDBLTFX_ZBUFFERBASEDEST                0x00000100
643 
644 #define DDOVERFX_ARITHSTRETCHY                 0x00000001
645 #define DDOVERFX_MIRRORLEFTRIGHT               0x00000002
646 #define DDOVERFX_MIRRORUPDOWN                  0x00000004
647 #define DDOVERFX_DEINTERLACE                   0x00000008
648 
649 #define DDWAITVB_BLOCKBEGIN                    0x00000001
650 #define DDWAITVB_BLOCKBEGINEVENT               0x00000002
651 #define DDWAITVB_BLOCKEND                      0x00000004
652 
653 #define DDGFS_CANFLIP                          0x00000001
654 #define DDGFS_ISFLIPDONE                       0x00000002
655 
656 #define DDGBS_CANBLT                           0x00000001
657 #define DDGBS_ISBLTDONE                        0x00000002
658 
659 #define DDENUMOVERLAYZ_BACKTOFRONT             0x00000000
660 #define DDENUMOVERLAYZ_FRONTTOBACK             0x00000001
661 
662 #define DDOVERZ_SENDTOFRONT                    0x00000000
663 #define DDOVERZ_SENDTOBACK                     0x00000001
664 #define DDOVERZ_MOVEFORWARD                    0x00000002
665 #define DDOVERZ_MOVEBACKWARD                   0x00000003
666 #define DDOVERZ_INSERTINFRONTOF                0x00000004
667 #define DDOVERZ_INSERTINBACKOF                 0x00000005
668 
669 #define GET_WHQL_YEAR  (dwWHQLLevel)  ((dwWHQLLevel)/0x10000)
670 #define GET_WHQL_MONTH (dwWHQLLevel)  (((dwWHQLLevel)/0x100)&0x00ff)
671 #define GET_WHQL_DAY   (dwWHQLLevel)  ((dwWHQLLevel)&0xff)
672 
673 #ifndef MAKEFOURCC
674 #define MAKEFOURCC(c0,c1,c2,c3)  \
675     ((DWORD)(BYTE)(c0)|((DWORD)(BYTE)(c1)<<8)|((DWORD)(BYTE)(c2)<< 16)|((DWORD)(BYTE)(c3)<<24))
676 #endif
677 
678 #define FOURCC_DXT1 (MAKEFOURCC('D','X','T','1'))
679 #define FOURCC_DXT2 (MAKEFOURCC('D','X','T','2'))
680 #define FOURCC_DXT3 (MAKEFOURCC('D','X','T','3'))
681 #define FOURCC_DXT4 (MAKEFOURCC('D','X','T','4'))
682 #define FOURCC_DXT5 (MAKEFOURCC('D','X','T','5'))
683 
684 #if defined(_WIN32)  &&  !defined(_NO_COM)
685 DEFINE_GUID( CLSID_DirectDraw,            0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 );
686 DEFINE_GUID( CLSID_DirectDraw7,           0x3C305196,0x50DB,0x11D3,0x9C,0xFE,0x00,0xC0,0x4F,0xD9,0x30,0xC5 );
687 DEFINE_GUID( CLSID_DirectDrawClipper,     0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 );
688 DEFINE_GUID( IID_IDirectDraw,             0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
689 DEFINE_GUID( IID_IDirectDraw2,            0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 );
690 DEFINE_GUID( IID_IDirectDraw3,            0x618F8AD4,0x8B7A,0x11D0,0x8F,0xCC,0x00,0xC0,0x4F,0xD9,0x18,0x9D );
691 DEFINE_GUID( IID_IDirectDraw4,            0x9C59509A,0x39BD,0x11D1,0x8C,0x4A,0x00,0xC0,0x4F,0xD9,0x30,0xC5 );
692 DEFINE_GUID( IID_IDirectDraw7,            0x15E65EC0,0x3B9C,0x11D2,0xB9,0x2F,0x00,0x60,0x97,0x97,0xEA,0x5B );
693 DEFINE_GUID( IID_IDirectDrawSurface,      0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
694 DEFINE_GUID( IID_IDirectDrawSurface2,     0x57805885,0x6EEC,0x11CF,0x94,0x41,0xA8,0x23,0x03,0xC1,0x0E,0x27 );
695 DEFINE_GUID( IID_IDirectDrawSurface3,     0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB );
696 DEFINE_GUID( IID_IDirectDrawSurface4,     0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B );
697 DEFINE_GUID( IID_IDirectDrawSurface7,     0x06675A80,0x3B9B,0x11D2,0xB9,0x2F,0x00,0x60,0x97,0x97,0xEA,0x5B );
698 DEFINE_GUID( IID_IDirectDrawPalette,      0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
699 DEFINE_GUID( IID_IDirectDrawClipper,      0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
700 DEFINE_GUID( IID_IDirectDrawColorControl, 0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 );
701 DEFINE_GUID( IID_IDirectDrawGammaControl, 0x69C11C3E,0xB46B,0x11D1,0xAD,0x7A,0x00,0xC0,0x4F,0xC2,0x9B,0x4E );
702 #endif
703 
704 
705 struct IDirectDraw;
706 struct IDirectDrawSurface;
707 struct IDirectDrawPalette;
708 struct IDirectDrawClipper;
709 
710 typedef struct IDirectDraw              *LPDIRECTDRAW;
711 typedef struct IDirectDraw2             *LPDIRECTDRAW2;
712 typedef struct IDirectDraw3             *LPDIRECTDRAW3;
713 typedef struct IDirectDraw4             *LPDIRECTDRAW4;
714 typedef struct IDirectDraw7             *LPDIRECTDRAW7;
715 typedef struct IDirectDrawSurface       *LPDIRECTDRAWSURFACE;
716 typedef struct IDirectDrawSurface2      *LPDIRECTDRAWSURFACE2;
717 typedef struct IDirectDrawSurface3      *LPDIRECTDRAWSURFACE3;
718 typedef struct IDirectDrawSurface4      *LPDIRECTDRAWSURFACE4;
719 typedef struct IDirectDrawSurface7      *LPDIRECTDRAWSURFACE7;
720 typedef struct IDirectDrawPalette       *LPDIRECTDRAWPALETTE;
721 typedef struct IDirectDrawClipper       *LPDIRECTDRAWCLIPPER;
722 typedef struct IDirectDrawColorControl  *LPDIRECTDRAWCOLORCONTROL;
723 typedef struct IDirectDrawGammaControl  *LPDIRECTDRAWGAMMACONTROL;
724 
725 typedef struct _DDSCAPS
726 {
727    DWORD dwCaps;
728 } DDSCAPS, *LPDDSCAPS;
729 
730 typedef struct _DDSCAPS2
731 {
732    DWORD dwCaps;
733    DWORD dwCaps2;
734    DWORD dwCaps3;
735    union
736    {
737       DWORD dwCaps4;
738       DWORD dwVolumeDepth;
739    } DUMMYUNIONNAMEN(1);
740 } DDSCAPS2, *LPDDSCAPS2;
741 
742 typedef struct _DDCAPS_DX1
743 {
744    DWORD dwSize;
745    DWORD dwCaps;
746    DWORD dwCaps2;
747    DWORD dwCKeyCaps;
748    DWORD dwFXCaps;
749    DWORD dwFXAlphaCaps;
750    DWORD dwPalCaps;
751    DWORD dwSVCaps;
752    DWORD dwAlphaBltConstBitDepths;
753    DWORD dwAlphaBltPixelBitDepths;
754    DWORD dwAlphaBltSurfaceBitDepths;
755    DWORD dwAlphaOverlayConstBitDepths;
756    DWORD dwAlphaOverlayPixelBitDepths;
757    DWORD dwAlphaOverlaySurfaceBitDepths;
758    DWORD dwZBufferBitDepths;
759    DWORD dwVidMemTotal;
760    DWORD dwVidMemFree;
761    DWORD dwMaxVisibleOverlays;
762    DWORD dwCurrVisibleOverlays;
763    DWORD dwNumFourCCCodes;
764    DWORD dwAlignBoundarySrc;
765    DWORD dwAlignSizeSrc;
766    DWORD dwAlignBoundaryDest;
767    DWORD dwAlignSizeDest;
768    DWORD dwAlignStrideAlign;
769    DWORD dwRops[DD_ROP_SPACE];
770    DDSCAPS ddsCaps;
771    DWORD dwMinOverlayStretch;
772    DWORD dwMaxOverlayStretch;
773    DWORD dwMinLiveVideoStretch;
774    DWORD dwMaxLiveVideoStretch;
775    DWORD dwMinHwCodecStretch;
776    DWORD dwMaxHwCodecStretch;
777    DWORD dwReserved1;
778    DWORD dwReserved2;
779    DWORD dwReserved3;
780 } DDCAPS_DX1, *LPDDCAPS_DX1;
781 
782 typedef struct _DDCAPS_DX3
783 {
784    DWORD dwSize;
785    DWORD dwCaps;
786    DWORD dwCaps2;
787    DWORD dwCKeyCaps;
788    DWORD dwFXCaps;
789    DWORD dwFXAlphaCaps;
790    DWORD dwPalCaps;
791    DWORD dwSVCaps;
792    DWORD dwAlphaBltConstBitDepths;
793    DWORD dwAlphaBltPixelBitDepths;
794    DWORD dwAlphaBltSurfaceBitDepths;
795    DWORD dwAlphaOverlayConstBitDepths;
796    DWORD dwAlphaOverlayPixelBitDepths;
797    DWORD dwAlphaOverlaySurfaceBitDepths;
798    DWORD dwZBufferBitDepths;
799    DWORD dwVidMemTotal;
800    DWORD dwVidMemFree;
801    DWORD dwMaxVisibleOverlays;
802    DWORD dwCurrVisibleOverlays;
803    DWORD dwNumFourCCCodes;
804    DWORD dwAlignBoundarySrc;
805    DWORD dwAlignSizeSrc;
806    DWORD dwAlignBoundaryDest;
807    DWORD dwAlignSizeDest;
808    DWORD dwAlignStrideAlign;
809    DWORD dwRops[DD_ROP_SPACE];
810    DDSCAPS ddsCaps;
811    DWORD dwMinOverlayStretch;
812    DWORD dwMaxOverlayStretch;
813    DWORD dwMinLiveVideoStretch;
814    DWORD dwMaxLiveVideoStretch;
815    DWORD dwMinHwCodecStretch;
816    DWORD dwMaxHwCodecStretch;
817    DWORD dwReserved1;
818    DWORD dwReserved2;
819    DWORD dwReserved3;
820    DWORD   dwSVBCaps;
821    DWORD   dwSVBCKeyCaps;
822    DWORD   dwSVBFXCaps;
823    DWORD   dwSVBRops[DD_ROP_SPACE];
824    DWORD   dwVSBCaps;
825    DWORD   dwVSBCKeyCaps;
826    DWORD   dwVSBFXCaps;
827    DWORD   dwVSBRops[DD_ROP_SPACE];
828    DWORD   dwSSBCaps;
829    DWORD   dwSSBCKeyCaps;
830    DWORD   dwSSBFXCaps;
831    DWORD   dwSSBRops[DD_ROP_SPACE];
832    DWORD   dwReserved4;
833    DWORD   dwReserved5;
834    DWORD   dwReserved6;
835 } DDCAPS_DX3, *LPDDCAPS_DX3;
836 
837 typedef struct _DDCAPS_DX5
838 {
839    DWORD dwSize;
840    DWORD dwCaps;
841    DWORD dwCaps2;
842    DWORD dwCKeyCaps;
843    DWORD dwFXCaps;
844    DWORD dwFXAlphaCaps;
845    DWORD dwPalCaps;
846    DWORD dwSVCaps;
847    DWORD dwAlphaBltConstBitDepths;
848    DWORD dwAlphaBltPixelBitDepths;
849    DWORD dwAlphaBltSurfaceBitDepths;
850    DWORD dwAlphaOverlayConstBitDepths;
851    DWORD dwAlphaOverlayPixelBitDepths;
852    DWORD dwAlphaOverlaySurfaceBitDepths;
853    DWORD dwZBufferBitDepths;
854    DWORD dwVidMemTotal;
855    DWORD dwVidMemFree;
856    DWORD dwMaxVisibleOverlays;
857    DWORD dwCurrVisibleOverlays;
858    DWORD dwNumFourCCCodes;
859    DWORD dwAlignBoundarySrc;
860    DWORD dwAlignSizeSrc;
861    DWORD dwAlignBoundaryDest;
862    DWORD dwAlignSizeDest;
863    DWORD dwAlignStrideAlign;
864    DWORD dwRops[DD_ROP_SPACE];
865    DDSCAPS ddsCaps;
866    DWORD dwMinOverlayStretch;
867    DWORD dwMaxOverlayStretch;
868    DWORD dwMinLiveVideoStretch;
869    DWORD dwMaxLiveVideoStretch;
870    DWORD dwMinHwCodecStretch;
871    DWORD dwMaxHwCodecStretch;
872    DWORD dwReserved1;
873    DWORD dwReserved2;
874    DWORD dwReserved3;
875    DWORD dwSVBCaps;
876    DWORD dwSVBCKeyCaps;
877    DWORD dwSVBFXCaps;
878    DWORD dwSVBRops[DD_ROP_SPACE];
879    DWORD dwVSBCaps;
880    DWORD dwVSBCKeyCaps;
881    DWORD dwVSBFXCaps;
882    DWORD dwVSBRops[DD_ROP_SPACE];
883    DWORD dwSSBCaps;
884    DWORD dwSSBCKeyCaps;
885    DWORD dwSSBFXCaps;
886    DWORD dwSSBRops[DD_ROP_SPACE];
887    DWORD dwMaxVideoPorts;
888    DWORD dwCurrVideoPorts;
889    DWORD dwSVBCaps2;
890    DWORD dwNLVBCaps;
891    DWORD dwNLVBCaps2;
892    DWORD dwNLVBCKeyCaps;
893    DWORD dwNLVBFXCaps;
894    DWORD dwNLVBRops[DD_ROP_SPACE];
895 } DDCAPS_DX5, *LPDDCAPS_DX5;
896 
897 typedef struct _DDCAPS_DX6
898 {
899    DWORD dwSize;
900    DWORD dwCaps;
901    DWORD dwCaps2;
902    DWORD dwCKeyCaps;
903    DWORD dwFXCaps;
904    DWORD dwFXAlphaCaps;
905    DWORD dwPalCaps;
906    DWORD dwSVCaps;
907    DWORD dwAlphaBltConstBitDepths;
908    DWORD dwAlphaBltPixelBitDepths;
909    DWORD dwAlphaBltSurfaceBitDepths;
910    DWORD dwAlphaOverlayConstBitDepths;
911    DWORD dwAlphaOverlayPixelBitDepths;
912    DWORD dwAlphaOverlaySurfaceBitDepths;
913    DWORD dwZBufferBitDepths;
914    DWORD dwVidMemTotal;
915    DWORD dwVidMemFree;
916    DWORD dwMaxVisibleOverlays;
917    DWORD dwCurrVisibleOverlays;
918    DWORD dwNumFourCCCodes;
919    DWORD dwAlignBoundarySrc;
920    DWORD dwAlignSizeSrc;
921    DWORD dwAlignBoundaryDest;
922    DWORD dwAlignSizeDest;
923    DWORD dwAlignStrideAlign;
924    DWORD dwRops[DD_ROP_SPACE];
925    DDSCAPS ddsOldCaps;
926    DWORD dwMinOverlayStretch;
927    DWORD dwMaxOverlayStretch;
928    DWORD dwMinLiveVideoStretch;
929    DWORD dwMaxLiveVideoStretch;
930    DWORD dwMinHwCodecStretch;
931    DWORD dwMaxHwCodecStretch;
932    DWORD dwReserved1;
933    DWORD dwReserved2;
934    DWORD dwReserved3;
935    DWORD dwSVBCaps;
936    DWORD dwSVBCKeyCaps;
937    DWORD dwSVBFXCaps;
938    DWORD dwSVBRops[DD_ROP_SPACE];
939    DWORD dwVSBCaps;
940    DWORD dwVSBCKeyCaps;
941    DWORD dwVSBFXCaps;
942    DWORD dwVSBRops[DD_ROP_SPACE];
943    DWORD dwSSBCaps;
944    DWORD dwSSBCKeyCaps;
945    DWORD dwSSBFXCaps;
946    DWORD dwSSBRops[DD_ROP_SPACE];
947    DWORD dwMaxVideoPorts;
948    DWORD dwCurrVideoPorts;
949    DWORD dwSVBCaps2;
950    DWORD dwNLVBCaps;
951    DWORD dwNLVBCaps2;
952    DWORD dwNLVBCKeyCaps;
953    DWORD dwNLVBFXCaps;
954    DWORD dwNLVBRops[DD_ROP_SPACE];
955    DDSCAPS2 ddsCaps;
956 } DDCAPS_DX6, *LPDDCAPS_DX6;
957 
958 typedef struct _DDCAPS_DX7
959 {
960    DWORD dwSize;
961    DWORD dwCaps;
962    DWORD dwCaps2;
963    DWORD dwCKeyCaps;
964    DWORD dwFXCaps;
965    DWORD dwFXAlphaCaps;
966    DWORD dwPalCaps;
967    DWORD dwSVCaps;
968    DWORD dwAlphaBltConstBitDepths;
969    DWORD dwAlphaBltPixelBitDepths;
970    DWORD dwAlphaBltSurfaceBitDepths;
971    DWORD dwAlphaOverlayConstBitDepths;
972    DWORD dwAlphaOverlayPixelBitDepths;
973    DWORD dwAlphaOverlaySurfaceBitDepths;
974    DWORD dwZBufferBitDepths;
975    DWORD dwVidMemTotal;
976    DWORD dwVidMemFree;
977    DWORD dwMaxVisibleOverlays;
978    DWORD dwCurrVisibleOverlays;
979    DWORD dwNumFourCCCodes;
980    DWORD dwAlignBoundarySrc;
981    DWORD dwAlignSizeSrc;
982    DWORD dwAlignBoundaryDest;
983    DWORD dwAlignSizeDest;
984    DWORD dwAlignStrideAlign;
985    DWORD dwRops[DD_ROP_SPACE];
986    DDSCAPS ddsOldCaps;
987    DWORD dwMinOverlayStretch;
988    DWORD dwMaxOverlayStretch;
989    DWORD dwMinLiveVideoStretch;
990    DWORD dwMaxLiveVideoStretch;
991    DWORD dwMinHwCodecStretch;
992    DWORD dwMaxHwCodecStretch;
993    DWORD dwReserved1;
994    DWORD dwReserved2;
995    DWORD dwReserved3;
996    DWORD dwSVBCaps;
997    DWORD dwSVBCKeyCaps;
998    DWORD dwSVBFXCaps;
999    DWORD dwSVBRops[DD_ROP_SPACE];
1000    DWORD dwVSBCaps;
1001    DWORD dwVSBCKeyCaps;
1002    DWORD dwVSBFXCaps;
1003    DWORD dwVSBRops[DD_ROP_SPACE];
1004    DWORD dwSSBCaps;
1005    DWORD dwSSBCKeyCaps;
1006    DWORD dwSSBFXCaps;
1007    DWORD dwSSBRops[DD_ROP_SPACE];
1008    DWORD dwMaxVideoPorts;
1009    DWORD dwCurrVideoPorts;
1010    DWORD dwSVBCaps2;
1011    DWORD dwNLVBCaps;
1012    DWORD dwNLVBCaps2;
1013    DWORD dwNLVBCKeyCaps;
1014    DWORD dwNLVBFXCaps;
1015    DWORD dwNLVBRops[DD_ROP_SPACE];
1016    DDSCAPS2 ddsCaps;
1017 } DDCAPS_DX7, *LPDDCAPS_DX7;
1018 
1019 #if DIRECTDRAW_VERSION<=0x300
1020    typedef DDCAPS_DX3 DDCAPS;
1021 #elif DIRECTDRAW_VERSION<=0x500
1022    typedef DDCAPS_DX5 DDCAPS;
1023 #elif DIRECTDRAW_VERSION<=0x600
1024    typedef DDCAPS_DX6 DDCAPS;
1025 #else
1026    typedef DDCAPS_DX7 DDCAPS;
1027 #endif
1028 typedef DDCAPS *LPDDCAPS;
1029 
1030 
1031 typedef struct _DDCOLORCONTROL
1032 {
1033   DWORD dwSize;
1034   DWORD dwFlags;
1035   LONG lBrightness;
1036   LONG lContrast;
1037   LONG lHue;
1038   LONG lSaturation;
1039   LONG lSharpness;
1040   LONG lGamma;
1041   LONG lColorEnable;
1042   DWORD dwReserved1;
1043 } DDCOLORCONTROL, *LPDDCOLORCONTROL;
1044 
1045 typedef struct _DDCOLORKEY
1046 {
1047    DWORD dwColorSpaceLowValue;
1048    DWORD dwColorSpaceHighValue;
1049 
1050 } DDCOLORKEY, *LPDDCOLORKEY;
1051 
1052 typedef struct _DDOSCAPS
1053 {
1054    DWORD dwCaps;
1055 } DDOSCAPS, *LPDDOSCAPS;
1056 
1057 typedef struct _DDSCAPSEX
1058 {
1059    DWORD dwCaps2;
1060    DWORD dwCaps3;
1061    union
1062    {
1063       DWORD dwCaps4;
1064       DWORD dwVolumeDepth;
1065    } DUMMYUNIONNAMEN(1);
1066 } DDSCAPSEX, *LPDDSCAPSEX;
1067 
1068 typedef struct _DDPIXELFORMAT
1069 {
1070    DWORD dwSize;
1071    DWORD dwFlags;
1072    DWORD dwFourCC;
1073    union
1074    {
1075       DWORD dwRGBBitCount;
1076       DWORD dwYUVBitCount;
1077       DWORD dwZBufferBitDepth;
1078       DWORD dwAlphaBitDepth;
1079       DWORD dwLuminanceBitCount;
1080       DWORD dwBumpBitCount;
1081       DWORD dwPrivateFormatBitCount;
1082    } DUMMYUNIONNAMEN(1);
1083    union
1084    {
1085       DWORD dwRBitMask;
1086       DWORD dwYBitMask;
1087       DWORD dwStencilBitDepth;
1088       DWORD dwLuminanceBitMask;
1089       DWORD dwBumpDuBitMask;
1090       DWORD dwOperations;
1091    } DUMMYUNIONNAMEN(2);
1092    union
1093    {
1094       DWORD dwGBitMask;
1095       DWORD dwUBitMask;
1096       DWORD dwZBitMask;
1097       DWORD dwBumpDvBitMask;
1098       struct
1099       {
1100          WORD wFlipMSTypes;
1101          WORD wBltMSTypes;
1102       } MultiSampleCaps;
1103    } DUMMYUNIONNAMEN(3);
1104    union
1105    {
1106       DWORD dwBBitMask;
1107       DWORD dwVBitMask;
1108       DWORD dwStencilBitMask;
1109       DWORD dwBumpLuminanceBitMask;
1110    } DUMMYUNIONNAMEN(4);
1111    union
1112    {
1113       DWORD dwRGBAlphaBitMask;
1114       DWORD dwYUVAlphaBitMask;
1115       DWORD dwLuminanceAlphaBitMask;
1116       DWORD dwRGBZBitMask;
1117       DWORD dwYUVZBitMask;
1118    } DUMMYUNIONNAMEN(5);
1119 } DDPIXELFORMAT, *LPDDPIXELFORMAT;
1120 
1121 typedef struct _DDSURFACEDESC
1122 {
1123    DWORD dwSize;
1124    DWORD dwFlags;
1125    DWORD dwHeight;
1126    DWORD dwWidth;
1127    union
1128    {
1129       LONG lPitch;
1130       DWORD dwLinearSize;
1131    } DUMMYUNIONNAMEN(1);
1132    DWORD dwBackBufferCount;
1133    union
1134    {
1135       DWORD dwMipMapCount;
1136       DWORD dwZBufferBitDepth;
1137       DWORD dwRefreshRate;
1138    } DUMMYUNIONNAMEN(2);
1139    DWORD dwAlphaBitDepth;
1140    DWORD dwReserved;
1141    LPVOID lpSurface;
1142    DDCOLORKEY ddckCKDestOverlay;
1143    DDCOLORKEY ddckCKDestBlt;
1144    DDCOLORKEY ddckCKSrcOverlay;
1145    DDCOLORKEY ddckCKSrcBlt;
1146    DDPIXELFORMAT ddpfPixelFormat;
1147    DDSCAPS ddsCaps;
1148 } DDSURFACEDESC, *LPDDSURFACEDESC;
1149 
1150 typedef struct _DDSURFACEDESC2
1151 {
1152    DWORD dwSize;
1153    DWORD dwFlags;
1154    DWORD dwHeight;
1155    DWORD dwWidth;
1156    union
1157    {
1158       LONG lPitch;
1159       DWORD dwLinearSize;
1160    } DUMMYUNIONNAMEN(1);
1161    union
1162    {
1163       DWORD dwBackBufferCount;
1164       DWORD dwDepth;
1165    } DUMMYUNIONNAMEN(5);
1166    union
1167    {
1168       DWORD dwMipMapCount;
1169       DWORD dwRefreshRate;
1170       DWORD dwSrcVBHandle;
1171    } DUMMYUNIONNAMEN(2);
1172    DWORD dwAlphaBitDepth;
1173    DWORD dwReserved;
1174    LPVOID lpSurface;
1175    union
1176    {
1177       DDCOLORKEY ddckCKDestOverlay;
1178       DWORD dwEmptyFaceColor;
1179    } DUMMYUNIONNAMEN(3);
1180    DDCOLORKEY ddckCKDestBlt;
1181    DDCOLORKEY ddckCKSrcOverlay;
1182    DDCOLORKEY ddckCKSrcBlt;
1183    union
1184    {
1185       DDPIXELFORMAT ddpfPixelFormat;
1186       DWORD dwFVF;
1187    } DUMMYUNIONNAMEN(4);
1188    DDSCAPS2 ddsCaps;
1189    DWORD dwTextureStage;
1190 } DDSURFACEDESC2, *LPDDSURFACEDESC2;
1191 
1192 typedef struct _DDOPTSURFACEDESC
1193 {
1194    DWORD dwSize;
1195    DWORD dwFlags;
1196    DDSCAPS2 ddSCaps;
1197    DDOSCAPS ddOSCaps;
1198    GUID guid;
1199    DWORD dwCompressionRatio;
1200 } DDOPTSURFACEDESC;
1201 
1202 typedef struct _DDARGB
1203 {
1204     BYTE blue;
1205     BYTE green;
1206     BYTE red;
1207     BYTE alpha;
1208 } DDARGB, *LPDDARGB;
1209 
1210 typedef struct _DDRGBA
1211 {
1212     BYTE red;
1213     BYTE green;
1214     BYTE blue;
1215     BYTE alpha;
1216 } DDRGBA, *LPDDRGBA;
1217 
1218 
1219 #if (defined (WIN32) || defined( _WIN32 ) ) && !defined( _NO_COM )
1220   typedef BOOL (WINAPI *LPDDENUMCALLBACKA)(GUID *, LPSTR, LPSTR, LPVOID);
1221   typedef BOOL (WINAPI *LPDDENUMCALLBACKW)(GUID *, LPWSTR, LPWSTR, LPVOID);
1222   extern HRESULT WINAPI DirectDrawEnumerateW( LPDDENUMCALLBACKW lpCallback, LPVOID lpContext );
1223   extern HRESULT WINAPI DirectDrawEnumerateA( LPDDENUMCALLBACKA lpCallback, LPVOID lpContext );
1224 
1225   #if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500)
1226         #define HMONITOR_DECLARED
1227         DECLARE_HANDLE(HMONITOR);
1228   #endif
1229 
1230   typedef BOOL (WINAPI *LPDDENUMCALLBACKEXA)(GUID *, LPSTR, LPSTR, LPVOID, HMONITOR);
1231   typedef BOOL (WINAPI *LPDDENUMCALLBACKEXW)(GUID *, LPWSTR, LPWSTR, LPVOID, HMONITOR);
1232 
1233   extern HRESULT WINAPI DirectDrawEnumerateExW( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags);
1234   extern HRESULT WINAPI DirectDrawEnumerateExA( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags);
1235 
1236   typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXA)( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags);
1237   typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXW)( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags);
1238 
1239   #ifdef UNICODE
1240     typedef LPDDENUMCALLBACKW        LPDDENUMCALLBACK;
1241     #define DirectDrawEnumerate      DirectDrawEnumerateW
1242     typedef LPDDENUMCALLBACKEXW      LPDDENUMCALLBACKEX;
1243     typedef LPDIRECTDRAWENUMERATEEXW LPDIRECTDRAWENUMERATEEX;
1244     #define DirectDrawEnumerateEx    DirectDrawEnumerateExW
1245   #else
1246     typedef LPDDENUMCALLBACKA        LPDDENUMCALLBACK;
1247     #define DirectDrawEnumerate      DirectDrawEnumerateA
1248     typedef LPDDENUMCALLBACKEXA      LPDDENUMCALLBACKEX;
1249     typedef LPDIRECTDRAWENUMERATEEXA LPDIRECTDRAWENUMERATEEX;
1250     #define DirectDrawEnumerateEx    DirectDrawEnumerateExA
1251   #endif
1252     extern HRESULT WINAPI DirectDrawCreate(GUID *lpGUID,LPDIRECTDRAW *lplpDD, IUnknown *pUnkOuter );
1253     extern HRESULT WINAPI DirectDrawCreateEx(GUID * lpGuid,LPVOID  *lplpDD,REFIID iid,IUnknown *pUnkOuter );
1254     extern HRESULT WINAPI DirectDrawCreateClipper(DWORD dwFlags,LPDIRECTDRAWCLIPPER *lplpDDClipper,IUnknown *pUnkOuter );
1255 #endif
1256 
1257 
1258 typedef HRESULT (WINAPI *LPDDENUMMODESCALLBACK)(LPDDSURFACEDESC, LPVOID);
1259 typedef HRESULT (WINAPI *LPDDENUMMODESCALLBACK2)(LPDDSURFACEDESC2, LPVOID);
1260 typedef HRESULT (WINAPI *LPDDENUMSURFACESCALLBACK)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID);
1261 typedef HRESULT (WINAPI *LPDDENUMSURFACESCALLBACK2)(LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID);
1262 typedef HRESULT (WINAPI *LPDDENUMSURFACESCALLBACK7)(LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2, LPVOID);
1263 
1264 typedef DWORD (*LPCLIPPERCALLBACK)(LPDIRECTDRAWCLIPPER lpDDClipper, HWND hWnd, DWORD code, LPVOID lpContext );
1265 #ifdef STREAMING
1266 typedef DWORD   (*LPSURFACESTREAMINGCALLBACK)(DWORD);
1267 #endif
1268 
1269 
1270 typedef struct _DDBLTFX
1271 {
1272    DWORD dwSize;
1273    DWORD dwDDFX;
1274    DWORD dwROP;
1275    DWORD dwDDROP;
1276    DWORD dwRotationAngle;
1277    DWORD dwZBufferOpCode;
1278    DWORD dwZBufferLow;
1279    DWORD dwZBufferHigh;
1280    DWORD dwZBufferBaseDest;
1281    DWORD dwZDestConstBitDepth;
1282    union
1283    {
1284       DWORD dwZDestConst;
1285       LPDIRECTDRAWSURFACE lpDDSZBufferDest;
1286    } DUMMYUNIONNAMEN(1);
1287    DWORD dwZSrcConstBitDepth;
1288    union
1289    {
1290       DWORD dwZSrcConst;
1291       LPDIRECTDRAWSURFACE lpDDSZBufferSrc;
1292    } DUMMYUNIONNAMEN(2);
1293    DWORD dwAlphaEdgeBlendBitDepth;
1294    DWORD dwAlphaEdgeBlend;
1295    DWORD dwReserved;
1296    DWORD dwAlphaDestConstBitDepth;
1297    union
1298    {
1299       DWORD dwAlphaDestConst;
1300       LPDIRECTDRAWSURFACE lpDDSAlphaDest;
1301    } DUMMYUNIONNAMEN(3);
1302    DWORD dwAlphaSrcConstBitDepth;
1303    union
1304    {
1305       DWORD dwAlphaSrcConst;
1306       LPDIRECTDRAWSURFACE lpDDSAlphaSrc;
1307    } DUMMYUNIONNAMEN(4);
1308    union
1309    {
1310       DWORD dwFillColor;
1311       DWORD dwFillDepth;
1312       DWORD dwFillPixel;
1313       LPDIRECTDRAWSURFACE lpDDSPattern;
1314    } DUMMYUNIONNAMEN(5);
1315    DDCOLORKEY ddckDestColorkey;
1316    DDCOLORKEY ddckSrcColorkey;
1317 } DDBLTFX, *LPDDBLTFX;
1318 
1319 typedef struct _DDGAMMARAMP
1320 {
1321    WORD red[256];
1322    WORD green[256];
1323    WORD blue[256];
1324 } DDGAMMARAMP, *LPDDGAMMARAMP;
1325 
1326 typedef struct tagDDDEVICEIDENTIFIER
1327 {
1328    char szDriver[MAX_DDDEVICEID_STRING];
1329    char szDescription[MAX_DDDEVICEID_STRING];
1330 #ifdef _WIN32
1331    LARGE_INTEGER liDriverVersion;
1332 #else
1333    DWORD dwDriverVersionLowPart;
1334    DWORD dwDriverVersionHighPart;
1335 #endif
1336    DWORD dwVendorId;
1337    DWORD dwDeviceId;
1338    DWORD dwSubSysId;
1339    DWORD dwRevision;
1340    GUID guidDeviceIdentifier;
1341 } DDDEVICEIDENTIFIER, * LPDDDEVICEIDENTIFIER;
1342 
1343 typedef struct tagDDDEVICEIDENTIFIER2
1344 {
1345    char szDriver[MAX_DDDEVICEID_STRING];
1346    char szDescription[MAX_DDDEVICEID_STRING];
1347 #ifdef _WIN32
1348    LARGE_INTEGER liDriverVersion;
1349 #else
1350    DWORD dwDriverVersionLowPart;
1351    DWORD dwDriverVersionHighPart;
1352 #endif
1353    DWORD dwVendorId;
1354    DWORD dwDeviceId;
1355    DWORD dwSubSysId;
1356    DWORD dwRevision;
1357    GUID guidDeviceIdentifier;
1358    DWORD dwWHQLLevel;
1359 } DDDEVICEIDENTIFIER2, *LPDDDEVICEIDENTIFIER2;
1360 
1361 typedef struct _DDBLTBATCH
1362 {
1363    LPRECT lprDest;
1364    LPDIRECTDRAWSURFACE lpDDSSrc;
1365    LPRECT lprSrc;
1366    DWORD dwFlags;
1367    LPDDBLTFX lpDDBltFx;
1368 } DDBLTBATCH, *LPDDBLTBATCH;
1369 
1370 typedef struct _DDOVERLAYFX
1371 {
1372    DWORD dwSize;
1373    DWORD dwAlphaEdgeBlendBitDepth;
1374    DWORD dwAlphaEdgeBlend;
1375    DWORD dwReserved;
1376    DWORD dwAlphaDestConstBitDepth;
1377    union
1378    {
1379       DWORD dwAlphaDestConst;
1380       LPDIRECTDRAWSURFACE lpDDSAlphaDest;
1381    } DUMMYUNIONNAMEN(1);
1382    DWORD dwAlphaSrcConstBitDepth;
1383    union
1384    {
1385       DWORD dwAlphaSrcConst;
1386       LPDIRECTDRAWSURFACE lpDDSAlphaSrc;
1387    } DUMMYUNIONNAMEN(2);
1388    DDCOLORKEY dckDestColorkey;
1389    DDCOLORKEY dckSrcColorkey;
1390    DWORD dwDDFX;
1391    DWORD dwFlags;
1392 } DDOVERLAYFX, *LPDDOVERLAYFX;
1393 
1394 
1395 
1396 #if defined( _WIN32 ) && !defined( _NO_COM )
1397     #undef INTERFACE
1398     #define INTERFACE IDirectDraw
1399 
DECLARE_INTERFACE_(IDirectDraw,IUnknown)1400     DECLARE_INTERFACE_( IDirectDraw, IUnknown )
1401     {
1402       STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID *ppvObj) PURE;
1403       STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
1404       STDMETHOD_(ULONG,Release) (THIS) PURE;
1405 
1406       STDMETHOD(Compact)(THIS) PURE;
1407       STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER *, IUnknown * ) PURE;
1408       STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown * ) PURE;
1409       STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC, LPDIRECTDRAWSURFACE *, IUnknown *) PURE;
1410       STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE * ) PURE;
1411       STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE;
1412       STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE;
1413       STDMETHOD(FlipToGDISurface)(THIS) PURE;
1414       STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;
1415       STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE;
1416       STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;
1417       STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE *) PURE;
1418       STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
1419       STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
1420       STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;
1421       STDMETHOD(Initialize)(THIS_ GUID *) PURE;
1422       STDMETHOD(RestoreDisplayMode)(THIS) PURE;
1423       STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
1424       STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD) PURE;
1425       STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
1426      };
1427 
1428      #if !defined(__cplusplus) || defined(CINTERFACE)
1429          #define IDirectDraw_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)
1430          #define IDirectDraw_AddRef(p)                       (p)->lpVtbl->AddRef(p)
1431          #define IDirectDraw_Release(p)                      (p)->lpVtbl->Release(p)
1432          #define IDirectDraw_Compact(p)                      (p)->lpVtbl->Compact(p)
1433          #define IDirectDraw_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)
1434          #define IDirectDraw_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)
1435          #define IDirectDraw_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)
1436          #define IDirectDraw_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)
1437          #define IDirectDraw_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)
1438          #define IDirectDraw_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)
1439          #define IDirectDraw_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)
1440          #define IDirectDraw_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)
1441          #define IDirectDraw_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)
1442          #define IDirectDraw_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)
1443          #define IDirectDraw_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)
1444          #define IDirectDraw_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)
1445          #define IDirectDraw_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)
1446          #define IDirectDraw_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)
1447          #define IDirectDraw_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)
1448          #define IDirectDraw_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)
1449          #define IDirectDraw_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)
1450          #define IDirectDraw_SetDisplayMode(p, a, b, c)      (p)->lpVtbl->SetDisplayMode(p, a, b, c)
1451          #define IDirectDraw_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)
1452      #else
1453          #define IDirectDraw_QueryInterface(p, a, b)         (p)->QueryInterface(a, b)
1454          #define IDirectDraw_AddRef(p)                       (p)->AddRef()
1455          #define IDirectDraw_Release(p)                      (p)->Release()
1456          #define IDirectDraw_Compact(p)                      (p)->Compact()
1457          #define IDirectDraw_CreateClipper(p, a, b, c)       (p)->CreateClipper(a, b, c)
1458          #define IDirectDraw_CreatePalette(p, a, b, c, d)    (p)->CreatePalette(a, b, c, d)
1459          #define IDirectDraw_CreateSurface(p, a, b, c)       (p)->CreateSurface(a, b, c)
1460          #define IDirectDraw_DuplicateSurface(p, a, b)       (p)->DuplicateSurface(a, b)
1461          #define IDirectDraw_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d)
1462          #define IDirectDraw_EnumSurfaces(p, a, b, c, d)     (p)->EnumSurfaces(a, b, c, d)
1463          #define IDirectDraw_FlipToGDISurface(p)             (p)->FlipToGDISurface()
1464          #define IDirectDraw_GetCaps(p, a, b)                (p)->GetCaps(a, b)
1465          #define IDirectDraw_GetDisplayMode(p, a)            (p)->GetDisplayMode(a)
1466          #define IDirectDraw_GetFourCCCodes(p, a, b)         (p)->GetFourCCCodes(a, b)
1467          #define IDirectDraw_GetGDISurface(p, a)             (p)->GetGDISurface(a)
1468          #define IDirectDraw_GetMonitorFrequency(p, a)       (p)->GetMonitorFrequency(a)
1469          #define IDirectDraw_GetScanLine(p, a)               (p)->GetScanLine(a)
1470          #define IDirectDraw_GetVerticalBlankStatus(p, a)    (p)->GetVerticalBlankStatus(a)
1471          #define IDirectDraw_Initialize(p, a)                (p)->Initialize(a)
1472          #define IDirectDraw_RestoreDisplayMode(p)           (p)->RestoreDisplayMode()
1473          #define IDirectDraw_SetCooperativeLevel(p, a, b)    (p)->SetCooperativeLevel(a, b)
1474          #define IDirectDraw_SetDisplayMode(p, a, b, c)      (p)->SetDisplayMode(a, b, c)
1475          #define IDirectDraw_WaitForVerticalBlank(p, a, b)   (p)->WaitForVerticalBlank(a, b)
1476      #endif
1477 #endif
1478 
1479 #if defined( _WIN32 ) && !defined( _NO_COM )
1480     #undef INTERFACE
1481     #define INTERFACE IDirectDraw2
DECLARE_INTERFACE_(IDirectDraw2,IUnknown)1482     DECLARE_INTERFACE_( IDirectDraw2, IUnknown )
1483     {
1484       STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
1485       STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
1486       STDMETHOD_(ULONG,Release) (THIS) PURE;
1487       STDMETHOD(Compact)(THIS) PURE;
1488       STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER *, IUnknown  * ) PURE;
1489       STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown * ) PURE;
1490       STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC, LPDIRECTDRAWSURFACE *, IUnknown *) PURE;
1491       STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE * ) PURE;
1492       STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE;
1493       STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE;
1494       STDMETHOD(FlipToGDISurface)(THIS) PURE;
1495       STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;
1496       STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE;
1497       STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;
1498       STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE *) PURE;
1499       STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
1500       STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
1501       STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;
1502       STDMETHOD(Initialize)(THIS_ GUID *) PURE;
1503       STDMETHOD(RestoreDisplayMode)(THIS) PURE;
1504       STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
1505       STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE;
1506       STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
1507       STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE;
1508      };
1509 
1510      #if !defined(__cplusplus) || defined(CINTERFACE)
1511          #define IDirectDraw2_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)
1512          #define IDirectDraw2_AddRef(p)                       (p)->lpVtbl->AddRef(p)
1513          #define IDirectDraw2_Release(p)                      (p)->lpVtbl->Release(p)
1514          #define IDirectDraw2_Compact(p)                      (p)->lpVtbl->Compact(p)
1515          #define IDirectDraw2_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)
1516          #define IDirectDraw2_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)
1517          #define IDirectDraw2_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)
1518          #define IDirectDraw2_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)
1519          #define IDirectDraw2_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)
1520          #define IDirectDraw2_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)
1521          #define IDirectDraw2_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)
1522          #define IDirectDraw2_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)
1523          #define IDirectDraw2_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)
1524          #define IDirectDraw2_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)
1525          #define IDirectDraw2_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)
1526          #define IDirectDraw2_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)
1527          #define IDirectDraw2_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)
1528          #define IDirectDraw2_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)
1529          #define IDirectDraw2_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)
1530          #define IDirectDraw2_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)
1531          #define IDirectDraw2_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)
1532          #define IDirectDraw2_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e)
1533          #define IDirectDraw2_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)
1534          #define IDirectDraw2_GetAvailableVidMem(p, a, b, c)  (p)->lpVtbl->GetAvailableVidMem(p, a, b, c)
1535      #else
1536          #define IDirectDraw2_QueryInterface(p, a, b)         (p)->QueryInterface(a, b)
1537          #define IDirectDraw2_AddRef(p)                       (p)->AddRef()
1538          #define IDirectDraw2_Release(p)                      (p)->Release()
1539          #define IDirectDraw2_Compact(p)                      (p)->Compact()
1540          #define IDirectDraw2_CreateClipper(p, a, b, c)       (p)->CreateClipper(a, b, c)
1541          #define IDirectDraw2_CreatePalette(p, a, b, c, d)    (p)->CreatePalette(a, b, c, d)
1542          #define IDirectDraw2_CreateSurface(p, a, b, c)       (p)->CreateSurface(a, b, c)
1543          #define IDirectDraw2_DuplicateSurface(p, a, b)       (p)->DuplicateSurface(a, b)
1544          #define IDirectDraw2_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d)
1545          #define IDirectDraw2_EnumSurfaces(p, a, b, c, d)     (p)->EnumSurfaces(a, b, c, d)
1546          #define IDirectDraw2_FlipToGDISurface(p)             (p)->FlipToGDISurface()
1547          #define IDirectDraw2_GetCaps(p, a, b)                (p)->GetCaps(a, b)
1548          #define IDirectDraw2_GetDisplayMode(p, a)            (p)->GetDisplayMode(a)
1549          #define IDirectDraw2_GetFourCCCodes(p, a, b)         (p)->GetFourCCCodes(a, b)
1550          #define IDirectDraw2_GetGDISurface(p, a)             (p)->GetGDISurface(a)
1551          #define IDirectDraw2_GetMonitorFrequency(p, a)       (p)->GetMonitorFrequency(a)
1552          #define IDirectDraw2_GetScanLine(p, a)               (p)->GetScanLine(a)
1553          #define IDirectDraw2_GetVerticalBlankStatus(p, a)    (p)->GetVerticalBlankStatus(a)
1554          #define IDirectDraw2_Initialize(p, a)                (p)->Initialize(a)
1555          #define IDirectDraw2_RestoreDisplayMode(p)           (p)->RestoreDisplayMode()
1556          #define IDirectDraw2_SetCooperativeLevel(p, a, b)    (p)->SetCooperativeLevel(a, b)
1557          #define IDirectDraw2_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e)
1558          #define IDirectDraw2_WaitForVerticalBlank(p, a, b)   (p)->WaitForVerticalBlank(a, b)
1559          #define IDirectDraw2_GetAvailableVidMem(p, a, b, c)  (p)->GetAvailableVidMem(a, b, c)
1560      #endif
1561 #endif
1562 
1563 #if defined( _WIN32 ) && !defined( _NO_COM )
1564     #undef INTERFACE
1565     #define INTERFACE IDirectDraw3
DECLARE_INTERFACE_(IDirectDraw3,IUnknown)1566     DECLARE_INTERFACE_(IDirectDraw3,IUnknown)
1567     {
1568         STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
1569         STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
1570         STDMETHOD_(ULONG,Release) (THIS) PURE;
1571         STDMETHOD(Compact)(THIS) PURE;
1572         STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER *, IUnknown  * ) PURE;
1573         STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown * ) PURE;
1574         STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC, LPDIRECTDRAWSURFACE *, IUnknown *) PURE;
1575         STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE * ) PURE;
1576         STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE;
1577         STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE;
1578         STDMETHOD(FlipToGDISurface)(THIS) PURE;
1579         STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;
1580         STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE;
1581         STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;
1582         STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE *) PURE;
1583         STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
1584         STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
1585         STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;
1586         STDMETHOD(Initialize)(THIS_ GUID *) PURE;
1587         STDMETHOD(RestoreDisplayMode)(THIS) PURE;
1588         STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
1589         STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE;
1590         STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
1591         STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE;
1592         STDMETHOD(GetSurfaceFromDC)(THIS_ HDC, LPDIRECTDRAWSURFACE*) PURE;
1593 };
1594 
1595     #if !defined(__cplusplus) || defined(CINTERFACE)
1596         #define IDirectDraw3_QueryInterface(p,a,b)          (p)->lpVtbl->QueryInterface(p,a,b)
1597         #define IDirectDraw3_AddRef(p)                      (p)->lpVtbl->AddRef(p)
1598         #define IDirectDraw3_Release(p)                     (p)->lpVtbl->Release(p)
1599         #define IDirectDraw3_Compact(p)                     (p)->lpVtbl->Compact(p)
1600         #define IDirectDraw3_CreateClipper(p,a,b,c)         (p)->lpVtbl->CreateClipper(p,a,b,c)
1601         #define IDirectDraw3_CreatePalette(p,a,b,c,d)       (p)->lpVtbl->CreatePalette(p,a,b,c,d)
1602         #define IDirectDraw3_CreateSurface(p,a,b,c)         (p)->lpVtbl->CreateSurface(p,a,b,c)
1603         #define IDirectDraw3_DuplicateSurface(p,a,b)        (p)->lpVtbl->DuplicateSurface(p,a,b)
1604         #define IDirectDraw3_EnumDisplayModes(p,a,b,c,d)    (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)
1605         #define IDirectDraw3_EnumSurfaces(p,a,b,c,d)        (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)
1606         #define IDirectDraw3_FlipToGDISurface(p)            (p)->lpVtbl->FlipToGDISurface(p)
1607         #define IDirectDraw3_GetCaps(p,a,b)                 (p)->lpVtbl->GetCaps(p,a,b)
1608         #define IDirectDraw3_GetDisplayMode(p,a)            (p)->lpVtbl->GetDisplayMode(p,a)
1609         #define IDirectDraw3_GetFourCCCodes(p,a,b)          (p)->lpVtbl->GetFourCCCodes(p,a,b)
1610         #define IDirectDraw3_GetGDISurface(p,a)             (p)->lpVtbl->GetGDISurface(p,a)
1611         #define IDirectDraw3_GetMonitorFrequency(p,a)       (p)->lpVtbl->GetMonitorFrequency(p,a)
1612         #define IDirectDraw3_GetScanLine(p,a)               (p)->lpVtbl->GetScanLine(p,a)
1613         #define IDirectDraw3_GetVerticalBlankStatus(p,a)    (p)->lpVtbl->GetVerticalBlankStatus(p,a)
1614         #define IDirectDraw3_Initialize(p,a)                (p)->lpVtbl->Initialize(p,a)
1615         #define IDirectDraw3_RestoreDisplayMode(p)          (p)->lpVtbl->RestoreDisplayMode(p)
1616         #define IDirectDraw3_SetCooperativeLevel(p,a,b)     (p)->lpVtbl->SetCooperativeLevel(p,a,b)
1617         #define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e)    (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e)
1618         #define IDirectDraw3_WaitForVerticalBlank(p,a,b)    (p)->lpVtbl->WaitForVerticalBlank(p,a,b)
1619         #define IDirectDraw3_GetAvailableVidMem(p,a,b,c)    (p)->lpVtbl->GetAvailableVidMem(p,a,b,c)
1620         #define IDirectDraw3_GetSurfaceFromDC(p,a,b)        (p)->lpVtbl->GetSurfaceFromDC(p,a,b)
1621     #else
1622         #define IDirectDraw3_QueryInterface(p,a,b)          (p)->QueryInterface(a,b)
1623         #define IDirectDraw3_AddRef(p)                      (p)->AddRef()
1624         #define IDirectDraw3_Release(p)                     (p)->Release()
1625         #define IDirectDraw3_Compact(p)                     (p)->Compact()
1626         #define IDirectDraw3_CreateClipper(p,a,b,c)         (p)->CreateClipper(a,b,c)
1627         #define IDirectDraw3_CreatePalette(p,a,b,c,d)       (p)->CreatePalette(a,b,c,d)
1628         #define IDirectDraw3_CreateSurface(p,a,b,c)         (p)->CreateSurface(a,b,c)
1629         #define IDirectDraw3_DuplicateSurface(p,a,b)        (p)->DuplicateSurface(a,b)
1630         #define IDirectDraw3_EnumDisplayModes(p,a,b,c,d)    (p)->EnumDisplayModes(a,b,c,d)
1631         #define IDirectDraw3_EnumSurfaces(p,a,b,c,d)        (p)->EnumSurfaces(a,b,c,d)
1632         #define IDirectDraw3_FlipToGDISurface(p)            (p)->FlipToGDISurface()
1633         #define IDirectDraw3_GetCaps(p,a,b)                 (p)->GetCaps(a,b)
1634         #define IDirectDraw3_GetDisplayMode(p,a)            (p)->GetDisplayMode(a)
1635         #define IDirectDraw3_GetFourCCCodes(p,a,b)          (p)->GetFourCCCodes(a,b)
1636         #define IDirectDraw3_GetGDISurface(p,a)             (p)->GetGDISurface(a)
1637         #define IDirectDraw3_GetMonitorFrequency(p,a)       (p)->GetMonitorFrequency(a)
1638         #define IDirectDraw3_GetScanLine(p,a)               (p)->GetScanLine(a)
1639         #define IDirectDraw3_GetVerticalBlankStatus(p,a)    (p)->GetVerticalBlankStatus(a)
1640         #define IDirectDraw3_Initialize(p,a)                (p)->Initialize(a)
1641         #define IDirectDraw3_RestoreDisplayMode(p)          (p)->RestoreDisplayMode()
1642         #define IDirectDraw3_SetCooperativeLevel(p,a,b)     (p)->SetCooperativeLevel(a,b)
1643         #define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e)    (p)->SetDisplayMode(a,b,c,d,e)
1644         #define IDirectDraw3_WaitForVerticalBlank(p,a,b)    (p)->WaitForVerticalBlank(a,b)
1645         #define IDirectDraw3_GetAvailableVidMem(p,a,b,c)    (p)->GetAvailableVidMem(a,b,c)
1646         #define IDirectDraw3_GetSurfaceFromDC(p,a,b)        (p)->GetSurfaceFromDC(a,b)
1647     #endif
1648 #endif
1649 
1650 
1651 #if defined( _WIN32 ) && !defined( _NO_COM )
1652     #undef INTERFACE
1653     #define INTERFACE IDirectDraw4
1654 
DECLARE_INTERFACE_(IDirectDraw4,IUnknown)1655     DECLARE_INTERFACE_( IDirectDraw4, IUnknown )
1656     {
1657       STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
1658       STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
1659       STDMETHOD_(ULONG,Release) (THIS) PURE;
1660       STDMETHOD(Compact)(THIS) PURE;
1661       STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER *, IUnknown * ) PURE;
1662       STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown * ) PURE;
1663       STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE4 *, IUnknown *) PURE;
1664       STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE4, LPDIRECTDRAWSURFACE4 * ) PURE;
1665       STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ) PURE;
1666       STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK2 ) PURE;
1667       STDMETHOD(FlipToGDISurface)(THIS) PURE;
1668       STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;
1669       STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC2) PURE;
1670       STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;
1671       STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE4 *) PURE;
1672       STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
1673       STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
1674       STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;
1675       STDMETHOD(Initialize)(THIS_ GUID *) PURE;
1676       STDMETHOD(RestoreDisplayMode)(THIS) PURE;
1677       STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
1678       STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE;
1679       STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
1680       STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2, LPDWORD, LPDWORD) PURE;
1681       STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE4 *) PURE;
1682       STDMETHOD(RestoreAllSurfaces)(THIS) PURE;
1683       STDMETHOD(TestCooperativeLevel)(THIS) PURE;
1684       STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER, DWORD ) PURE;
1685      };
1686 #if !defined(__cplusplus) || defined(CINTERFACE)
1687          #define IDirectDraw4_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)
1688          #define IDirectDraw4_AddRef(p)                       (p)->lpVtbl->AddRef(p)
1689          #define IDirectDraw4_Release(p)                      (p)->lpVtbl->Release(p)
1690          #define IDirectDraw4_Compact(p)                      (p)->lpVtbl->Compact(p)
1691          #define IDirectDraw4_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)
1692          #define IDirectDraw4_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)
1693          #define IDirectDraw4_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)
1694          #define IDirectDraw4_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)
1695          #define IDirectDraw4_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)
1696          #define IDirectDraw4_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)
1697          #define IDirectDraw4_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)
1698          #define IDirectDraw4_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)
1699          #define IDirectDraw4_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)
1700          #define IDirectDraw4_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)
1701          #define IDirectDraw4_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)
1702          #define IDirectDraw4_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)
1703          #define IDirectDraw4_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)
1704          #define IDirectDraw4_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)
1705          #define IDirectDraw4_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)
1706          #define IDirectDraw4_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)
1707          #define IDirectDraw4_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)
1708          #define IDirectDraw4_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e)
1709          #define IDirectDraw4_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)
1710          #define IDirectDraw4_GetAvailableVidMem(p, a, b, c)  (p)->lpVtbl->GetAvailableVidMem(p, a, b, c)
1711          #define IDirectDraw4_GetSurfaceFromDC(p, a, b)       (p)->lpVtbl->GetSurfaceFromDC(p, a, b)
1712          #define IDirectDraw4_RestoreAllSurfaces(p)           (p)->lpVtbl->RestoreAllSurfaces(p)
1713          #define IDirectDraw4_TestCooperativeLevel(p)         (p)->lpVtbl->TestCooperativeLevel(p)
1714          #define IDirectDraw4_GetDeviceIdentifier(p,a,b)      (p)->lpVtbl->GetDeviceIdentifier(p,a,b)
1715      #else
1716          #define IDirectDraw4_QueryInterface(p, a, b)         (p)->QueryInterface(a, b)
1717          #define IDirectDraw4_AddRef(p)                       (p)->AddRef()
1718          #define IDirectDraw4_Release(p)                      (p)->Release()
1719          #define IDirectDraw4_Compact(p)                      (p)->Compact()
1720          #define IDirectDraw4_CreateClipper(p, a, b, c)       (p)->CreateClipper(a, b, c)
1721          #define IDirectDraw4_CreatePalette(p, a, b, c, d)    (p)->CreatePalette(a, b, c, d)
1722          #define IDirectDraw4_CreateSurface(p, a, b, c)       (p)->CreateSurface(a, b, c)
1723          #define IDirectDraw4_DuplicateSurface(p, a, b)       (p)->DuplicateSurface(a, b)
1724          #define IDirectDraw4_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d)
1725          #define IDirectDraw4_EnumSurfaces(p, a, b, c, d)     (p)->EnumSurfaces(a, b, c, d)
1726          #define IDirectDraw4_FlipToGDISurface(p)             (p)->FlipToGDISurface()
1727          #define IDirectDraw4_GetCaps(p, a, b)                (p)->GetCaps(a, b)
1728          #define IDirectDraw4_GetDisplayMode(p, a)            (p)->GetDisplayMode(a)
1729          #define IDirectDraw4_GetFourCCCodes(p, a, b)         (p)->GetFourCCCodes(a, b)
1730          #define IDirectDraw4_GetGDISurface(p, a)             (p)->GetGDISurface(a)
1731          #define IDirectDraw4_GetMonitorFrequency(p, a)       (p)->GetMonitorFrequency(a)
1732          #define IDirectDraw4_GetScanLine(p, a)               (p)->GetScanLine(a)
1733          #define IDirectDraw4_GetVerticalBlankStatus(p, a)    (p)->GetVerticalBlankStatus(a)
1734          #define IDirectDraw4_Initialize(p, a)                (p)->Initialize(a)
1735          #define IDirectDraw4_RestoreDisplayMode(p)           (p)->RestoreDisplayMode()
1736          #define IDirectDraw4_SetCooperativeLevel(p, a, b)    (p)->SetCooperativeLevel(a, b)
1737          #define IDirectDraw4_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e)
1738          #define IDirectDraw4_WaitForVerticalBlank(p, a, b)   (p)->WaitForVerticalBlank(a, b)
1739          #define IDirectDraw4_GetAvailableVidMem(p, a, b, c)  (p)->GetAvailableVidMem(a, b, c)
1740          #define IDirectDraw4_GetSurfaceFromDC(p, a, b)       (p)->GetSurfaceFromDC(a, b)
1741          #define IDirectDraw4_RestoreAllSurfaces(p)           (p)->RestoreAllSurfaces()
1742          #define IDirectDraw4_TestCooperativeLevel(p)         (p)->TestCooperativeLevel()
1743          #define IDirectDraw4_GetDeviceIdentifier(p,a,b)      (p)->GetDeviceIdentifier(a,b)
1744      #endif
1745 #endif
1746 
1747 #if defined( _WIN32 ) && !defined( _NO_COM )
1748     #undef INTERFACE
1749     #define INTERFACE IDirectDraw7
1750 
DECLARE_INTERFACE_(IDirectDraw7,IUnknown)1751     DECLARE_INTERFACE_( IDirectDraw7, IUnknown )
1752     {
1753       STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
1754       STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
1755       STDMETHOD_(ULONG,Release) (THIS) PURE;
1756       STDMETHOD(Compact)(THIS) PURE;
1757       STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER *, IUnknown * ) PURE;
1758       STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown * ) PURE;
1759       STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE7 *, IUnknown *) PURE;
1760       STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE7, LPDIRECTDRAWSURFACE7 * ) PURE;
1761       STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ) PURE;
1762       STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK7 ) PURE;
1763       STDMETHOD(FlipToGDISurface)(THIS) PURE;
1764       STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;
1765       STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC2) PURE;
1766       STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;
1767       STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE7 *) PURE;
1768       STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
1769       STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
1770       STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;
1771       STDMETHOD(Initialize)(THIS_ GUID *) PURE;
1772       STDMETHOD(RestoreDisplayMode)(THIS) PURE;
1773       STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
1774       STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE;
1775       STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
1776       STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2, LPDWORD, LPDWORD) PURE;
1777       STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE7 *) PURE;
1778       STDMETHOD(RestoreAllSurfaces)(THIS) PURE;
1779       STDMETHOD(TestCooperativeLevel)(THIS) PURE;
1780       STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER2, DWORD ) PURE;
1781       STDMETHOD(StartModeTest)(THIS_ LPSIZE, DWORD, DWORD ) PURE;
1782       STDMETHOD(EvaluateMode)(THIS_ DWORD, DWORD * ) PURE;
1783     };
1784      #if !defined(__cplusplus) || defined(CINTERFACE)
1785          #define IDirectDraw7_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)
1786          #define IDirectDraw7_AddRef(p)                       (p)->lpVtbl->AddRef(p)
1787          #define IDirectDraw7_Release(p)                      (p)->lpVtbl->Release(p)
1788          #define IDirectDraw7_Compact(p)                      (p)->lpVtbl->Compact(p)
1789          #define IDirectDraw7_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)
1790          #define IDirectDraw7_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)
1791          #define IDirectDraw7_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)
1792          #define IDirectDraw7_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)
1793          #define IDirectDraw7_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)
1794          #define IDirectDraw7_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)
1795          #define IDirectDraw7_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)
1796          #define IDirectDraw7_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)
1797          #define IDirectDraw7_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)
1798          #define IDirectDraw7_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)
1799          #define IDirectDraw7_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)
1800          #define IDirectDraw7_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)
1801          #define IDirectDraw7_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)
1802          #define IDirectDraw7_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)
1803          #define IDirectDraw7_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)
1804          #define IDirectDraw7_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)
1805          #define IDirectDraw7_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)
1806          #define IDirectDraw7_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e)
1807          #define IDirectDraw7_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)
1808          #define IDirectDraw7_GetAvailableVidMem(p, a, b, c)  (p)->lpVtbl->GetAvailableVidMem(p, a, b, c)
1809          #define IDirectDraw7_GetSurfaceFromDC(p, a, b)       (p)->lpVtbl->GetSurfaceFromDC(p, a, b)
1810          #define IDirectDraw7_RestoreAllSurfaces(p)           (p)->lpVtbl->RestoreAllSurfaces(p)
1811          #define IDirectDraw7_TestCooperativeLevel(p)         (p)->lpVtbl->TestCooperativeLevel(p)
1812          #define IDirectDraw7_GetDeviceIdentifier(p,a,b)      (p)->lpVtbl->GetDeviceIdentifier(p,a,b)
1813          #define IDirectDraw7_StartModeTest(p,a,b,c)        (p)->lpVtbl->StartModeTest(p,a,b,c)
1814          #define IDirectDraw7_EvaluateMode(p,a,b)           (p)->lpVtbl->EvaluateMode(p,a,b)
1815      #else
1816          #define IDirectDraw7_QueryInterface(p, a, b)         (p)->QueryInterface(a, b)
1817          #define IDirectDraw7_AddRef(p)                       (p)->AddRef()
1818          #define IDirectDraw7_Release(p)                      (p)->Release()
1819          #define IDirectDraw7_Compact(p)                      (p)->Compact()
1820          #define IDirectDraw7_CreateClipper(p, a, b, c)       (p)->CreateClipper(a, b, c)
1821          #define IDirectDraw7_CreatePalette(p, a, b, c, d)    (p)->CreatePalette(a, b, c, d)
1822          #define IDirectDraw7_CreateSurface(p, a, b, c)       (p)->CreateSurface(a, b, c)
1823          #define IDirectDraw7_DuplicateSurface(p, a, b)       (p)->DuplicateSurface(a, b)
1824          #define IDirectDraw7_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d)
1825          #define IDirectDraw7_EnumSurfaces(p, a, b, c, d)     (p)->EnumSurfaces(a, b, c, d)
1826          #define IDirectDraw7_FlipToGDISurface(p)             (p)->FlipToGDISurface()
1827          #define IDirectDraw7_GetCaps(p, a, b)                (p)->GetCaps(a, b)
1828          #define IDirectDraw7_GetDisplayMode(p, a)            (p)->GetDisplayMode(a)
1829          #define IDirectDraw7_GetFourCCCodes(p, a, b)         (p)->GetFourCCCodes(a, b)
1830          #define IDirectDraw7_GetGDISurface(p, a)             (p)->GetGDISurface(a)
1831          #define IDirectDraw7_GetMonitorFrequency(p, a)       (p)->GetMonitorFrequency(a)
1832          #define IDirectDraw7_GetScanLine(p, a)               (p)->GetScanLine(a)
1833          #define IDirectDraw7_GetVerticalBlankStatus(p, a)    (p)->GetVerticalBlankStatus(a)
1834          #define IDirectDraw7_Initialize(p, a)                (p)->Initialize(a)
1835          #define IDirectDraw7_RestoreDisplayMode(p)           (p)->RestoreDisplayMode()
1836          #define IDirectDraw7_SetCooperativeLevel(p, a, b)    (p)->SetCooperativeLevel(a, b)
1837          #define IDirectDraw7_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e)
1838          #define IDirectDraw7_WaitForVerticalBlank(p, a, b)   (p)->WaitForVerticalBlank(a, b)
1839          #define IDirectDraw7_GetAvailableVidMem(p, a, b, c)  (p)->GetAvailableVidMem(a, b, c)
1840          #define IDirectDraw7_GetSurfaceFromDC(p, a, b)       (p)->GetSurfaceFromDC(a, b)
1841          #define IDirectDraw7_RestoreAllSurfaces(p)           (p)->RestoreAllSurfaces()
1842          #define IDirectDraw7_TestCooperativeLevel(p)         (p)->TestCooperativeLevel()
1843          #define IDirectDraw7_GetDeviceIdentifier(p,a,b)      (p)->GetDeviceIdentifier(a,b)
1844          #define IDirectDraw7_StartModeTest(p,a,b,c)        (p)->lpVtbl->StartModeTest(a,b,c)
1845          #define IDirectDraw7_EvaluateMode(p,a,b)           (p)->lpVtbl->EvaluateMode(a,b)
1846      #endif
1847 #endif
1848 
1849 #if defined( _WIN32 ) && !defined( _NO_COM )
1850     #undef INTERFACE
1851     #define INTERFACE IDirectDrawPalette
1852 
DECLARE_INTERFACE_(IDirectDrawPalette,IUnknown)1853     DECLARE_INTERFACE_( IDirectDrawPalette, IUnknown )
1854     {
1855       STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
1856       STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
1857       STDMETHOD_(ULONG,Release) (THIS) PURE;
1858       STDMETHOD(GetCaps)(THIS_ LPDWORD) PURE;
1859       STDMETHOD(GetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE;
1860       STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE;
1861       STDMETHOD(SetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE;
1862     };
1863      #if !defined(__cplusplus) || defined(CINTERFACE)
1864          #define IDirectDrawPalette_QueryInterface(p, a, b)      (p)->lpVtbl->QueryInterface(p, a, b)
1865          #define IDirectDrawPalette_AddRef(p)                    (p)->lpVtbl->AddRef(p)
1866          #define IDirectDrawPalette_Release(p)                   (p)->lpVtbl->Release(p)
1867          #define IDirectDrawPalette_GetCaps(p, a)                (p)->lpVtbl->GetCaps(p, a)
1868          #define IDirectDrawPalette_GetEntries(p, a, b, c, d)    (p)->lpVtbl->GetEntries(p, a, b, c, d)
1869          #define IDirectDrawPalette_Initialize(p, a, b, c)       (p)->lpVtbl->Initialize(p, a, b, c)
1870          #define IDirectDrawPalette_SetEntries(p, a, b, c, d)    (p)->lpVtbl->SetEntries(p, a, b, c, d)
1871      #else
1872          #define IDirectDrawPalette_QueryInterface(p, a, b)      (p)->QueryInterface(a, b)
1873          #define IDirectDrawPalette_AddRef(p)                    (p)->AddRef()
1874          #define IDirectDrawPalette_Release(p)                   (p)->Release()
1875          #define IDirectDrawPalette_GetCaps(p, a)                (p)->GetCaps(a)
1876          #define IDirectDrawPalette_GetEntries(p, a, b, c, d)    (p)->GetEntries(a, b, c, d)
1877          #define IDirectDrawPalette_Initialize(p, a, b, c)       (p)->Initialize(a, b, c)
1878          #define IDirectDrawPalette_SetEntries(p, a, b, c, d)    (p)->SetEntries(a, b, c, d)
1879      #endif
1880 #endif
1881 
1882 #if defined( _WIN32 ) && !defined( _NO_COM )
1883     #undef INTERFACE
1884     #define INTERFACE IDirectDrawGammaControl
1885 
DECLARE_INTERFACE_(IDirectDrawGammaControl,IUnknown)1886     DECLARE_INTERFACE_( IDirectDrawGammaControl, IUnknown )
1887     {
1888       STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
1889       STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
1890       STDMETHOD_(ULONG,Release) (THIS) PURE;
1891       STDMETHOD(GetGammaRamp)(THIS_ DWORD, LPDDGAMMARAMP) PURE;
1892       STDMETHOD(SetGammaRamp)(THIS_ DWORD, LPDDGAMMARAMP) PURE;
1893      };
1894      #if !defined(__cplusplus) || defined(CINTERFACE)
1895          #define IDirectDrawGammaControl_QueryInterface(p, a, b)  (p)->lpVtbl->QueryInterface(p, a, b)
1896          #define IDirectDrawGammaControl_AddRef(p)                (p)->lpVtbl->AddRef(p)
1897          #define IDirectDrawGammaControl_Release(p)               (p)->lpVtbl->Release(p)
1898          #define IDirectDrawGammaControl_GetGammaRamp(p, a, b)    (p)->lpVtbl->GetGammaRamp(p, a, b)
1899          #define IDirectDrawGammaControl_SetGammaRamp(p, a, b)    (p)->lpVtbl->SetGammaRamp(p, a, b)
1900      #else
1901          #define IDirectDrawGammaControl_QueryInterface(p, a, b)  (p)->QueryInterface(a, b)
1902          #define IDirectDrawGammaControl_AddRef(p)                (p)->AddRef()
1903          #define IDirectDrawGammaControl_Release(p)               (p)->Release()
1904          #define IDirectDrawGammaControl_GetGammaRamp(p, a, b)    (p)->GetGammaRamp(a, b)
1905          #define IDirectDrawGammaControl_SetGammaRamp(p, a, b)    (p)->SetGammaRamp(a, b)
1906      #endif
1907 #endif
1908 
1909 #if defined( _WIN32 ) && !defined( _NO_COM )
1910      #undef INTERFACE
1911      #define INTERFACE IDirectDrawColorControl
1912 
DECLARE_INTERFACE_(IDirectDrawColorControl,IUnknown)1913      DECLARE_INTERFACE_( IDirectDrawColorControl, IUnknown )
1914      {
1915        STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
1916        STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
1917        STDMETHOD_(ULONG,Release) (THIS) PURE;
1918        STDMETHOD(GetColorControls)(THIS_ LPDDCOLORCONTROL) PURE;
1919        STDMETHOD(SetColorControls)(THIS_ LPDDCOLORCONTROL) PURE;
1920      };
1921      #if !defined(__cplusplus) || defined(CINTERFACE)
1922          #define IDirectDrawColorControl_QueryInterface(p, a, b)  (p)->lpVtbl->QueryInterface(p, a, b)
1923          #define IDirectDrawColorControl_AddRef(p)                (p)->lpVtbl->AddRef(p)
1924          #define IDirectDrawColorControl_Release(p)               (p)->lpVtbl->Release(p)
1925          #define IDirectDrawColorControl_GetColorControls(p, a)   (p)->lpVtbl->GetColorControls(p, a)
1926          #define IDirectDrawColorControl_SetColorControls(p, a)   (p)->lpVtbl->SetColorControls(p, a)
1927      #else
1928          #define IDirectDrawColorControl_QueryInterface(p, a, b)  (p)->QueryInterface(a, b)
1929          #define IDirectDrawColorControl_AddRef(p)                (p)->AddRef()
1930          #define IDirectDrawColorControl_Release(p)               (p)->Release()
1931          #define IDirectDrawColorControl_GetColorControls(p, a)   (p)->GetColorControls(a)
1932          #define IDirectDrawColorControl_SetColorControls(p, a)   (p)->SetColorControls(a)
1933      #endif
1934 #endif
1935 
1936 
1937 #if defined( _WIN32 ) && !defined( _NO_COM )
1938      #undef INTERFACE
1939      #define INTERFACE IDirectDrawClipper
DECLARE_INTERFACE_(IDirectDrawClipper,IUnknown)1940      DECLARE_INTERFACE_( IDirectDrawClipper, IUnknown )
1941      {
1942        STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
1943        STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
1944        STDMETHOD_(ULONG,Release) (THIS) PURE;
1945        STDMETHOD(GetClipList)(THIS_ LPRECT, LPRGNDATA, LPDWORD) PURE;
1946        STDMETHOD(GetHWnd)(THIS_ HWND *) PURE;
1947        STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD) PURE;
1948        STDMETHOD(IsClipListChanged)(THIS_ BOOL *) PURE;
1949        STDMETHOD(SetClipList)(THIS_ LPRGNDATA,DWORD) PURE;
1950        STDMETHOD(SetHWnd)(THIS_ DWORD, HWND ) PURE;
1951      };
1952      #if !defined(__cplusplus) || defined(CINTERFACE)
1953          #define IDirectDrawClipper_QueryInterface(p, a, b)  (p)->lpVtbl->QueryInterface(p, a, b)
1954          #define IDirectDrawClipper_AddRef(p)                (p)->lpVtbl->AddRef(p)
1955          #define IDirectDrawClipper_Release(p)               (p)->lpVtbl->Release(p)
1956          #define IDirectDrawClipper_GetClipList(p, a, b, c)  (p)->lpVtbl->GetClipList(p, a, b, c)
1957          #define IDirectDrawClipper_GetHWnd(p, a)            (p)->lpVtbl->GetHWnd(p, a)
1958          #define IDirectDrawClipper_Initialize(p, a, b)      (p)->lpVtbl->Initialize(p, a, b)
1959          #define IDirectDrawClipper_IsClipListChanged(p, a)  (p)->lpVtbl->IsClipListChanged(p, a)
1960          #define IDirectDrawClipper_SetClipList(p, a, b)     (p)->lpVtbl->SetClipList(p, a, b)
1961          #define IDirectDrawClipper_SetHWnd(p, a, b)         (p)->lpVtbl->SetHWnd(p, a, b)
1962      #else
1963          #define IDirectDrawClipper_QueryInterface(p, a, b)  (p)->QueryInterface(a, b)
1964          #define IDirectDrawClipper_AddRef(p)                (p)->AddRef()
1965          #define IDirectDrawClipper_Release(p)               (p)->Release()
1966          #define IDirectDrawClipper_GetClipList(p, a, b, c)  (p)->GetClipList(a, b, c)
1967          #define IDirectDrawClipper_GetHWnd(p, a)            (p)->GetHWnd(a)
1968          #define IDirectDrawClipper_Initialize(p, a, b)      (p)->Initialize(a, b)
1969          #define IDirectDrawClipper_IsClipListChanged(p, a)  (p)->IsClipListChanged(a)
1970          #define IDirectDrawClipper_SetClipList(p, a, b)     (p)->SetClipList(a, b)
1971          #define IDirectDrawClipper_SetHWnd(p, a, b)         (p)->SetHWnd(a, b)
1972      #endif
1973 #endif
1974 
1975 #if defined( _WIN32 ) && !defined( _NO_COM )
1976      #undef INTERFACE
1977      #define INTERFACE IDirectDrawSurface
1978 
DECLARE_INTERFACE_(IDirectDrawSurface,IUnknown)1979      DECLARE_INTERFACE_( IDirectDrawSurface, IUnknown )
1980      {
1981        STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
1982        STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
1983        STDMETHOD_(ULONG,Release) (THIS) PURE;
1984        STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE) PURE;
1985        STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
1986        STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE, LPRECT,DWORD, LPDDBLTFX) PURE;
1987        STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
1988        STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE, LPRECT,DWORD) PURE;
1989        STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE) PURE;
1990        STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
1991        STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
1992        STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE;
1993        STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE *) PURE;
1994        STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;
1995        STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;
1996        STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER *) PURE;
1997        STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
1998        STDMETHOD(GetDC)(THIS_ HDC *) PURE;
1999        STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
2000        STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
2001        STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE *) PURE;
2002        STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;
2003        STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;
2004        STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;
2005        STDMETHOD(IsLost)(THIS) PURE;
2006        STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;
2007        STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
2008        STDMETHOD(Restore)(THIS) PURE;
2009        STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
2010        STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
2011        STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
2012        STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
2013        STDMETHOD(Unlock)(THIS_ LPVOID) PURE;
2014        STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
2015        STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
2016        STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE) PURE;
2017      };
2018      #if !defined(__cplusplus) || defined(CINTERFACE)
2019          #define IDirectDrawSurface_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
2020          #define IDirectDrawSurface_AddRef(p)                    (p)->lpVtbl->AddRef(p)
2021          #define IDirectDrawSurface_Release(p)                   (p)->lpVtbl->Release(p)
2022          #define IDirectDrawSurface_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
2023          #define IDirectDrawSurface_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
2024          #define IDirectDrawSurface_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
2025          #define IDirectDrawSurface_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
2026          #define IDirectDrawSurface_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
2027          #define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
2028          #define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
2029          #define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
2030          #define IDirectDrawSurface_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
2031          #define IDirectDrawSurface_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
2032          #define IDirectDrawSurface_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
2033          #define IDirectDrawSurface_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)
2034          #define IDirectDrawSurface_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
2035          #define IDirectDrawSurface_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
2036          #define IDirectDrawSurface_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
2037          #define IDirectDrawSurface_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
2038          #define IDirectDrawSurface_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
2039          #define IDirectDrawSurface_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
2040          #define IDirectDrawSurface_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
2041          #define IDirectDrawSurface_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
2042          #define IDirectDrawSurface_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
2043          #define IDirectDrawSurface_IsLost(p)                    (p)->lpVtbl->IsLost(p)
2044          #define IDirectDrawSurface_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
2045          #define IDirectDrawSurface_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
2046          #define IDirectDrawSurface_Restore(p)                   (p)->lpVtbl->Restore(p)
2047          #define IDirectDrawSurface_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
2048          #define IDirectDrawSurface_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
2049          #define IDirectDrawSurface_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
2050          #define IDirectDrawSurface_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
2051          #define IDirectDrawSurface_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)
2052          #define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
2053          #define IDirectDrawSurface_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
2054          #define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
2055      #else
2056          #define IDirectDrawSurface_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
2057          #define IDirectDrawSurface_AddRef(p)                    (p)->AddRef()
2058          #define IDirectDrawSurface_Release(p)                   (p)->Release()
2059          #define IDirectDrawSurface_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
2060          #define IDirectDrawSurface_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
2061          #define IDirectDrawSurface_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
2062          #define IDirectDrawSurface_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
2063          #define IDirectDrawSurface_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
2064          #define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
2065          #define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
2066          #define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
2067          #define IDirectDrawSurface_Flip(p,a,b)                  (p)->Flip(a,b)
2068          #define IDirectDrawSurface_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
2069          #define IDirectDrawSurface_GetBltStatus(p,a)            (p)->GetBltStatus(a)
2070          #define IDirectDrawSurface_GetCaps(p,b)                 (p)->GetCaps(b)
2071          #define IDirectDrawSurface_GetClipper(p,a)              (p)->GetClipper(a)
2072          #define IDirectDrawSurface_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
2073          #define IDirectDrawSurface_GetDC(p,a)                   (p)->GetDC(a)
2074          #define IDirectDrawSurface_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
2075          #define IDirectDrawSurface_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
2076          #define IDirectDrawSurface_GetPalette(p,a)              (p)->GetPalette(a)
2077          #define IDirectDrawSurface_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
2078          #define IDirectDrawSurface_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
2079          #define IDirectDrawSurface_Initialize(p,a,b)            (p)->Initialize(a,b)
2080          #define IDirectDrawSurface_IsLost(p)                    (p)->IsLost()
2081          #define IDirectDrawSurface_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
2082          #define IDirectDrawSurface_ReleaseDC(p,a)               (p)->ReleaseDC(a)
2083          #define IDirectDrawSurface_Restore(p)                   (p)->Restore()
2084          #define IDirectDrawSurface_SetClipper(p,a)              (p)->SetClipper(a)
2085          #define IDirectDrawSurface_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
2086          #define IDirectDrawSurface_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
2087          #define IDirectDrawSurface_SetPalette(p,a)              (p)->SetPalette(a)
2088          #define IDirectDrawSurface_Unlock(p,b)                  (p)->Unlock(b)
2089          #define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
2090          #define IDirectDrawSurface_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
2091          #define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
2092      #endif
2093 #endif
2094 
2095 #if defined( _WIN32 ) && !defined( _NO_COM )
2096      #undef INTERFACE
2097      #define INTERFACE IDirectDrawSurface2
DECLARE_INTERFACE_(IDirectDrawSurface2,IUnknown)2098      DECLARE_INTERFACE_( IDirectDrawSurface2, IUnknown )
2099      {
2100        STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
2101        STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
2102        STDMETHOD_(ULONG,Release) (THIS) PURE;
2103        STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE2) PURE;
2104        STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
2105        STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX) PURE;
2106        STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
2107        STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD) PURE;
2108        STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE2) PURE;
2109        STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
2110        STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
2111        STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE2, DWORD) PURE;
2112        STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE2 *) PURE;
2113        STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;
2114        STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;
2115        STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER *) PURE;
2116        STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
2117        STDMETHOD(GetDC)(THIS_ HDC *) PURE;
2118        STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
2119        STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
2120        STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE *) PURE;
2121        STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;
2122        STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;
2123        STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;
2124        STDMETHOD(IsLost)(THIS) PURE;
2125        STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;
2126        STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
2127        STDMETHOD(Restore)(THIS) PURE;
2128        STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
2129        STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
2130        STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
2131        STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
2132        STDMETHOD(Unlock)(THIS_ LPVOID) PURE;
2133        STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
2134        STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
2135        STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE2) PURE;
2136        STDMETHOD(GetDDInterface)(THIS_ LPVOID *) PURE;
2137        STDMETHOD(PageLock)(THIS_ DWORD) PURE;
2138        STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;
2139      };
2140 
2141      #if !defined(__cplusplus) || defined(CINTERFACE)
2142          #define IDirectDrawSurface2_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
2143          #define IDirectDrawSurface2_AddRef(p)                    (p)->lpVtbl->AddRef(p)
2144          #define IDirectDrawSurface2_Release(p)                   (p)->lpVtbl->Release(p)
2145          #define IDirectDrawSurface2_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
2146          #define IDirectDrawSurface2_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
2147          #define IDirectDrawSurface2_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
2148          #define IDirectDrawSurface2_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
2149          #define IDirectDrawSurface2_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
2150          #define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
2151          #define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
2152          #define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
2153          #define IDirectDrawSurface2_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
2154          #define IDirectDrawSurface2_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
2155          #define IDirectDrawSurface2_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
2156          #define IDirectDrawSurface2_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)
2157          #define IDirectDrawSurface2_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
2158          #define IDirectDrawSurface2_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
2159          #define IDirectDrawSurface2_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
2160          #define IDirectDrawSurface2_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
2161          #define IDirectDrawSurface2_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
2162          #define IDirectDrawSurface2_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
2163          #define IDirectDrawSurface2_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
2164          #define IDirectDrawSurface2_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
2165          #define IDirectDrawSurface2_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
2166          #define IDirectDrawSurface2_IsLost(p)                    (p)->lpVtbl->IsLost(p)
2167          #define IDirectDrawSurface2_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
2168          #define IDirectDrawSurface2_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
2169          #define IDirectDrawSurface2_Restore(p)                   (p)->lpVtbl->Restore(p)
2170          #define IDirectDrawSurface2_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
2171          #define IDirectDrawSurface2_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
2172          #define IDirectDrawSurface2_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
2173          #define IDirectDrawSurface2_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
2174          #define IDirectDrawSurface2_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)
2175          #define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
2176          #define IDirectDrawSurface2_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
2177          #define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
2178          #define IDirectDrawSurface2_GetDDInterface(p,a)          (p)->lpVtbl->GetDDInterface(p,a)
2179          #define IDirectDrawSurface2_PageLock(p,a)                (p)->lpVtbl->PageLock(p,a)
2180          #define IDirectDrawSurface2_PageUnlock(p,a)              (p)->lpVtbl->PageUnlock(p,a)
2181      #else
2182          #define IDirectDrawSurface2_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
2183          #define IDirectDrawSurface2_AddRef(p)                    (p)->AddRef()
2184          #define IDirectDrawSurface2_Release(p)                   (p)->Release()
2185          #define IDirectDrawSurface2_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
2186          #define IDirectDrawSurface2_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
2187          #define IDirectDrawSurface2_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
2188          #define IDirectDrawSurface2_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
2189          #define IDirectDrawSurface2_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
2190          #define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
2191          #define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
2192          #define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
2193          #define IDirectDrawSurface2_Flip(p,a,b)                  (p)->Flip(a,b)
2194          #define IDirectDrawSurface2_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
2195          #define IDirectDrawSurface2_GetBltStatus(p,a)            (p)->GetBltStatus(a)
2196          #define IDirectDrawSurface2_GetCaps(p,b)                 (p)->GetCaps(b)
2197          #define IDirectDrawSurface2_GetClipper(p,a)              (p)->GetClipper(a)
2198          #define IDirectDrawSurface2_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
2199          #define IDirectDrawSurface2_GetDC(p,a)                   (p)->GetDC(a)
2200          #define IDirectDrawSurface2_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
2201          #define IDirectDrawSurface2_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
2202          #define IDirectDrawSurface2_GetPalette(p,a)              (p)->GetPalette(a)
2203          #define IDirectDrawSurface2_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
2204          #define IDirectDrawSurface2_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
2205          #define IDirectDrawSurface2_Initialize(p,a,b)            (p)->Initialize(a,b)
2206          #define IDirectDrawSurface2_IsLost(p)                    (p)->IsLost()
2207          #define IDirectDrawSurface2_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
2208          #define IDirectDrawSurface2_ReleaseDC(p,a)               (p)->ReleaseDC(a)
2209          #define IDirectDrawSurface2_Restore(p)                   (p)->Restore()
2210          #define IDirectDrawSurface2_SetClipper(p,a)              (p)->SetClipper(a)
2211          #define IDirectDrawSurface2_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
2212          #define IDirectDrawSurface2_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
2213          #define IDirectDrawSurface2_SetPalette(p,a)              (p)->SetPalette(a)
2214          #define IDirectDrawSurface2_Unlock(p,b)                  (p)->Unlock(b)
2215          #define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
2216          #define IDirectDrawSurface2_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
2217          #define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
2218          #define IDirectDrawSurface2_GetDDInterface(p,a)          (p)->GetDDInterface(a)
2219          #define IDirectDrawSurface2_PageLock(p,a)                (p)->PageLock(a)
2220          #define IDirectDrawSurface2_PageUnlock(p,a)              (p)->PageUnlock(a)
2221      #endif
2222 #endif
2223 
2224 #if defined( _WIN32 ) && !defined( _NO_COM )
2225 #undef INTERFACE
2226 #define INTERFACE IDirectDrawSurface3
DECLARE_INTERFACE_(IDirectDrawSurface3,IUnknown)2227 DECLARE_INTERFACE_( IDirectDrawSurface3, IUnknown )
2228 {
2229        STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
2230        STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
2231        STDMETHOD_(ULONG,Release) (THIS) PURE;
2232        STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE3) PURE;
2233        STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
2234        STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX) PURE;
2235        STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
2236        STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD) PURE;
2237        STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE3) PURE;
2238        STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
2239        STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;
2240        STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE3, DWORD) PURE;
2241        STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE3 *) PURE;
2242        STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;
2243        STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;
2244        STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER *) PURE;
2245        STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
2246        STDMETHOD(GetDC)(THIS_ HDC *) PURE;
2247        STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
2248        STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
2249        STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE *) PURE;
2250        STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;
2251        STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;
2252        STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;
2253        STDMETHOD(IsLost)(THIS) PURE;
2254        STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;
2255        STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
2256        STDMETHOD(Restore)(THIS) PURE;
2257        STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
2258        STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
2259        STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
2260        STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
2261        STDMETHOD(Unlock)(THIS_ LPVOID) PURE;
2262        STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
2263        STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
2264        STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE3) PURE;
2265        STDMETHOD(GetDDInterface)(THIS_ LPVOID *) PURE;
2266        STDMETHOD(PageLock)(THIS_ DWORD) PURE;
2267        STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;
2268        STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC, DWORD) PURE;
2269      };
2270 
2271      #if !defined(__cplusplus) || defined(CINTERFACE)
2272          #define IDirectDrawSurface3_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
2273          #define IDirectDrawSurface3_AddRef(p)                    (p)->lpVtbl->AddRef(p)
2274          #define IDirectDrawSurface3_Release(p)                   (p)->lpVtbl->Release(p)
2275          #define IDirectDrawSurface3_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
2276          #define IDirectDrawSurface3_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
2277          #define IDirectDrawSurface3_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
2278          #define IDirectDrawSurface3_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
2279          #define IDirectDrawSurface3_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
2280          #define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
2281          #define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
2282          #define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
2283          #define IDirectDrawSurface3_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
2284          #define IDirectDrawSurface3_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
2285          #define IDirectDrawSurface3_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
2286          #define IDirectDrawSurface3_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)
2287          #define IDirectDrawSurface3_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
2288          #define IDirectDrawSurface3_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
2289          #define IDirectDrawSurface3_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
2290          #define IDirectDrawSurface3_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
2291          #define IDirectDrawSurface3_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
2292          #define IDirectDrawSurface3_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
2293          #define IDirectDrawSurface3_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
2294          #define IDirectDrawSurface3_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
2295          #define IDirectDrawSurface3_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
2296          #define IDirectDrawSurface3_IsLost(p)                    (p)->lpVtbl->IsLost(p)
2297          #define IDirectDrawSurface3_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
2298          #define IDirectDrawSurface3_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
2299          #define IDirectDrawSurface3_Restore(p)                   (p)->lpVtbl->Restore(p)
2300          #define IDirectDrawSurface3_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
2301          #define IDirectDrawSurface3_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
2302          #define IDirectDrawSurface3_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
2303          #define IDirectDrawSurface3_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
2304          #define IDirectDrawSurface3_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)
2305          #define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
2306          #define IDirectDrawSurface3_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
2307          #define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
2308          #define IDirectDrawSurface3_GetDDInterface(p,a)          (p)->lpVtbl->GetDDInterface(p,a)
2309          #define IDirectDrawSurface3_PageLock(p,a)                (p)->lpVtbl->PageLock(p,a)
2310          #define IDirectDrawSurface3_PageUnlock(p,a)              (p)->lpVtbl->PageUnlock(p,a)
2311          #define IDirectDrawSurface3_SetSurfaceDesc(p,a,b)        (p)->lpVtbl->SetSurfaceDesc(p,a,b)
2312      #else
2313          #define IDirectDrawSurface3_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
2314          #define IDirectDrawSurface3_AddRef(p)                    (p)->AddRef()
2315          #define IDirectDrawSurface3_Release(p)                   (p)->Release()
2316          #define IDirectDrawSurface3_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
2317          #define IDirectDrawSurface3_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
2318          #define IDirectDrawSurface3_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
2319          #define IDirectDrawSurface3_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
2320          #define IDirectDrawSurface3_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
2321          #define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
2322          #define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
2323          #define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
2324          #define IDirectDrawSurface3_Flip(p,a,b)                  (p)->Flip(a,b)
2325          #define IDirectDrawSurface3_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
2326          #define IDirectDrawSurface3_GetBltStatus(p,a)            (p)->GetBltStatus(a)
2327          #define IDirectDrawSurface3_GetCaps(p,b)                 (p)->GetCaps(b)
2328          #define IDirectDrawSurface3_GetClipper(p,a)              (p)->GetClipper(a)
2329          #define IDirectDrawSurface3_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
2330          #define IDirectDrawSurface3_GetDC(p,a)                   (p)->GetDC(a)
2331          #define IDirectDrawSurface3_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
2332          #define IDirectDrawSurface3_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
2333          #define IDirectDrawSurface3_GetPalette(p,a)              (p)->GetPalette(a)
2334          #define IDirectDrawSurface3_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
2335          #define IDirectDrawSurface3_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
2336          #define IDirectDrawSurface3_Initialize(p,a,b)            (p)->Initialize(a,b)
2337          #define IDirectDrawSurface3_IsLost(p)                    (p)->IsLost()
2338          #define IDirectDrawSurface3_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
2339          #define IDirectDrawSurface3_ReleaseDC(p,a)               (p)->ReleaseDC(a)
2340          #define IDirectDrawSurface3_Restore(p)                   (p)->Restore()
2341          #define IDirectDrawSurface3_SetClipper(p,a)              (p)->SetClipper(a)
2342          #define IDirectDrawSurface3_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
2343          #define IDirectDrawSurface3_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
2344          #define IDirectDrawSurface3_SetPalette(p,a)              (p)->SetPalette(a)
2345          #define IDirectDrawSurface3_Unlock(p,b)                  (p)->Unlock(b)
2346          #define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
2347          #define IDirectDrawSurface3_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
2348          #define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
2349          #define IDirectDrawSurface3_GetDDInterface(p,a)          (p)->GetDDInterface(a)
2350          #define IDirectDrawSurface3_PageLock(p,a)                (p)->PageLock(a)
2351          #define IDirectDrawSurface3_PageUnlock(p,a)              (p)->PageUnlock(a)
2352          #define IDirectDrawSurface3_SetSurfaceDesc(p,a,b)        (p)->SetSurfaceDesc(a,b)
2353      #endif
2354 #endif
2355 
2356 #if defined( _WIN32 ) && !defined( _NO_COM )
2357      #undef INTERFACE
2358      #define INTERFACE IDirectDrawSurface4
2359 
DECLARE_INTERFACE_(IDirectDrawSurface4,IUnknown)2360      DECLARE_INTERFACE_( IDirectDrawSurface4, IUnknown )
2361      {
2362        STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
2363        STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
2364        STDMETHOD_(ULONG,Release) (THIS) PURE;
2365        STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE4) PURE;
2366        STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
2367        STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX) PURE;
2368        STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
2369        STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD) PURE;
2370        STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE4) PURE;
2371        STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK2) PURE;
2372        STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2) PURE;
2373        STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE4, DWORD) PURE;
2374        STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2, LPDIRECTDRAWSURFACE4 *) PURE;
2375        STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;
2376        STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2) PURE;
2377        STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER *) PURE;
2378        STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
2379        STDMETHOD(GetDC)(THIS_ HDC *) PURE;
2380        STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
2381        STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
2382        STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE *) PURE;
2383        STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;
2384        STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2) PURE;
2385        STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE;
2386        STDMETHOD(IsLost)(THIS) PURE;
2387        STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE) PURE;
2388        STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
2389        STDMETHOD(Restore)(THIS) PURE;
2390        STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
2391        STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
2392        STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
2393        STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
2394        STDMETHOD(Unlock)(THIS_ LPRECT) PURE;
2395        STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
2396        STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
2397        STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE4) PURE;
2398        STDMETHOD(GetDDInterface)(THIS_ LPVOID *) PURE;
2399        STDMETHOD(PageLock)(THIS_ DWORD) PURE;
2400        STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;
2401        STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2, DWORD) PURE;
2402        STDMETHOD(SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE;
2403        STDMETHOD(GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE;
2404        STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;
2405        STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD) PURE;
2406        STDMETHOD(ChangeUniquenessValue)(THIS) PURE;
2407      };
2408      #if !defined(__cplusplus) || defined(CINTERFACE)
2409          #define IDirectDrawSurface4_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
2410          #define IDirectDrawSurface4_AddRef(p)                    (p)->lpVtbl->AddRef(p)
2411          #define IDirectDrawSurface4_Release(p)                   (p)->lpVtbl->Release(p)
2412          #define IDirectDrawSurface4_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
2413          #define IDirectDrawSurface4_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
2414          #define IDirectDrawSurface4_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
2415          #define IDirectDrawSurface4_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
2416          #define IDirectDrawSurface4_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
2417          #define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
2418          #define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
2419          #define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
2420          #define IDirectDrawSurface4_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
2421          #define IDirectDrawSurface4_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
2422          #define IDirectDrawSurface4_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
2423          #define IDirectDrawSurface4_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)
2424          #define IDirectDrawSurface4_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
2425          #define IDirectDrawSurface4_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
2426          #define IDirectDrawSurface4_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
2427          #define IDirectDrawSurface4_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
2428          #define IDirectDrawSurface4_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
2429          #define IDirectDrawSurface4_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
2430          #define IDirectDrawSurface4_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
2431          #define IDirectDrawSurface4_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
2432          #define IDirectDrawSurface4_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
2433          #define IDirectDrawSurface4_IsLost(p)                    (p)->lpVtbl->IsLost(p)
2434          #define IDirectDrawSurface4_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
2435          #define IDirectDrawSurface4_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
2436          #define IDirectDrawSurface4_Restore(p)                   (p)->lpVtbl->Restore(p)
2437          #define IDirectDrawSurface4_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
2438          #define IDirectDrawSurface4_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
2439          #define IDirectDrawSurface4_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
2440          #define IDirectDrawSurface4_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
2441          #define IDirectDrawSurface4_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)
2442          #define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
2443          #define IDirectDrawSurface4_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
2444          #define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
2445          #define IDirectDrawSurface4_GetDDInterface(p,a)          (p)->lpVtbl->GetDDInterface(p,a)
2446          #define IDirectDrawSurface4_PageLock(p,a)                (p)->lpVtbl->PageLock(p,a)
2447          #define IDirectDrawSurface4_PageUnlock(p,a)              (p)->lpVtbl->PageUnlock(p,a)
2448          #define IDirectDrawSurface4_SetSurfaceDesc(p,a,b)        (p)->lpVtbl->SetSurfaceDesc(p,a,b)
2449          #define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
2450          #define IDirectDrawSurface4_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
2451          #define IDirectDrawSurface4_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
2452          #define IDirectDrawSurface4_GetUniquenessValue(p, a)     (p)->lpVtbl->GetUniquenessValue(p, a)
2453          #define IDirectDrawSurface4_ChangeUniquenessValue(p)     (p)->lpVtbl->ChangeUniquenessValue(p)
2454      #else
2455          #define IDirectDrawSurface4_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
2456          #define IDirectDrawSurface4_AddRef(p)                    (p)->AddRef()
2457          #define IDirectDrawSurface4_Release(p)                   (p)->Release()
2458          #define IDirectDrawSurface4_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
2459          #define IDirectDrawSurface4_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
2460          #define IDirectDrawSurface4_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
2461          #define IDirectDrawSurface4_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
2462          #define IDirectDrawSurface4_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
2463          #define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
2464          #define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
2465          #define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
2466          #define IDirectDrawSurface4_Flip(p,a,b)                  (p)->Flip(a,b)
2467          #define IDirectDrawSurface4_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
2468          #define IDirectDrawSurface4_GetBltStatus(p,a)            (p)->GetBltStatus(a)
2469          #define IDirectDrawSurface4_GetCaps(p,b)                 (p)->GetCaps(b)
2470          #define IDirectDrawSurface4_GetClipper(p,a)              (p)->GetClipper(a)
2471          #define IDirectDrawSurface4_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
2472          #define IDirectDrawSurface4_GetDC(p,a)                   (p)->GetDC(a)
2473          #define IDirectDrawSurface4_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
2474          #define IDirectDrawSurface4_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
2475          #define IDirectDrawSurface4_GetPalette(p,a)              (p)->GetPalette(a)
2476          #define IDirectDrawSurface4_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
2477          #define IDirectDrawSurface4_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
2478          #define IDirectDrawSurface4_Initialize(p,a,b)            (p)->Initialize(a,b)
2479          #define IDirectDrawSurface4_IsLost(p)                    (p)->IsLost()
2480          #define IDirectDrawSurface4_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
2481          #define IDirectDrawSurface4_ReleaseDC(p,a)               (p)->ReleaseDC(a)
2482          #define IDirectDrawSurface4_Restore(p)                   (p)->Restore()
2483          #define IDirectDrawSurface4_SetClipper(p,a)              (p)->SetClipper(a)
2484          #define IDirectDrawSurface4_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
2485          #define IDirectDrawSurface4_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
2486          #define IDirectDrawSurface4_SetPalette(p,a)              (p)->SetPalette(a)
2487          #define IDirectDrawSurface4_Unlock(p,b)                  (p)->Unlock(b)
2488          #define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
2489          #define IDirectDrawSurface4_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
2490          #define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
2491          #define IDirectDrawSurface4_GetDDInterface(p,a)          (p)->GetDDInterface(a)
2492          #define IDirectDrawSurface4_PageLock(p,a)                (p)->PageLock(a)
2493          #define IDirectDrawSurface4_PageUnlock(p,a)              (p)->PageUnlock(a)
2494          #define IDirectDrawSurface4_SetSurfaceDesc(p,a,b)        (p)->SetSurfaceDesc(a,b)
2495          #define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
2496          #define IDirectDrawSurface4_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
2497          #define IDirectDrawSurface4_FreePrivateData(p,a)         (p)->FreePrivateData(a)
2498          #define IDirectDrawSurface4_GetUniquenessValue(p, a)     (p)->GetUniquenessValue(a)
2499          #define IDirectDrawSurface4_ChangeUniquenessValue(p)     (p)->ChangeUniquenessValue()
2500      #endif
2501 #endif
2502 
2503 #if defined( _WIN32 ) && !defined( _NO_COM )
2504      #undef INTERFACE
2505      #define INTERFACE IDirectDrawSurface7
2506 
DECLARE_INTERFACE_(IDirectDrawSurface7,IUnknown)2507      DECLARE_INTERFACE_( IDirectDrawSurface7, IUnknown )
2508      {
2509        STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
2510        STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
2511        STDMETHOD_(ULONG,Release) (THIS) PURE;
2512        STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE7) PURE;
2513        STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;
2514        STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE7, LPRECT,DWORD, LPDDBLTFX) PURE;
2515        STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;
2516        STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE7, LPRECT,DWORD) PURE;
2517        STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE7) PURE;
2518        STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK7) PURE;
2519        STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK7) PURE;
2520        STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE7, DWORD) PURE;
2521        STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2, LPDIRECTDRAWSURFACE7 *) PURE;
2522        STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;
2523        STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2) PURE;
2524        STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER *) PURE;
2525        STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
2526        STDMETHOD(GetDC)(THIS_ HDC *) PURE;
2527        STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;
2528        STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;
2529        STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE *) PURE;
2530        STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;
2531        STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2) PURE;
2532        STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE;
2533        STDMETHOD(IsLost)(THIS) PURE;
2534        STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE) PURE;
2535        STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;
2536        STDMETHOD(Restore)(THIS) PURE;
2537        STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;
2538        STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;
2539        STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;
2540        STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;
2541        STDMETHOD(Unlock)(THIS_ LPRECT) PURE;
2542        STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE7,LPRECT,DWORD, LPDDOVERLAYFX) PURE;
2543        STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;
2544        STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE7) PURE;
2545        STDMETHOD(GetDDInterface)(THIS_ LPVOID *) PURE;
2546        STDMETHOD(PageLock)(THIS_ DWORD) PURE;
2547        STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;
2548        STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2, DWORD) PURE;
2549        STDMETHOD(SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE;
2550        STDMETHOD(GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE;
2551        STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;
2552        STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD) PURE;
2553        STDMETHOD(ChangeUniquenessValue)(THIS) PURE;
2554        STDMETHOD(SetPriority)(THIS_ DWORD) PURE;
2555        STDMETHOD(GetPriority)(THIS_ LPDWORD) PURE;
2556        STDMETHOD(SetLOD)(THIS_ DWORD) PURE;
2557        STDMETHOD(GetLOD)(THIS_ LPDWORD) PURE;
2558      };
2559      #if !defined(__cplusplus) || defined(CINTERFACE)
2560          #define IDirectDrawSurface7_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
2561          #define IDirectDrawSurface7_AddRef(p)                    (p)->lpVtbl->AddRef(p)
2562          #define IDirectDrawSurface7_Release(p)                   (p)->lpVtbl->Release(p)
2563          #define IDirectDrawSurface7_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)
2564          #define IDirectDrawSurface7_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)
2565          #define IDirectDrawSurface7_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)
2566          #define IDirectDrawSurface7_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)
2567          #define IDirectDrawSurface7_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)
2568          #define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
2569          #define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
2570          #define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
2571          #define IDirectDrawSurface7_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
2572          #define IDirectDrawSurface7_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)
2573          #define IDirectDrawSurface7_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)
2574          #define IDirectDrawSurface7_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)
2575          #define IDirectDrawSurface7_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)
2576          #define IDirectDrawSurface7_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)
2577          #define IDirectDrawSurface7_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)
2578          #define IDirectDrawSurface7_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)
2579          #define IDirectDrawSurface7_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)
2580          #define IDirectDrawSurface7_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)
2581          #define IDirectDrawSurface7_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)
2582          #define IDirectDrawSurface7_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)
2583          #define IDirectDrawSurface7_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)
2584          #define IDirectDrawSurface7_IsLost(p)                    (p)->lpVtbl->IsLost(p)
2585          #define IDirectDrawSurface7_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)
2586          #define IDirectDrawSurface7_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)
2587          #define IDirectDrawSurface7_Restore(p)                   (p)->lpVtbl->Restore(p)
2588          #define IDirectDrawSurface7_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)
2589          #define IDirectDrawSurface7_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)
2590          #define IDirectDrawSurface7_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)
2591          #define IDirectDrawSurface7_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)
2592          #define IDirectDrawSurface7_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)
2593          #define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
2594          #define IDirectDrawSurface7_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)
2595          #define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
2596          #define IDirectDrawSurface7_GetDDInterface(p,a)          (p)->lpVtbl->GetDDInterface(p,a)
2597          #define IDirectDrawSurface7_PageLock(p,a)                (p)->lpVtbl->PageLock(p,a)
2598          #define IDirectDrawSurface7_PageUnlock(p,a)              (p)->lpVtbl->PageUnlock(p,a)
2599          #define IDirectDrawSurface7_SetSurfaceDesc(p,a,b)        (p)->lpVtbl->SetSurfaceDesc(p,a,b)
2600          #define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
2601          #define IDirectDrawSurface7_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)
2602          #define IDirectDrawSurface7_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)
2603          #define IDirectDrawSurface7_GetUniquenessValue(p, a)     (p)->lpVtbl->GetUniquenessValue(p, a)
2604          #define IDirectDrawSurface7_ChangeUniquenessValue(p)     (p)->lpVtbl->ChangeUniquenessValue(p)
2605          #define IDirectDrawSurface7_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)
2606          #define IDirectDrawSurface7_GetPriority(p,a)             (p)->lpVtbl->GetPriority(p,a)
2607          #define IDirectDrawSurface7_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)
2608          #define IDirectDrawSurface7_GetLOD(p,a)                  (p)->lpVtbl->GetLOD(p,a)
2609      #else
2610          #define IDirectDrawSurface7_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
2611          #define IDirectDrawSurface7_AddRef(p)                    (p)->AddRef()
2612          #define IDirectDrawSurface7_Release(p)                   (p)->Release()
2613          #define IDirectDrawSurface7_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)
2614          #define IDirectDrawSurface7_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)
2615          #define IDirectDrawSurface7_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)
2616          #define IDirectDrawSurface7_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)
2617          #define IDirectDrawSurface7_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)
2618          #define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
2619          #define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)
2620          #define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)
2621          #define IDirectDrawSurface7_Flip(p,a,b)                  (p)->Flip(a,b)
2622          #define IDirectDrawSurface7_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)
2623          #define IDirectDrawSurface7_GetBltStatus(p,a)            (p)->GetBltStatus(a)
2624          #define IDirectDrawSurface7_GetCaps(p,b)                 (p)->GetCaps(b)
2625          #define IDirectDrawSurface7_GetClipper(p,a)              (p)->GetClipper(a)
2626          #define IDirectDrawSurface7_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)
2627          #define IDirectDrawSurface7_GetDC(p,a)                   (p)->GetDC(a)
2628          #define IDirectDrawSurface7_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)
2629          #define IDirectDrawSurface7_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)
2630          #define IDirectDrawSurface7_GetPalette(p,a)              (p)->GetPalette(a)
2631          #define IDirectDrawSurface7_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)
2632          #define IDirectDrawSurface7_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)
2633          #define IDirectDrawSurface7_Initialize(p,a,b)            (p)->Initialize(a,b)
2634          #define IDirectDrawSurface7_IsLost(p)                    (p)->IsLost()
2635          #define IDirectDrawSurface7_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)
2636          #define IDirectDrawSurface7_ReleaseDC(p,a)               (p)->ReleaseDC(a)
2637          #define IDirectDrawSurface7_Restore(p)                   (p)->Restore()
2638          #define IDirectDrawSurface7_SetClipper(p,a)              (p)->SetClipper(a)
2639          #define IDirectDrawSurface7_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)
2640          #define IDirectDrawSurface7_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)
2641          #define IDirectDrawSurface7_SetPalette(p,a)              (p)->SetPalette(a)
2642          #define IDirectDrawSurface7_Unlock(p,b)                  (p)->Unlock(b)
2643          #define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)
2644          #define IDirectDrawSurface7_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)
2645          #define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)
2646          #define IDirectDrawSurface7_GetDDInterface(p,a)          (p)->GetDDInterface(a)
2647          #define IDirectDrawSurface7_PageLock(p,a)                (p)->PageLock(a)
2648          #define IDirectDrawSurface7_PageUnlock(p,a)              (p)->PageUnlock(a)
2649          #define IDirectDrawSurface7_SetSurfaceDesc(p,a,b)        (p)->SetSurfaceDesc(a,b)
2650          #define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)
2651          #define IDirectDrawSurface7_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)
2652          #define IDirectDrawSurface7_FreePrivateData(p,a)         (p)->FreePrivateData(a)
2653          #define IDirectDrawSurface7_GetUniquenessValue(p, a)     (p)->GetUniquenessValue(a)
2654          #define IDirectDrawSurface7_ChangeUniquenessValue(p)     (p)->ChangeUniquenessValue()
2655          #define IDirectDrawSurface7_SetPriority(p,a)             (p)->SetPriority(a)
2656          #define IDirectDrawSurface7_GetPriority(p,a)             (p)->GetPriority(a)
2657          #define IDirectDrawSurface7_SetLOD(p,a)                  (p)->SetLOD(a)
2658          #define IDirectDrawSurface7_GetLOD(p,a)                  (p)->GetLOD(a)
2659      #endif
2660 #endif
2661 #undef INTERFACE
2662 
2663 #ifdef __cplusplus
2664 }
2665 #endif
2666 
2667 #ifdef ENABLE_NAMELESS_UNION_PRAGMA
2668   #pragma warning(default:4201)
2669 #endif
2670 
2671 #endif
2672