directdraw 位图无法正确显示,求助
jsftd 2011-07-11 01:28:53 bool CGraphic::LoadToOffScreen(LPDIRECTDRAWSURFACE7& oBuffer,DWORD dwWidth,DWORD dwHeight,LPCWSTR BitMapFile,bool b_ColorKey,DWORD color)
{
HDC m_hdc;
HDC m_hdcImage;
HBITMAP m_hBmp;
BITMAP m_fBmp;
DDSURFACEDESC2 ddsd;
bool b_result;
HRESULT result;
m_hBmp=(HBITMAP)::LoadImage(NULL,BitMapFile,IMAGE_BITMAP,NULL,NULL,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(m_hBmp==NULL)
{
MessageBox(NULL,L"读取位图失败(LoadToOffScreen)",NULL,MB_OK);
return false;
}
GetObject(m_hBmp,sizeof(m_fBmp),&m_fBmp);
dwWidth=(dwWidth==0?m_fBmp.bmWidth:dwWidth);
dwHeight=(dwHeight==0?m_fBmp.bmHeight:dwHeight);
b_result=InitOffScreen(oBuffer,dwWidth,dwHeight,true,color);
if(!b_result)
{
MessageBox(NULL,L"离屏缓冲区建立失败",NULL,MB_OK);
return false;
}
m_hdcImage=::CreateCompatibleDC(NULL);
if(m_hdcImage==NULL)
{
MessageBox(NULL,L"创建上下文设备出错",NULL,MB_OK);
return false;
}
SelectObject(m_hdcImage,m_hBmp);
ddsd.dwSize=sizeof(ddsd);
oBuffer->GetSurfaceDesc(&ddsd);
result=oBuffer->GetDC(&m_hdc);
if(result!=NULL)
{
StretchBlt(m_hdc,0,0,ddsd.dwWidth,ddsd.dwHeight,m_hdcImage,0,0,m_fBmp.bmWidth,m_fBmp.bmHeight,SRCCOPY);
oBuffer->ReleaseDC(m_hdc);
}
DeleteDC(m_hdcImage);
if(result==NULL)
{
return false;
}
return true;
}
void CGraphic::BltBBuffer(LPDIRECTDRAWSURFACE7 oBuffer,bool b_ColorKey,int x,int y,RECT m_rect)
{
if(b_ColorKey)
{
m_pBBuf->BltFast(x,y,oBuffer,&m_bRect,DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);
}
else
{
m_pBBuf->BltFast(x,y,oBuffer,&m_bRect,DDBLTFAST_WAIT);
}
}
void CGraphic::Flip()
{
if(m_pPSur&&m_pBBuf)
{
if(m_pPSur->IsLost()==DDERR_SURFACELOST)
{
m_pPSur->Restore();
}
if(m_pBBuf->IsLost()==DDERR_SURFACELOST)
{
m_pBBuf->Restore();
}
}
m_pPSur->Flip(NULL,DDFLIP_WAIT);
}
以上是位图存离屏缓冲区,离屏转后备和翻转函数,在无限循环的结构中调用传递和翻转函数,但是位图无法正常显示,始终是背景的黑色,并且频闪。求教要怎么办