I'm having trouble to get a windowed DirectDraw to work
(I can get it in fullscreen though). Below is the setup process
and when running it fails to create a primary surface.
What could be wrong?
I'm also not 100% sure this is the right way since I'm having
a hard time finding the info I need (yes, I have been searching...).
The code below is inspired from a few sources I found plus a
little guessing...
I'm using Visual C++, version 6 I believe...
MainWindow is a window (a dialog actually).Code:BOOL Setup() { //Data DDSCAPS2 SurfaceCaps; DDSURFACEDESC2 SurfaceDesc; DDBLTFX BlitFx; //Create DirectDraw object if(FAILED(DirectDrawCreateEx(NULL, (LPVOID*)&DirectDraw, IID_IDirectDraw7, NULL))) { MessageBox(MainWindow, "Unable to create DirectDraw object!", "Setup failed!", MB_OK | MB_ICONINFORMATION); return FALSE; } //Set the cooperative level if(FAILED(DirectDraw->SetCooperativeLevel(MainWindow, DDSCL_NORMAL | DDSCL_ALLOWREBOOT))) { MessageBox(MainWindow, "Unable to set Cooperative level!", "Setup failed!", MB_OK | MB_ICONINFORMATION); return FALSE; } //Set parameters ZeroMemory(&SurfaceDesc, sizeof(DDSURFACEDESC2)); SurfaceDesc.dwSize = sizeof(DDSURFACEDESC2); SurfaceDesc.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT | DDSD_WIDTH | DDSD_HEIGHT; SurfaceDesc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX; SurfaceDesc.dwBackBufferCount = 1; SurfaceDesc.dwWidth = SCREENWIDTH; SurfaceDesc.dwHeight = SCREENHEIGHT; //Create the primary surface if(FAILED(DirectDraw->CreateSurface(&SurfaceDesc, &PrimarySurface, NULL))) { MessageBox(MainWindow, "Unable to create primary surface!", "Setup failed!", MB_OK | MB_ICONINFORMATION); return FALSE; } //Set parameters ZeroMemory(&SurfaceCaps, sizeof(DDSCAPS2)); SurfaceCaps.dwCaps = DDSCAPS_BACKBUFFER; //Create the secondary surface (back buffer) if(FAILED(PrimarySurface->GetAttachedSurface(&SurfaceCaps, &SecondarySurface))) { MessageBox(MainWindow, "Unable to create secondary surface!", "Setup failed!", MB_OK | MB_ICONINFORMATION); return FALSE; } //Initiate all buffers with black /* ZeroMemory(&BlitFx, sizeof(DDBLTFX)); BlitFx.dwSize = sizeof(DDBLTFX); BlitFx.dwFillColor = 0x00000000; PrimarySurface->Blt(NULL, NULL, NULL, DDBLT_COLORFILL, &BlitFx); SecondarySurface->Blt(NULL, NULL, NULL, DDBLT_COLORFILL, &BlitFx); */ //Creates a clipper if(FAILED(DirectDraw->CreateClipper(0, &Clipper, NULL))) { MessageBox(MainWindow, "Unable to create Clipper!", "Setup failed!", MB_OK | MB_ICONINFORMATION); return FALSE; } //Attaches the clipper to the window if(FAILED(Clipper->SetHWnd(0, MainWindow))) { Clipper->Release(); MessageBox(MainWindow, "Unable to attach Clipper to window!", "Setup failed!", MB_OK | MB_ICONINFORMATION); return FALSE; } //Attaches the clipper to the primary surface if(FAILED(PrimarySurface->SetClipper(Clipper))) { Clipper->Release(); MessageBox(MainWindow, "Unable to attach Clipper to primary surface!", "Setup failed!", MB_OK | MB_ICONINFORMATION); return FALSE; } //Load the graphics if(LoadGraphics() == FALSE) { return FALSE; } //Return success return TRUE; }



LinkBack URL
About LinkBacks
).


