MFC 重绘客户区

来源:百度知道 编辑:UC知道 时间:2024/06/23 00:12:45
MFC做的一个程序中有两个类,每个类下都有一个Draw()函数,分别去绘制点和数,然后在VIEW类中OnDraw()函数中没有做任何操作
现在最小化就会消失,不知道有什么好的办法?要把代码转到OnDraw()函数中实现?
在网上看了很多,但还是很迷茫.新手,不好意思,请帮帮忙!!

代码大概如下:

void CNetworkSensorsView::OnDraw(CDC* pDC)
{
CNetworkSensorsDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

//Invalidate(true);
}

void CNetworkSensorsView::OnEnvironmentSet()
{
CPointset pointSet; //设置Point属性

if (pointSet.DoModal() == IDOK)
{
m_DistributionView = pointSet.m_Distribution;
m_SizelowView = pointSet.m_Sizelow;
m_SizehighView = pointSet.m_Sizehigh;
m_NumbersView = pointSet.m_Numbers;
}

m_SensorNodeInfo = new SensorNodeInfo[m_NumbersView];

CPointCreate* pointCreate = new CPointCreate(m_DistributionView, m_SizelowView, m_SizehighView, m_NumbersView);

CClientDC aDC(this); // DC is for this view
OnPrepareDC

你可以在你写的类的函数下输入Invalidate();就可以了,其他的什么都不用写,然后在view类的OnDraw函数里写绘图的函数。
如果,执行自己定义类中的函数,它就会执行Invalidate(),这个函数会去调用view类里的OnDraw函数去重绘客户区。

将 OnEnvironmentSet() 和 OnQuadtreeSet() 里面的绘图代码都放到 OnDraw(CDC* pDC) 里面去,这两个函数只用确定什么时候重绘,即调用在需要重绘时 Invalidate();