请教下SelectClipRgn能否配合双缓冲使用

dahaiI0 2012-07-30 11:41:43
CImage加载图片,创建memdc,memdc通过SelectClipRgn设置剪裁区域(圆角矩形),然后把CImage加载的图片贴过去,再把memdc贴到目的DC上,但是显示的是矩形,圆角部分被黑色覆盖。

CPaintDC dc(this);
CRect rc(CPoint(0, 0), CSize(140, 138));
CRgn rgn;
VERIFY(rgn.CreateRoundRectRgn(0, 0, rc.Width(), rc.Height(), 5, 5));

CDC memdc;
VERIFY(memdc.CreateCompatibleDC(&dc));
memdc.SelectClipRgn(&rgn);

CBitmap btScreen;
btScreen.CreateCompatibleBitmap(&dc, rc.Width(), rc.Height());
CBitmap *pOldBitmapScreen = memdc.SelectObject(&btScreen);

CImage image;
image.LoadFromResource(AfxGetApp()->m_hInstance,IDB_BITMAP1);

image.BitBlt(memdc.m_hDC,0,0,image.GetWidth(),image.GetHeight(),0,0,SRCCOPY);
dc.BitBlt(100, 100, rc.Width(), rc.Height(), &memdc, 0, 0, SRCCOPY);
//释放的就省了

不想在目的DC上直接SelectClipRgn,连续搞几次怕效率比较低,求指导在线等
...全文
246 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahaiI0 2012-07-30
  • 打赏
  • 举报
回复
自己顶一下。。
hotpos 2012-07-30
  • 打赏
  • 举报
回复


黑色是因为新创建的位图里面没东西。
先从dc里面拷一份过来就不是黑色的了。
dahaiI0 2012-07-30
  • 打赏
  • 举报
回复
回楼上的,dc.SelectClipRgn(&rgn);自然是可以,但是绘图贴图操作比较多,调用一次贴一次,效率比较低可能还有闪烁,想所有操作都弄到memdc,然后一次bitble到目的dc。

第二种没看懂,把目的DC拷到memdc,然后memdc设置区域,再memdc拷到目的dc?
hotpos 2012-07-30
  • 打赏
  • 举报
回复

memdc.SelectClipRgn(&rgn);
替换为
dc.SelectClipRgn(&rgn);


或者


//添加
memdc.BitBlt(dc, ..............)

//后面不用改
memdc.SelectClipRgn(&rgn);
内容概要:本文档是一份关于开发经典小游戏“贪吃蛇”的保姆级毕业设计指导文档,涵盖从游戏规则、功能设计、技术选型到核心代码实现的完整流程。文档以Python + Pygame为技术栈,详细讲解了游戏初始化、蛇的移动逻辑、食物生成、碰撞检测、计分与等级系统、键盘控制及主循环渲染等核心模块,并提供了完整的项目结构和源码示例。采用状态机管理游戏状态,使用列表模拟链表结构存储蛇身,结合方向缓冲机制优化操作体验,同时引入难度递增机制提升可玩性。文末还列举了飞机大战、扫雷、五子棋等同类课题作为拓展参考。; 适合人群:具备一定编程基础、正在进行毕业设计或课程设计的学生,尤其是对游戏开发感兴趣的初级开发者。; 使用场景及目标:①帮助学生独立完成一个功能完整、结构清晰的小游戏项目,用于毕业答辩或课程展示;②深入理解事件驱动编程、状态管理、碰撞检测、定时刷新等基础编程概念;③掌握Python + Pygame开发2D小游戏的核心技能,并具备二次开发与功能拓展能力。; 阅读建议:建议读者按照“规则→设计→代码→运行”的顺序逐步学习,动手实践每个模块并调试代码,重点关注方向缓冲、状态机、食物生成算法等设计细节,同时可尝试实现文末提出的拓展功能以增强项目亮点。

15,976

社区成员

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

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