请教下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,连续搞几次怕效率比较低,求指导在线等
...全文
198 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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);

15,980

社区成员

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

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