记录一波win32程序设计课绘图动画出现的若干问题

课程的内容是让我们写一段程序配上背景和人物然后用鼠标键盘事件来让人物动起来。
在这里插入图片描述
主要的坑点有两处。第一处是人物背景色无法去除。
这一点可以有两种方式去解决
第一种是直接用函数TransparentBlt()
其中的最后一个参数为去除背景的颜色,可以先用ps把背景色弄成白色然后把该参数设为
RGB(255, 255, 255) 这个方法比较方便
代码片段
//背景贴到mdc缓冲1
SelectObject(bufdc, hBitmap1);
BitBlt(hmdc, 0, 0, 1200, 800, bufdc, 0, 0, SRCCOPY);
//mdc透明处理
SelectObject(bufdc, hBitmap2);
TransparentBlt(hmdc, currentX, currentY, 60, 90, bufdc, ltx, lty, w, h, RGB(255, 255, 255));
//缓冲2mdc贴到hdc
BitBlt(hDC, 0, 0, 1200, 800, hmdc, 0, 0, SRCCOPY);

还有一种是

StretchBlt(hDC, currentX, currentY, 60, 90, bufdc, ltx, lty, w, h, SRCPAINT);
此处的最后一个参数可选:
SRCPAINT 这是将两张图片颜色做or运算
SRCCOPY 这是贴图
SRCAND 这是将两张图片颜色做and运算
准备两张图 颜色要求分别如下
在这里插入图片描述
在这里插入图片描述
该方法的代码片段:

SelectObject(bufdc, hBitmap1);
GetObject(hBitmap1, sizeof(BITMAP), &bitmap1);
BitBlt(hDC, 0, 0, bitmap1.bmWidth, bitmap1.bmHeight, bufdc, 0, 0, SRCCOPY);
SelectObject(bufdc, hBitmap3);
StretchBlt(hDC, currentX, currentY, 60, 90, bufdc, ltx, lty, w, h, SRCAND);
//  左上坐标  宽度 高度    大图左上坐标   大图左上到右下的宽度高度 
后面设置4个参数   
SelectObject(bufdc, hBitmap2);			
StretchBlt(hDC, currentX, currentY, 60, 90, bufdc, ltx, lty, w, h, SRCPAINT);
原理

在这里插入图片描述
在这里插入图片描述
第二处是闪屏
我按照双缓冲搞了很久之后发现仍然没有解决。。。于是我先试了更多重的缓冲。发现没有用。。
最后找到了原因
想要解决闪屏
hbrBackground属性必须设置为NULL!!!!!!!!!!!!!
这是最坑的地方!!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值