|
|

楼主 |
发表于 2005-12-1 21:42:00
|
显示全部楼层
Re: 救助,怎么实现DirectDraw Window Mode?
这一步我也做了,我给出我的代码,求高手帮忙看看:
LPDIRECTDRAW7 pDD7;
LPDIRECTDRAWSURFACE7 pPriSur;
LPDIRECTDRAWSURFACE7 pOffSur;
LPDIRECTDRAWCLIPPER pClipper;
DDSCAPS2 caps;
DDSURFACEDESC2 desc;
DDCOLORKEY key;
HRESULT result;
BOOL MainFrame::InitDirectDrawWindowed()
{
result = DirectDrawCreateEx(NULL, (VOID**)&pDD7, IID_IDirectDraw7, NULL);
if (result != DD_OK)
{
return false;
}
result = pDD7->SetCooperativeLevel(m_hWnd, DDSCL_NORMAL);
if(result != DD_OK)
{
return false;
}
memset(&desc, 0, sizeof(desc));
desc.dwSize = sizeof(desc);
desc.dwFlags = DDSD_CAPS;
desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY;
result = pDD7->CreateSurface(&desc, &pPriSur, NULL);
if(result != DD_OK)
{
return false;
}
result = pDD7->CreateClipper(0, &pClipper, NULL);
if(result != DD_OK)
{
return(false);
}
result = pClipper->SetHWnd(0, m_hWnd);
if(result != DD_OK)
{
return(false);
}
result = pPriSur->SetClipper(pClipper);
if(result != DD_OK )
{
return(false);
}
memset(&desc, 0, sizeof(desc));
desc.dwSize = sizeof(desc);
desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
desc.dwWidth = 800;
desc.dwHeight = 600;
result = pDD7->CreateSurface(&desc, &pOffSur, NULL);
if(result != DD_OK)
{
return false;
}
return true;
}
创建窗体的方式:
MainFrame* pFrame = new MainFrame;
if (!pFrame)
return FALSE;
m_pMainWnd = pFrame;
pFrame->Create(NULL, "Game", WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE | WS_MINIMIZEBOX | WS_SYSMENU, CRect(0, 0, 810, 636), NULL, NULL, WS_EX_CLIENTEDGE, NULL);
请高手帮忙看看哪里不对,先在此谢过啦! |
|