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);
}
以上是位图存离屏缓冲区,离屏转后备和翻转函数,在无限循环的结构中调用传递和翻转函数,但是位图无法正常显示,始终是背景的黑色,并且频闪。求教要怎么办
...全文
130 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
信阳毛尖 2011-07-11
  • 打赏
  • 举报
回复
代码太多,看着头疼。你单步调试,试着缩小一下范围

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧