DirectDraw的小问题!

angelface 2003-10-20 07:54:02
怎么用DirectDraw中显示一张位图?
我现在可以写出一个基本框架!!
就差这一块!
...全文
25 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
answerear 2003-10-22
  • 打赏
  • 举报
回复
怎么从lpddsprimary blit到 lpddsprimary?直接创建主页面,然后载入位图到主页面就行啦。
DDSURFACEDESC2 ddsd;
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlag=DDSD_CAPS;
ddsd.ddscaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
lpDD->CreateSurface(&ddsd,&lpPrimarySurface,NULL);
DDReLoadBitmap(lpPrimarySurface,"test.bmp");
如果要载入到后备缓冲页面,先创建后备缓冲页面,然后载入到后备缓冲页面,道理同上。只是把blt函数放在主循环里。
angelface 2003-10-21
  • 打赏
  • 举报
回复
rect.left = 0;
rect.top = 0;
rect.right = GetSystemMetrics(SM_CXSCREEN);
rect.bottom = GetSystemMetrics(SM_CYSCREEN);
lpDD->CreateSurface(&ddsd, &lpDDSPrimary, NULL);
DDReLoadBitmap(lpDDSPrimary, "test.bmp");
lpDDSPrimary->Blt(&rect, lpDDSPrimary, NULL, DDBLT_WAIT|DDBLT_KEYSRC ,NULL);
有什么问题吗? 为什么屏幕一闪就没了?
angelface 2003-10-21
  • 打赏
  • 举报
回复
我试了,, 但是不好用啊,,

还是开始创建的那个黑屏, 在就什么也没有了!!

怎么办?

用DDReLoadBitmap
然后lpDD->Bit();也不好用,, 是怎么回事?
answerear 2003-10-21
  • 打赏
  • 举报
回复
把位图载入离屏页面,然后blit到后备缓冲页面,用flip()就可以啦.
HBITMAP hbmp;
BITMAP bmp;

hbmp=(HBITMAP)::LoadImage(GetModuleHandle(NULL),szFileName,IMAGE_BITMAP,0,0,
LR_CREATEDIBSECTION);

if(!hbmp)
hbmp=(HBITMAP)::LoadImage(NULL,szFileName,IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(!hbmp)
return -1;

::GetObject(hbmp,sizeof(bmp),&bmp);
然后创建离屏页面
HDC memhdc;
memhdc=::CreateCompatibleDC(hDC);
if(!memhdc)
return -2;
::SelectObject(memhdc,hbmp);
BOOL b=::BitBlt(hDC,0,0,m_nWidth,m_nHeight,memhdc,0,0,SRCCOPY);
::DeleteDC(memhdc);
大概就这样.详细的自己补全吧.不过速度比较慢,也可以自己写读位图的程序,windows游戏编程大师这本书上有写这种自己写的读位图程序.自己去看吧.

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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