VC picture控件画图
我在对话框初始化中启动定时器实现在PIC控件上不断画图,但是PIC控件中所画的图一会就会消失,查看“Windows任务管理器”,看到PF使用率不断上升,不是很明白出现问题...
我在对话框初始化中启动定时器实现在PIC控件上不断画图,但是PIC控件中所画的图一会就会消失,查看“Windows任务管理器”,看到PF使用率不断上升,不是很明白出现问题的原因,恳请各位帮忙分析解决一下这个问题,不胜感谢!
代码如下:
BOOL CTestsavepicDlg::OnInitDialog()
{
....
// TODO: Add extra initialization here
SetTimer(1,100,NULL);
return TRUE; // return TRUE unless you set the focus to a control
}
//////////////////////////////////////////////
// CBitmap m_pBitmap;
// CStatic m_picture;//picture控件变量
void CTestsavepicDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CreateBmp(&m_pBitmap);
m_picture.SetBitmap((HBITMAP)m_pBitmap.Detach());
CDialog::OnTimer(nIDEvent);
}
/////////////////////////////////////////////
void CTestsavepicDlg::CreateBmp(CBitmap *bitmap)
{
CClientDC dc(this);
//设置内存CDC
CDC MemDC;
//创建相容的bitmap和dc
bitmap->CreateCompatibleBitmap(&dc, m_rectPos.right,m_rectPos.bottom);
MemDC.CreateCompatibleDC(&dc);
MemDC.SelectObject(bitmap);
//在内存DC中绘制图形
DrawCircleFrame(&MemDC);
//将创建图片保存在内存中
MemDC.SelectObject(bitmap);
MemDC.DeleteDC();
}
void CTestsavepicDlg::DrawCircleFrame(CDC *pDC) //画绘图区域的边框
{
int Xcentr,Ycentr,Radius;
Xcentr=m_rectPos.left+m_rectPos.Width()/2;
Ycentr=m_rectPos.bottom-m_rectPos.Height()/2;
Radius=80;
CPen pNewPen;
CPen* pOldPen;
CFont fontText;
CFont *pOldFont;
fontText.CreateFont(15,6,0,0,20,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,NULL);
pOldFont = pDC->SelectObject (&fontText);
pDC->SetTextColor(RGB(0,0,255));
pNewPen.CreatePen(PS_SOLID,1, RGB(0,0,0));
pOldPen=pDC->SelectObject(&pNewPen);
pDC->Rectangle(m_rectPos);
x=sizeof(y)/sizeof(int);
pDC->MoveTo(35,m_rectPos.bottom-30);
for (int i=0;i<x;i++)
{
pDC->LineTo(35+m_rectPos.right*i/20,m_rectPos.bottom-30-y[i]);
}
pDC->SelectObject(pOldPen);
pNewPen.DeleteObject();
}
由于所画的图是与串口接收的数据有关,所以用定时器不断检测串口数据,在有数据时就画图,所以我觉得不能在要在OnDraw或OnPaint中处理,或许我想法错误,请详细指点一下,谢谢! 展开
代码如下:
BOOL CTestsavepicDlg::OnInitDialog()
{
....
// TODO: Add extra initialization here
SetTimer(1,100,NULL);
return TRUE; // return TRUE unless you set the focus to a control
}
//////////////////////////////////////////////
// CBitmap m_pBitmap;
// CStatic m_picture;//picture控件变量
void CTestsavepicDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CreateBmp(&m_pBitmap);
m_picture.SetBitmap((HBITMAP)m_pBitmap.Detach());
CDialog::OnTimer(nIDEvent);
}
/////////////////////////////////////////////
void CTestsavepicDlg::CreateBmp(CBitmap *bitmap)
{
CClientDC dc(this);
//设置内存CDC
CDC MemDC;
//创建相容的bitmap和dc
bitmap->CreateCompatibleBitmap(&dc, m_rectPos.right,m_rectPos.bottom);
MemDC.CreateCompatibleDC(&dc);
MemDC.SelectObject(bitmap);
//在内存DC中绘制图形
DrawCircleFrame(&MemDC);
//将创建图片保存在内存中
MemDC.SelectObject(bitmap);
MemDC.DeleteDC();
}
void CTestsavepicDlg::DrawCircleFrame(CDC *pDC) //画绘图区域的边框
{
int Xcentr,Ycentr,Radius;
Xcentr=m_rectPos.left+m_rectPos.Width()/2;
Ycentr=m_rectPos.bottom-m_rectPos.Height()/2;
Radius=80;
CPen pNewPen;
CPen* pOldPen;
CFont fontText;
CFont *pOldFont;
fontText.CreateFont(15,6,0,0,20,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,NULL);
pOldFont = pDC->SelectObject (&fontText);
pDC->SetTextColor(RGB(0,0,255));
pNewPen.CreatePen(PS_SOLID,1, RGB(0,0,0));
pOldPen=pDC->SelectObject(&pNewPen);
pDC->Rectangle(m_rectPos);
x=sizeof(y)/sizeof(int);
pDC->MoveTo(35,m_rectPos.bottom-30);
for (int i=0;i<x;i++)
{
pDC->LineTo(35+m_rectPos.right*i/20,m_rectPos.bottom-30-y[i]);
}
pDC->SelectObject(pOldPen);
pNewPen.DeleteObject();
}
由于所画的图是与串口接收的数据有关,所以用定时器不断检测串口数据,在有数据时就画图,所以我觉得不能在要在OnDraw或OnPaint中处理,或许我想法错误,请详细指点一下,谢谢! 展开
2个回答
展开全部
Measurement
Studio是NI公司的开发工具,可以在VC里使用,很方便的
可以使用NI的Measurement
Studio中graph控件
你将x轴和y轴的数据直接给该控件就行了,很方便的
可以用它的ITEM("Plot-1").ChartXY(x_data,y_data)
将你要显示的数据送给它就ok了
具体的你可以看一下NI的帮助
注意,这个控件你要安装Measurement
Studio才可以
要注册的
Studio是NI公司的开发工具,可以在VC里使用,很方便的
可以使用NI的Measurement
Studio中graph控件
你将x轴和y轴的数据直接给该控件就行了,很方便的
可以用它的ITEM("Plot-1").ChartXY(x_data,y_data)
将你要显示的数据送给它就ok了
具体的你可以看一下NI的帮助
注意,这个控件你要安装Measurement
Studio才可以
要注册的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询