+ -
当前位置:首页 → 问答吧 → 将对话框最小化 在还原之后绘制的曲线不显示

将对话框最小化 在还原之后绘制的曲线不显示

时间:2011-11-25

来源:互联网

我做了一个基于对话框的程序,在一个静态文本框中的曲线,当我将对话框最小化在还原之后绘制的曲线就不显示了,对话框中没有WM_SYSCOMMAND这个消息处理函数,我在OnPaint中添加了绘图的函数还是不行。一下是源代码
void CExcelTestDlg::OnPaint() 
{
//
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);

}
else
{
CDialog::OnPaint();
}

m_DrawLine.DrawCur("T1"); //添加的绘图操作
}
移动对话框和将对话框最大化的时候 绘的曲线都不会消失,请问各位高手该怎么改啊,不胜感激!!!

以下的绘图的具体操作 CDrawLine这个类是派生至CStatic的 
void CDrawLine::DrawCur(CString ValType)
{
CString str=ValType+".txt";
CFile File(str,CFile::modeRead);
CArchive ar1(&File,CArchive::load);
float t1[20],zo[20];
for (int i=0;i<20;i++)
ar1>>t1[i]>>zo[i];
ar1.Close();
File.Close();
// CDC* pDC=GetDC();
CClientDC DC(this);
CRect rect;
GetClientRect(&rect);
// pDC->GetWindowRect(&rect);
CPen newpen(PS_SOLID,1,RGB(255,0,0));
CPen *OldPen=DC.SelectObject(&newpen);
// CPen *OldPen=pDC->SelectObject(&newpen);
m_ptOrigin.y=rect.bottom-(zo[0]/80)*rect.Height()*0.6;
m_ptOrigin.x=rect.left+rect.Width()*0/20;
m_ptEnd.y=rect.bottom-(zo[1]/80)*rect.Height()*0.6;
m_ptEnd.x=rect.left+rect.Width()*(1)/20;
for(i=0;i<18;i++)
{
DC.MoveTo(m_ptOrigin);
DC.LineTo(m_ptEnd);
// pDC->MoveTo(m_ptOrigin);
// pDC->LineTo(m_ptEnd);
m_ptOrigin=m_ptEnd;
m_ptEnd.y=rect.bottom-(zo[i+2]/80)*rect.Height()*0.6;
m_ptEnd.x=rect.left+rect.Width()*(i+2)/20;
}
DC.MoveTo(m_ptOrigin);
DC.LineTo(m_ptEnd);
DC.MoveTo(rect.left,rect.bottom-20);
DC.LineTo(rect.right,rect.bottom-20);
DC.MoveTo(rect.left,rect.bottom-20);
DC.LineTo(rect.left,rect.top);
COLORREF clr=RGB(0,0,0);
DC.SetTextColor(clr);
DC.SetBkMode(TRANSPARENT); //设置TextOut输出内容透明
DC.TextOut(rect.left+50,rect.bottom,"阻抗值Zo随T1变化曲线图");


}

作者: cyy3701608   发布时间: 2011-11-25

绘图的代码应该写在OnPaint中才行。

作者: wltg2001   发布时间: 2011-11-25

把你的CPaintDC dc(this); 放到if的外面~

作者: VisualEleven   发布时间: 2011-11-25

不好意思,没仔细看就答了。
你试试改成下面这样行不:
void CExcelTestDlg::OnPaint()  
{
// 
if (IsIconic())
{
。。。。。。。
}
else
{
m_DrawLine.DrawCur("T1"); //添加的绘图操作

CDialog::OnPaint();
}

}

作者: wltg2001   发布时间: 2011-11-25

把绘图的动作移到CDrawLine这个类的Onpaint中比较好.

作者: yuucyf   发布时间: 2011-11-25