VC++对话框中的绘图为什么会被刷掉?

来源:百度知道 编辑:UC知道 时间:2024/05/14 10:57:24
新建一个对话框的MFC程序。
写一函数如下:

void CSerialPortTestDlg::Dopaint(int x1, int y1)
{
CWnd * pWnd = GetDlgItem(IDC_STATIC1);
CDC * pCtrDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pCtrDC->SelectStockObject(BLACK_BRUSH);
pCtrDC->Rectangle(x1,y1,x1+2,y1+2);
pWnd->ReleaseDC(pCtrDC);
}

在另外一函数里调用该函数:
y1=204-(int)(result*100);
x1++;
if(y1<=205)
{
Dopaint(x1,y1);
}
多次调用Dopaint后可以画出图形,但是别的窗口覆盖一下(或者最小化)再看这个对话框,这个图形就不见了。

我也用过OnPaint函数进行画图,但是现在我要的不是一次性在对话框里把图画好,而是用一个一个的点把图象描出来,要多次调用OnPaint函数,画好图之后用别的窗口覆盖一下(或者最小化)在看这个对话框,图形就只剩最后一次画的点了。

这是为什么啊,怎么能让图形不被刷掉??
可以给出vector<CPoint> pts详细点的代码吗?
比如怎么定义,怎么调用

你需要保存你的图象信息,你OnPaint代码只能画最后一个点

可以这样用一个容器保存所有点的信息,譬如vector<CPoint> pts;

OnPaint()
{
遍历pts;画出所有点

}

你要实现不是一次性画图就要用代码维护好容器pts