Skip to main content
gamedev.net
🔒 Locked

DDraw Window

Started by doorstop 0 replies 300+ views
Original Post
doorstop
doorstop
I''m a newbie and I just can''t get a window to open. Here''s the code but all it seems to do is make the screen flicker. What am I doing wrong. The Lib files are dxguid and ddraw. #include <iostream> #include <ddraw.h> #include <windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam); LPDIRECTDRAW7 lpDD; LPDIRECTDRAWSURFACE7 lpPrimary; LPDIRECTDRAWSURFACE7 lpBack; DDSURFACEDESC2 ddsd; DDSCAPS2 ddcaps; HRESULT ddrval; int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow) { HWND hWnd; MSG msg; WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = LoadIcon(NULL, IDI_EXCLAMATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = "Isometric"; wc.hIconSm = LoadIcon(NULL, IDI_EXCLAMATION); //register the new class RegisterClassEx(&wc); //create a window hWnd = CreateWindowEx( NULL, "DDraw Success", "DDraw Success", WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL ); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (msg.wParam); } LRESULT CALLBACK WndProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { switch(nMsg) { case WM_CREATE: ddrval = DirectDrawCreateEx(NULL,(void **)&lpDD,IID_IDirectDraw7, NULL); ddrval = lpDD->SetCooperativeLevel(hWnd, DDSCL_NORMAL); ddrval = lpDD->SetDisplayMode(1024,768,16,0,0); ZeroMemory(&ddsd,sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX; ddsd.dwBackBufferCount = 1; ddrval = lpDD->CreateSurface(&ddsd, &lpPrimary, NULL); ZeroMemory(&ddcaps,sizeof(ddcaps)); ddcaps.dwCaps = DDSCAPS_BACKBUFFER; ddrval = lpPrimary->GetAttachedSurface(&ddcaps, &lpBack); break; case WM_DESTROY: KillTimer(hWnd, 1); PostQuitMessage(0); break; default: return(DefWindowProc(hWnd, nMsg, wParam, lParam)); } return 0; }
Pzh
Pzh
You set NORMAL cooperative level , it''s mean that you want
to run application in window-mode.In that case you can''t
FLIP and attach surfaces ( DDSCAPS_FLIP | DDSCAPS_COMPLEX )
Also you can''t switch videomode.

Use EXCLUSIVE cooperative level.

ddraw->SetCooperativeLevel( HWND, DDSCL_EXCLUSIVE |
DDSCL_FULLSCREEN);

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.