话说最近在搞一个落后的接近10年的东西,DirectX7.0里面的DirectDraw....
由于是窗口模式,所以无法直接使用Flip..所以用离屏页来做...
出现了一个大问题...就是画不出来,而且没提示错误...经过多次跟开发包例子的对比
终于得出结论...第55行中的释放是必须的..不然无发画到主屏
MSG msg;
LPDIRECTDRAW7 lpDD; // DirectDraw对象
LPDIRECTDRAWSURFACE7 lpDDSPrimary; // DirectDraw主页面
LPDIRECTDRAWSURFACE7 lpDDSBackBuff; //后备页面
RECT m_rcWindow;
HRESULT hr;
DDSURFACEDESC2 ddsd; //页面描述
HWND hWnd = InitWindow( hInstance, nCmdShow );
HWND m_hWnd = hWnd;
//创建DirectCraw对象
if ( DirectDrawCreateEx( NULL, (VOID**)&lpDD, IID_IDirectDraw7, NULL ) != DD_OK ) return FALSE;
// 取得独占和全屏模式
if ( lpDD->SetCooperativeLevel( GetActiveWindow(),DDSCL_NORMAL ) != DD_OK)
{
MessageBox(NULL,"改变模式失败","",MB_OK);
return FALSE;
}
//填充主页面信息
ZeroMemory( &ddsd, sizeof( ddsd ) );
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
//创建主页面对象
if ( lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL ) != DD_OK)
return FALSE;
//填充离屏面信息
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd.dwWidth = 640;
ddsd.dwHeight = 480;
//创建后备页面
if ( lpDD->CreateSurface( &ddsd, &lpDDSBackBuff, NULL ) != DD_OK)
return FALSE;
GetClientRect( m_hWnd, &m_rcWindow );
ClientToScreen( m_hWnd, (POINT*)&m_rcWindow );
ClientToScreen( m_hWnd, (POINT*)&m_rcWindow+1 );
ddsd.dwSize = sizeof(ddsd);
lpDDSBackBuff->GetSurfaceDesc(&ddsd);
HDC hDC; //设备环境句柄
if ( lpDDSBackBuff->GetDC(&hDC) != DD_OK) return FALSE;
TextOut( hDC, 180, 240, "ohasd", 5);
lpDDSBackBuff->ReleaseDC(hDC);
lpDDSPrimary->Blt(&m_rcWindow,lpDDSBackBuff,NULL,DDBLT_WAIT,NULL );