1.是否可以利用两个无效区域的坐标(left,top,right,bottom)来进行判断,然后做出相应的选择.
2.如果使用Win32SDK,可以调用GetDC().
hdc = GetDC(hwnd);
[others programs lines]
ReleaseDC(hwnd, hdc);
VC吗,由于我也是才学,哪有说错之处.......
magicwizard
[email protected]
2.如果使用Win32SDK,可以调用GetDC().
hdc = GetDC(hwnd);
[others programs lines]
ReleaseDC(hwnd, hdc);
VC吗,由于我也是才学,哪有说错之处.......
magicwizard
[email protected]
如下所示:
//m_bDrawRec1,m_bDrawRec2为两个BOOL型成员变量,初始值为FALSE(可在OnInitialUpdate()中设定)
CMyView::OnLButton()
{ ......
m_bDrawRec1=TRUE;
InvalidateRect(&myRect1,TRUE);
.......
m_bDrawRec2=TRUE;
InvalidateRect(&myRect2,TRUE);
}CMyView::OnDraw()
{
if(m_bDrawRec1)
DoDrawRect();
if(m_bDrawRec2)
DoDrawRec2()
m_bDrawRec1=m_bDrawRec2=FALSE; //恢复原始值
}
在CMyView::OnDraw()中什么也不用做,只管把该显示的东西全部画出来就行了。
因为当使用InvalidateRect或InvalidateRgn指定了无效区时,OnDraw会自动更新无效区的内容,而在无效区外的内容OnDraw不会把它们更新。
如果你在OnDraw中加入判断无效区,然后有选择地显示内容,这样做会使显示不正常,因为当系统需要刷新CMyView时(用户更改了窗口尺寸、窗体被别的窗体遮盖后恢复时),自动调用OnDraw函数,而这时OnDraw却有选择地显示出部分内容,其它内容就不见了。
其实这是个很简单的问题,写段简单的代码做个试验就可以了。
CMyView::OnDraw()
{
if(m_bDrawRec1)
DoDrawRect();
if(m_bDrawRec2)
DoDrawRec2()
m_bDrawRec1=m_bDrawRec2=FALSE; //恢复原始值
}结果正确,可是最小化窗口,然后最大化后,画面就多了几根大斜线,请问这是怎么回事?
you have no need to find out which rect should be
redraw by yourself.
you just need write a completely redraw code.
jansen zhu
2.ondraw()只处理无效区以内的重画,具体细节可参看MFC源码。