4 LPDIRECTDRAW7 DirectDraw
= NULL
;
5 LPDIRECTDRAWSURFACE7 FrontBuffer
= NULL
;
6 LPDIRECTDRAWCLIPPER Clipper
= NULL
;
8 PCHAR
DDErrorString (HRESULT hResult
);
9 LONG WINAPI
WndProc (HWND hwnd
, UINT message
, UINT wParam
, LONG lParam
);
11 bool Fullscreen
, Running
;
19 // Create the main object
20 OutputDebugString("=> DirectDrawCreateEx\n");
21 hResult
= DirectDrawCreateEx(NULL
, (VOID
**)&DirectDraw
, IID_IDirectDraw7
, NULL
);
25 MessageBox(0,DDErrorString(hResult
), "DirectDrawCreateEx", 0);
29 // Set Fullscreen or windowed mode
30 OutputDebugString("=> DDraw->SetCooperativeLevel\n");
33 hResult
= DirectDraw
->SetCooperativeLevel (hwnd
, DDSCL_EXCLUSIVE
| DDSCL_FULLSCREEN
);
35 hResult
= DirectDraw
->SetCooperativeLevel (hwnd
, DDSCL_NORMAL
);
39 MessageBox(0,DDErrorString(hResult
), "DDraw->SetCooperativeLevel", 0);
43 // Set the new resolution
46 OutputDebugString("=> DDraw->SetDisplayMode\n");
47 hResult
= DirectDraw
->SetDisplayMode (800, 600, 32, 0, 0);
51 MessageBox(0,DDErrorString(hResult
), "DDraw->SetDisplayMode", 0);
56 // Create the primary surface
57 memset(&ddsd
, 0, sizeof(DDSURFACEDESC2
));
59 ddsd
.dwSize
= sizeof(DDSURFACEDESC2
);
60 ddsd
.dwFlags
= DDSD_CAPS
;
61 ddsd
.ddsCaps
.dwCaps
= DDSCAPS_PRIMARYSURFACE
;
63 OutputDebugString("=> DDraw->CreateSurface\n");
64 hResult
= DirectDraw
->CreateSurface(&ddsd
, &FrontBuffer
, NULL
);
68 MessageBox(0,DDErrorString(hResult
), "DDraw->CreateSurface", 0);
74 OutputDebugString("=> DDraw->CreateClipper\n");
76 hResult
= DirectDraw
->CreateClipper(0,&Clipper
,NULL
);
79 MessageBox(0,DDErrorString(hResult
), "DDraw->CreateSurface", 0);
83 OutputDebugString("=> Clipper->SetHWnd\n");
84 hResult
= Clipper
->SetHWnd(0,hwnd
);
87 MessageBox(0,DDErrorString(hResult
), "Clipper->SetHWnd", 0);
91 OutputDebugString("=> Suface->SetClipper\n");
92 hResult
= FrontBuffer
->SetClipper(Clipper
);
95 MessageBox(0,DDErrorString(hResult
), "FrontBuffer->SetClipper", 0);
103 void Draw (HWND hwnd
)
105 // Make the frontbuffer pink
107 GetWindowRect(hwnd
, &rect
); // this is not necessary when clippper is used
110 ddbltfx
.dwSize
= sizeof(DDBLTFX
);
111 ddbltfx
.dwFillColor
= RGB(255, 0, 255);
113 OutputDebugString("=> Surface->Blt (DDBLT_COLORFILL)\n");
115 FrontBuffer
->Blt(&rect
, NULL
, NULL
, DDBLT_COLORFILL
| DDBLT_WAIT
, &ddbltfx
);
122 OutputDebugString("=> Clipper->Release\n");
127 if (FrontBuffer
!= NULL
)
129 OutputDebugString("=> Surface->Release\n");
130 FrontBuffer
->Release();
133 if (DirectDraw
!= NULL
)
135 OutputDebugString("=> DDraw->Release\n");
136 DirectDraw
->Release();
141 int WINAPI
WinMain (HINSTANCE hInst
, HINSTANCE hPrevInst
,
142 LPSTR lpCmdLine
, int nCmdShow
)
147 Fullscreen
= MessageBox(0, "Do you want to me to run in Fullscreen ?", 0, MB_YESNO
) == IDYES
;
150 wndclass
.style
= CS_HREDRAW
| CS_VREDRAW
;
151 wndclass
.lpfnWndProc
= WndProc
;
152 wndclass
.cbClsExtra
= 0;
153 wndclass
.cbWndExtra
= 0;
154 wndclass
.hInstance
= hInst
;
155 wndclass
.hIcon
= LoadIcon (NULL
, IDI_APPLICATION
);
156 wndclass
.hCursor
= LoadCursor (NULL
, IDC_ARROW
);
157 wndclass
.hbrBackground
= (HBRUSH
)GetStockObject (LTGRAY_BRUSH
);
158 wndclass
.lpszMenuName
= NULL
;
159 wndclass
.lpszClassName
= "DDrawDemo";
161 RegisterClass(&wndclass
);
163 HWND hwnd
= CreateWindow("DDrawDemo",
164 "ReactOS DirectDraw Demo",
166 Fullscreen
? WS_POPUP
: WS_OVERLAPPEDWINDOW
,
182 ShowWindow(hwnd
, nCmdShow
);
192 if (PeekMessage(&msg
,NULL
,0,0,PM_REMOVE
))
194 if (msg
.message
== WM_QUIT
) break;
195 TranslateMessage(&msg
);
196 DispatchMessage(&msg
);
206 LONG WINAPI
WndProc (HWND hwnd
, UINT message
,
207 UINT wParam
, LONG lParam
)
234 return DefWindowProc (hwnd
, message
, wParam
, lParam
);
237 PCHAR
DDErrorString (HRESULT hResult
)
241 case DD_OK
: return "DD_OK";
242 case DDERR_ALREADYINITIALIZED
: return "DDERR_ALREADYINITIALIZED";
243 case DDERR_CANNOTATTACHSURFACE
: return "DDERR_CANNOTATTACHSURFACE";
244 case DDERR_CANNOTDETACHSURFACE
: return "DDERR_CANNOTDETACHSURFACE";
245 case DDERR_CURRENTLYNOTAVAIL
: return "DDERR_CURRENTLYNOTAVAIL";
246 case DDERR_EXCEPTION
: return "DDERR_EXCEPTION";
247 case DDERR_GENERIC
: return "DDERR_GENERIC";
248 case DDERR_HEIGHTALIGN
: return "DDERR_HEIGHTALIGN";
249 case DDERR_INCOMPATIBLEPRIMARY
: return "DDERR_INCOMPATIBLEPRIMARY";
250 case DDERR_INVALIDCAPS
: return "DDERR_INVALIDCAPS";
251 case DDERR_INVALIDCLIPLIST
: return "DDERR_INVALIDCLIPLIST";
252 case DDERR_INVALIDMODE
: return "DDERR_INVALIDMODE";
253 case DDERR_INVALIDOBJECT
: return "DDERR_INVALIDOBJECT";
254 case DDERR_INVALIDPARAMS
: return "DDERR_INVALIDPARAMS";
255 case DDERR_INVALIDPIXELFORMAT
: return "DDERR_INVALIDPIXELFORMAT";
256 case DDERR_INVALIDRECT
: return "DDERR_INVALIDRECT";
257 case DDERR_LOCKEDSURFACES
: return "DDERR_LOCKEDSURFACES";
258 case DDERR_NO3D
: return "DDERR_NO3D";
259 case DDERR_NOALPHAHW
: return "DDERR_NOALPHAHW";
260 case DDERR_NOCLIPLIST
: return "DDERR_NOCLIPLIST";
261 case DDERR_NOCOLORCONVHW
: return "DDERR_NOCOLORCONVHW";
262 case DDERR_NOCOOPERATIVELEVELSET
: return "DDERR_NOCOOPERATIVELEVELSET";
263 case DDERR_NOCOLORKEY
: return "DDERR_NOCOLORKEY";
264 case DDERR_NOCOLORKEYHW
: return "DDERR_NOCOLORKEYHW";
265 case DDERR_NODIRECTDRAWSUPPORT
: return "DDERR_NODIRECTDRAWSUPPORT";
266 case DDERR_NOEXCLUSIVEMODE
: return "DDERR_NOEXCLUSIVEMODE";
267 case DDERR_NOFLIPHW
: return "DDERR_NOFLIPHW";
268 case DDERR_NOGDI
: return "DDERR_NOGDI";
269 case DDERR_NOMIRRORHW
: return "DDERR_NOMIRRORHW";
270 case DDERR_NOTFOUND
: return "DDERR_NOTFOUND";
271 case DDERR_NOOVERLAYHW
: return "DDERR_NOOVERLAYHW";
272 case DDERR_NORASTEROPHW
: return "DDERR_NORASTEROPHW";
273 case DDERR_NOROTATIONHW
: return "DDERR_NOROTATIONHW";
274 case DDERR_NOSTRETCHHW
: return "DDERR_NOSTRETCHHW";
275 case DDERR_NOT4BITCOLOR
: return "DDERR_NOT4BITCOLOR";
276 case DDERR_NOT4BITCOLORINDEX
: return "DDERR_NOT4BITCOLORINDEX";
277 case DDERR_NOT8BITCOLOR
: return "DDERR_NOT8BITCOLOR";
278 case DDERR_NOTEXTUREHW
: return "DDERR_NOTEXTUREHW";
279 case DDERR_NOVSYNCHW
: return "DDERR_NOVSYNCHW";
280 case DDERR_NOZBUFFERHW
: return "DDERR_NOZBUFFERHW";
281 case DDERR_NOZOVERLAYHW
: return "DDERR_NOZOVERLAYHW";
282 case DDERR_OUTOFCAPS
: return "DDERR_OUTOFCAPS";
283 case DDERR_OUTOFMEMORY
: return "DDERR_OUTOFMEMORY";
284 case DDERR_OUTOFVIDEOMEMORY
: return "DDERR_OUTOFVIDEOMEMORY";
285 case DDERR_OVERLAYCANTCLIP
: return "DDERR_OVERLAYCANTCLIP";
286 case DDERR_OVERLAYCOLORKEYONLYONEACTIVE
: return "DDERR_OVERLAYCOLORKEYONLYONEACTIVE";
287 case DDERR_PALETTEBUSY
: return "DDERR_PALETTEBUSY";
288 case DDERR_COLORKEYNOTSET
: return "DDERR_COLORKEYNOTSET";
289 case DDERR_SURFACEALREADYATTACHED
: return "DDERR_SURFACEALREADYATTACHED";
290 case DDERR_SURFACEALREADYDEPENDENT
: return "DDERR_SURFACEALREADYDEPENDENT";
291 case DDERR_SURFACEBUSY
: return "DDERR_SURFACEBUSY";
292 case DDERR_CANTLOCKSURFACE
: return "DDERR_CANTLOCKSURFACE";
293 case DDERR_SURFACEISOBSCURED
: return "DDERR_SURFACEISOBSCURED";
294 case DDERR_SURFACELOST
: return "DDERR_SURFACELOST";
295 case DDERR_SURFACENOTATTACHED
: return "DDERR_SURFACENOTATTACHED";
296 case DDERR_TOOBIGHEIGHT
: return "DDERR_TOOBIGHEIGHT";
297 case DDERR_TOOBIGSIZE
: return "DDERR_TOOBIGSIZE";
298 case DDERR_TOOBIGWIDTH
: return "DDERR_TOOBIGWIDTH";
299 case DDERR_UNSUPPORTED
: return "DDERR_UNSUPPORTED";
300 case DDERR_UNSUPPORTEDFORMAT
: return "DDERR_UNSUPPORTEDFORMAT";
301 case DDERR_UNSUPPORTEDMASK
: return "DDERR_UNSUPPORTEDMASK";
302 case DDERR_VERTICALBLANKINPROGRESS
: return "DDERR_VERTICALBLANKINPROGRESS";
303 case DDERR_WASSTILLDRAWING
: return "DDERR_WASSTILLDRAWING";
304 case DDERR_XALIGN
: return "DDERR_XALIGN";
305 case DDERR_INVALIDDIRECTDRAWGUID
: return "DDERR_INVALIDDIRECTDRAWGUID";
306 case DDERR_DIRECTDRAWALREADYCREATED
: return "DDERR_DIRECTDRAWALREADYCREATED";
307 case DDERR_NODIRECTDRAWHW
: return "DDERR_NODIRECTDRAWHW";
308 case DDERR_PRIMARYSURFACEALREADYEXISTS
: return "DDERR_PRIMARYSURFACEALREADYEXISTS";
309 case DDERR_NOEMULATION
: return "DDERR_NOEMULATION";
310 case DDERR_REGIONTOOSMALL
: return "DDERR_REGIONTOOSMALL";
311 case DDERR_CLIPPERISUSINGHWND
: return "DDERR_CLIPPERISUSINGHWND";
312 case DDERR_NOCLIPPERATTACHED
: return "DDERR_NOCLIPPERATTACHED";
313 case DDERR_NOHWND
: return "DDERR_NOHWND";
314 case DDERR_HWNDSUBCLASSED
: return "DDERR_HWNDSUBCLASSED";
315 case DDERR_HWNDALREADYSET
: return "DDERR_HWNDALREADYSET";
316 case DDERR_NOPALETTEATTACHED
: return "DDERR_NOPALETTEATTACHED";
317 case DDERR_NOPALETTEHW
: return "DDERR_NOPALETTEHW";
318 case DDERR_BLTFASTCANTCLIP
: return "DDERR_BLTFASTCANTCLIP";
319 case DDERR_NOBLTHW
: return "DDERR_NOBLTHW";
320 case DDERR_NODDROPSHW
: return "DDERR_NODDROPSHW";
321 case DDERR_OVERLAYNOTVISIBLE
: return "DDERR_OVERLAYNOTVISIBLE";
322 case DDERR_NOOVERLAYDEST
: return "DDERR_NOOVERLAYDEST";
323 case DDERR_INVALIDPOSITION
: return "DDERR_INVALIDPOSITION";
324 case DDERR_NOTAOVERLAYSURFACE
: return "DDERR_NOTAOVERLAYSURFACE";
325 case DDERR_EXCLUSIVEMODEALREADYSET
: return "DDERR_EXCLUSIVEMODEALREADYSET";
326 case DDERR_NOTFLIPPABLE
: return "DDERR_NOTFLIPPABLE";
327 case DDERR_CANTDUPLICATE
: return "DDERR_CANTDUPLICATE";
328 case DDERR_NOTLOCKED
: return "DDERR_NOTLOCKED";
329 case DDERR_CANTCREATEDC
: return "DDERR_CANTCREATEDC";
330 case DDERR_NODC
: return "DDERR_NODC";
331 case DDERR_WRONGMODE
: return "DDERR_WRONGMODE";
332 case DDERR_IMPLICITLYCREATED
: return "DDERR_IMPLICITLYCREATED";
333 case DDERR_NOTPALETTIZED
: return "DDERR_NOTPALETTIZED";
334 case DDERR_UNSUPPORTEDMODE
: return "DDERR_UNSUPPORTEDMODE";
335 case DDERR_NOMIPMAPHW
: return "DDERR_NOMIPMAPHW";
336 case DDERR_INVALIDSURFACETYPE
: return "DDERR_INVALIDSURFACETYPE";
337 case DDERR_DCALREADYCREATED
: return "DDERR_DCALREADYCREATED";
338 case DDERR_CANTPAGELOCK
: return "DDERR_CANTPAGELOCK";
339 case DDERR_CANTPAGEUNLOCK
: return "DDERR_CANTPAGEUNLOCK";
340 case DDERR_NOTPAGELOCKED
: return "DDERR_NOTPAGELOCKED";
341 case DDERR_NOTINITIALIZED
: return "DDERR_NOTINITIALIZED";
343 return "Unknown Error";