关于VC中DirectDraw翻页的问题

arczee 2005-05-15 12:40:20
我现在正在学directdraw, 在翻页时遇到问题:我建立了一个主页面,一个后备缓冲区,一个幕后暂存区,
通过在主页面和后备缓冲区中分别加载位图(通过幕后暂存区),然后建立一个时钟,每隔一钞钟就用Flip函数把主页面和后备缓冲区交换,以达到隔一钞钟显示不同的图片.可以当显示一幅图片后,另一幅就不能显示了(显示为空白)
请教各位,给高分
以下程序段:
//变量声明
IMPLEMENT_DYNCREATE(gameFrame, CFrameWnd)
LPDIRECTDRAW7 pDD7;
LPDIRECTDRAWSURFACE7 pPSur; //声明主绘图页对象指针
DDSURFACEDESC2 desc;
LPDIRECTDRAWSURFACE7 pBBuf; //声明后缓冲区对象指针
DDSCAPS2 caps;
HRESULT result;
LPDIRECTDRAWSURFACE7 pOPla; //声明幕后暂存区

HDC hdc,hdc1;
HBITMAP bitmap1,bitmap2;

//gameFrame是窗口框架,CFrameWnd的子类

gameFrame::gameFrame()
{
Create(NULL,"绘图窗口",WS_POPUP);
CClientDC dc(this);
//加载位图
hdc=::CreateCompatibleDC(NULL);
bitmap1=(HBITMAP)::LoadImage(NULL,"back1.bmp",IMAGE_BITMAP,1024,768,LR_LOADFROMFILE);
bitmap2=(HBITMAP)::LoadImage(NULL,"back2.bmp",IMAGE_BITMAP,1024,768,LR_LOADFROMFILE);
::SelectObject(hdc,bitmap1);
LoadBmp();
pPSur->BltFast(0,0,pOPla,CRect(0,0,1024,768),DDBLTFAST_WAIT);
::SelectObject(hdc,bitmap2);
LoadBmp();
pBBuf->BltFast(0,0,pOPla,CRect(0,0,1024,768),DDBLTFAST_WAIT);
pOPla->GetSurfaceDesc(&desc);
}


int gameFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

//初始化DirectX部分略

//建立时钟
SetTimer(1,1000,NULL);
// TODO: Add your specialized creation code here

return 0;
}

void gameFrame::LoadBmp()
{
result=pOPla->GetDC(&hdc1);
if(result!=DD_OK)
MessageBox("取得暂存区DC失败!");
::BitBlt(hdc1,0,0,desc.dwWidth,desc.dwHeight,hdc,0,0,SRCCOPY);
pOPla->ReleaseDC(hdc1);
}

void gameFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default

CFrameWnd::OnTimer(nIDEvent);
pPSur->Flip(NULL,DDFLIP_WAIT);
}
...全文
82 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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