将对话框最小化 在还原之后绘制的曲线不显示
时间: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变化曲线图");
}
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();
}
}
你试试改成下面这样行不:
void CExcelTestDlg::OnPaint()
{
//
if (IsIconic())
{
。。。。。。。
}
else
{
m_DrawLine.DrawCur("T1"); //添加的绘图操作
CDialog::OnPaint();
}
}
作者: wltg2001 发布时间: 2011-11-25
把绘图的动作移到CDrawLine这个类的Onpaint中比较好.
作者: yuucyf 发布时间: 2011-11-25
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28