VC6 bitmap 双缓冲绘图 不用MFC

我的程序是一个完全自己写的窗口类小游戏。没有使用类向导,且不使用MFC。频繁加载大量位图时,窗口会闪烁,想用双缓冲的方法解决。程序描述:1、所有绘画在捕获到WM_PAIN... 我的程序是一个完全自己写的窗口类小游戏。没有使用类向导,且不使用MFC。
频繁加载大量位图时,窗口会闪烁,想用双缓冲的方法解决。
程序描述:
1、所有绘画在捕获到WM_PAINT后调用OnPaint()完成。定时器每0.02秒刷新一次。
2、有全局变量
HINSTANCE g_hInstance =hInstance; //获取窗口句柄
HWND hWnd = CreateWindowEx(.....);//创建主窗口
3需要绘制 多个位图资源 48x48 IDB_BITMAP1等(以IDB_BITMAP1为例加载吧)
需要绘制 多个圆形,方形。(以圆形为例加载吧..)
4之前有人教用“创建与客户区大小相同的bitmap,在其之上绘画,然后再把该位图绘制出来”。这种方法使用内存过大,不要使用。我要的是类似MFC那种“创建与当前DC兼容匹配DC,然后...."的方法。但不要用MFC函数。就是要用 双缓冲绘图 技术
*5/*此项可以不理*/如何加载声音到程序中。函数是什么。(可以假设有音频123.MP3)

请大神帮我写好OnPaint函数。要能够直接调用的。//最好后面注释告诉我每个函数是干什么的,放什么参数。
大神们不用急慢慢写,我选程序能够直接套用,注释最容易懂的。有音频加载方法更好。

//谢谢各位大神看完此贴,表示感谢。
展开
 我来答
归悦欣cf
推荐于2016-09-07 · TA获得超过1444个赞
知道大有可为答主
回答量:4251
采纳率:59%
帮助的人:875万
展开全部
有win32的CreateCompatibleDC,可以利用它创建兼容dc,MFC CDC类双缓冲绘图只是封装了API而已,其内部还是调用Win32 Api,因此在MFC的双缓冲绘图只需转换为win32 API 即可。步骤一般是

1、创建兼容dc,可以使用Win32 Api CreateCompatibleDC
2、创建兼容位图,位图大小与绘图窗口绘图区域相同,把兼容位图选进(使用win32 Api)兼容dc,
3、在兼容dc中绘图,
4、使用BltBit把兼容DC图像输出到窗口dc
更多追问追答
追问
我知道大概什么原理,但是调用函数总是放错参数出现各种错误。
如果是MFC的话函数还是会的,但是由于这个项目是没学MFC之前写的,改成调用MFC似乎会出错,所以想要不用MFC函数的 双缓冲绘图 模板。以加载IDB_BITMAP1为例就行了...
所以才想请大神帮我把OnPaint函数写一下。
追答
HBITMAP hbmp=LoadBitmap(程序实例句柄,MAKEINTRESOURCE(IDB_BITMAP1));

HDC hdc=GetDC(窗口句柄);

HDC hdcCom=CreateCompatibleDC(hdc);

SelectObject(hdcCom,hbmp);

BltBit(hdc,x,y,cx,cy,hdcCom,0,0,SRCCOPY);
ReleaseDC(窗口句柄,hdc);

DeleteDC(hdcCom);

这是加载显示IDB_BITMAP1位图的代码,其中使用的函数都是win32 API
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式