首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请教MFC怎么擦除矩形区域

2012-08-13 
请问MFC如何擦除矩形区域C/C++ code//画透明矩形void CDTvOptionWnd::DrawRect(CRect cp1){CClientDC pDC(

请问MFC如何擦除矩形区域

C/C++ code
//画透明矩形void CDTvOptionWnd::DrawRect(CRect cp1){    CClientDC pDC(this);    CBrush *cbrush=CBrush::FromHandle(HBRUSH(GetStockObject(NULL_BRUSH)));     CBrush *Firstcbrush=pDC.SelectObject(cbrush);     CPen newPen(PS_SOLID,2,RGB(255,102,0));    CPen* pOldPen=pDC.SelectObject(&newPen);    pDC.Rectangle(cp1);     pDC.SelectObject(Firstcbrush);    pDC.SetROP2(R2_XORPEN);    ReleaseDC(pDC);}


这样写应该是矩形区域画出之后就擦除了,但没效果,各位前辈指导指导,先谢过大家了

[解决办法]
InvalidateRect();
[解决办法]
画完后用Invalidate();
void Invalidate( BOOL bErase = TRUE ); 
  该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。 

[解决办法]
给你修改了一下
在下一次WM_PAINT前
第奇数次调用此函数都会出现矩形
第偶数次调用都会擦除。

放在OnLButtonDown中测试一下
OnLButtonDown()
{
CRect rt(50,50,200,200);
DrawRect(rt);// 画出矩形
}

点了看效果
第一次按下鼠标画出矩形
第二次按下矩形消失
第三次按下画出
第四次按下消失
……
……
……


C/C++ code
void CDTvOptionWnd::DrawRect(CRect cp1){    CClientDC pDC(this);    pDC.SetROP2(R2_XORPEN);    CBrush *Firstcbrush=pDC.SelectStockObject(NULL_BRUSH);     CPen newPen(PS_SOLID,2,RGB(255,102,0));    CPen* pOldPen=pDC.SelectObject(&newPen);    pDC.Rectangle(cp1);     pDC.SelectObject(Firstcbrush);    ReleaseDC(pDC);}
[解决办法]
这样写应该是矩形区域画出之后就擦除了,但没效果,各位前辈指导指导,先谢过大家了
=======
为什么画好了之后就擦除了啊?没看见你写擦除代码啊?你将这个:pDC.SetROP2(R2_XORPEN);
放在最后应该没有什么用吧,后面也没有绘图语句,你改绘图模式干什么?
[解决办法]
是不是因为这个函数执行以后就return了?之前执行的操作以及资源全部被清空..

我看孙鑫大大的视频看多了,到处充斥着这种思想~

热点排行