GetClipBox()和SeletClipRgn()问题
来源:互联网 发布:医疗与大数据 编辑:程序博客网 时间:2024/06/06 20:37
由于项目需要,需要过滤掉一些区域,就是用了GetClipBox()和SelectClipRgn()函数来实现,其中碰到了一些问题。
1、调用GetClipBox()获得当前的剪切区,得到的是逻辑坐标。
CRect rcOldClip;
pDC->GetClipBox(rcOldClip);
2、调用SelectClipRgn()设置过滤后的剪切区。
//CRect rcNewClip(100, 100, 200, 200)
//CRgn rgnNew;
//rgnNew.CreateRectRgnIndirect(rgNew);
//pDC->SelectClipRgn(&rgnNew);
上面的代码一点都没有问题,可是到正真的项目中肯定不会这么做。一般是一个对象绘画时,设置它的剪切区,防止画出他的区域范围。
CPeople p;//可以绘画的对象
CRect rcNewClip;
CRgn rgnNew;
p.GetRect(rcNewClip);//得到一个对象的RECT,问题就出在这里了,我们得到是逻辑坐标,可能是(100, -100, 200, -300),此时调用rcNewClip.IsRectEmpty()得到是true,究其原因是,如果CRect的宽度或高度<=0是,就认为他是Empty,所以接下来的,SelectClipRgn()会调用不成功,返回NULLREGION表明区域为空。
//解决办法,调用LPtoDP转换一下
pDC->LPtoDP(rcNewClip);//设备坐标不会出现是负值的情况,总是从(0,0)开始横向/纵向不断变大。
rgnNew.CreateRectRgnIndirect(rgNew);
pDC->SelectClipRgn(&rgnNew);
p.Draw(pDC);
3、还原。
CRgn rgnOld;
pDC->LPtoDP(rcOldClip);//理由同上。
rgnNew.CreateRectRgnIndirect(rgnOld);
pDC->SelectClipRgn(&rgnOld);
- GetClipBox()和SeletClipRgn()问题
- GetClipBox
- 使用GetUpdateRect和GetClipBox的体会
- 使用GetUpdateRect和GetClipBox的体会
- 使用GetUpdateRect和GetClipBox的体会
- 【局部刷新】GetUpdateRect和GetClipBox 获取无效区域的区别
- WINCE UI显示优化经验:使用GetUpdateRect和GetClipBox的体会
- GetClipBox与GetClientRect
- GetClipBox 在scrollview中使用注意事项
- 谈谈MFC for WindowsCE中的CDC::GetClipBox方法
- 用内存设备环境(Memory Device Context)与GetClipBox函数(获得需要重绘的区域)实现无闪烁的高效绘图
- NP问题和NPC问题
- NP问题和NPC问题
- 过桥问题和倒水问题
- 过桥问题和倒水问题
- 过桥问题和倒水问题
- 过桥问题和倒水问题
- 过桥问题和分水问题
- 描述符表
- 如何在Quartus II 11.0中调用ModelSim-Altera 6.6
- java价格处理的一个问题
- 3维动态规划 hdu 4501 小明系列故事——买年货
- 描述符
- GetClipBox()和SeletClipRgn()问题
- 北大poj Q3 P,MTHBGWB
- Session.load()和get()方法区别
- ListPreference之entries和entryValues
- application resolvingXML is waiting for the debugger to attach
- 第四周—4.正整数类
- Python编写类时需要self的原因
- openssl简介
- HDU 3496 Watch The Movie -- 二维费用背包 费用刚好完全消耗