请问:我想在一个方框外面绘图,应该怎么设置ClipRgn,谢谢. CRgn rgn;rgn.CreateRectRgn(5, 5, 100, 100);// ??? 怎么能取得这个rgn的补集?谢谢pDC->SelectClipRgn(&rgn);……………… 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CRgn rgn;rgn.CreateRectRgn(5,5,100,100);CRgn rgn2;rgn2.CreateRectRgn(0,0,200,200);CRgn rgnDes;rgnDes.CombineRgn(rgn1,rgn2,RGN,XOR);pDC->SelectClipRgn(&rgnDes);/**********int CombineRgn( CRgn* pRgn1, CRgn* pRgn2, int nCombineMode );RGN_XOR Combines both regions but removes overlapping areas. Sorry,rgnDes.CombineRgn(rgn1,rgn2,RGN_XOR); 一个是整个DC的区域一个是小的区域求XOR,形成覆盖掉的被去掉了的区域 不知道为什么,在MM_TEXT模式下没问题,但是我一换到MM_HIMETRIC下就搞不定了。郁闷啊。 一下代码再屏幕中间做一个空洞使用MM_HIENGLISH模式 int iOldMode=pDC->SetMapMode(MM_HIENGLISH); CRect rect(0,0,800,600),rect1(200,150,600,450); CBrush brush; brush.CreateSolidBrush(RGB(255,0,0)); CBrush *pOldBrush=pDC->SelectObject(&brush); CRgn rgn1; rgn1.CreateRectRgn(rect1.left,rect1.top,rect1.right,rect1.bottom); CRgn rgn2; rgn2.CreateRectRgn(rect.left,rect.top,rect.right,rect.bottom); CRgn rgnDes; rgnDes.CreateRectRgn(rect.left,rect.top,rect.right,rect.bottom); rgnDes.CombineRgn(&rgn1,&rgn2,RGN_XOR); pDC->SelectClipRgn(&rgnDes); pDC->DPtoLP(&rect); pDC->Rectangle(&rect); pDC->SelectObject(pOldBrush); brush.DeleteObject(); pDC->SetMapMode(iOldMode);} 唉,知道了。就是我说的转成MM_TEXT模式吗。看来CRgn只能用在MM_TEXT模式下面。那我还不如手动画,反正都是矩形而已。谢谢诸位。 std::string 与 TCHAR* 的转换 怎样把char型数据存入SQLServer数据库 关于软件项目交易 执行MessageBox()函数弹出对话框后的问题? 找合伙人翻译MSDN gif文件如何转换成bmp文件,急!!! 如何测定一段程序的运行时间,要精确到ms 请问如何截获系统调用? 请教:在VC下怎样实现一个多层的工具条? 请问如何实现这种按钮,当鼠标移动到它上面时,按钮浮起来。 VC如何调用VB开发的COM组件?高手请进!!! 在Edit控件中,如何用OnChar来扑捉汉字
rgn.CreateRectRgn(5,5,100,100);
CRgn rgn2;
rgn2.CreateRectRgn(0,0,200,200);
CRgn rgnDes;
rgnDes.CombineRgn(rgn1,rgn2,RGN,XOR);
pDC->SelectClipRgn(&rgnDes);
/**********
int CombineRgn(
CRgn* pRgn1,
CRgn* pRgn2,
int nCombineMode
);
RGN_XOR Combines both regions but removes overlapping areas.
rgnDes.CombineRgn(rgn1,rgn2,RGN_XOR);
一个是小的区域
求XOR,形成覆盖掉的被去掉了的区域
int iOldMode=pDC->SetMapMode(MM_HIENGLISH);
CRect rect(0,0,800,600),rect1(200,150,600,450);
CBrush brush;
brush.CreateSolidBrush(RGB(255,0,0));
CBrush *pOldBrush=pDC->SelectObject(&brush); CRgn rgn1;
rgn1.CreateRectRgn(rect1.left,rect1.top,rect1.right,rect1.bottom);
CRgn rgn2;
rgn2.CreateRectRgn(rect.left,rect.top,rect.right,rect.bottom);
CRgn rgnDes;
rgnDes.CreateRectRgn(rect.left,rect.top,rect.right,rect.bottom);
rgnDes.CombineRgn(&rgn1,&rgn2,RGN_XOR);
pDC->SelectClipRgn(&rgnDes);
pDC->DPtoLP(&rect); pDC->Rectangle(&rect);
pDC->SelectObject(pOldBrush);
brush.DeleteObject();
pDC->SetMapMode(iOldMode);
}
看来CRgn只能用在MM_TEXT模式下面。那我还不如手动画,反正都是矩形而已。
谢谢诸位。