BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // Store instance handle in our global variable
//Modified code begin
DDSURFACEDESC ddsd;
DDSCAPS ddscaps;
HRESULT ddrval;
HDC hdc;
char buf[256];
//create a window
hWnd = CreateWindowEx(
WS_EX_TOPMOST,
szWindowClass,
szTitle,
WS_POPUP,
0, 0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CXSCREEN),
NULL,
NULL,
hInstance,
NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
//create the main DirectDraw object
ddrval = DirectDrawCreate(NULL, &lpDD, NULL);
if (ddrval == DD_OK)
{
//Get exclusive mode
ddrval = lpDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN);
if (ddrval == DD_OK)
{
ddrval = lpDD->SetDisplayMode(640, 480, 8);
if (ddrval == DD_OK)
{
//create the primary surface with 1 back buffer
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, &lpDDSPrimary, NULL);
if (ddrval == DD_OK)
{
//Get a pointer to the back buffer
ZeroMemory(&ddscaps, sizeof(DDSCAPS));
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack);
if (ddrval = DD_OK)
{
//draw some text
if (lpDDSPrimary->GetDC(&hdc) == DD_OK)
{
SetBkColor(hdc, RGB(0, 0, 255));
SetTextColor(hdc, RGB(255, 255, 0));
TextOut(hdc, 0, 0, szMsgBack, lstrlen(szMsgBack));
lpDDSBack->ReleaseDC(hdc);
}
//create a timer to flip the pages
if (SetTimer(hWnd, TIME_ID, TIMER_RATE, NULL))
{
return TRUE;
}
}
}
}
}
}
wsprintf(buf, "Direct Draw Init Failed (%08lx)\n", ddrval);
MessageBox(hWnd, buf, "ERROR", MB_OK);
DestroyDirectDrawObjects();
DestroyWindow(hWnd);
return FALSE;
//Modified code end
}
运行结果为:Direct Draw Init Failed (00000000)
考虑过也为ddsd初始化内存,仍然出错,调试发现ddrval得不到GetAttachedSurface应该返回的5个值的其中一个,求各位大神帮忙。。。