CPen *oldpen=NULL;
oldpen=dc.SelectObject(pPenBlack1);
dc.MoveTo(250+i*15,110); // 第一通道绘制纵轴系部分 dc.LineTo(250+i*15,20); }
for(int j=1;j<=9;j++) {
CString str;
CFont font,*pOldFont;
font.CreateFont(10, // nHeight 4, // nWidth
0, // nEscapement 0, // nOrientation 500, // nWeight FALSE, // bItalic FALSE, // bUnderline 0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision CLIP_DEFAULT_PRECIS, // nClipPrecision DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, //
nPitchAndFamily _T( \
pOldFont=dc.SelectObject(&font); str.Format(\
dc.TextOut(240,110-j*10,str);// 第一通道绘制部分 dc.TextOut(230,30,\数\ dc.TextOut(230,40,\值\
dc.TextOut(680,125,\时间(/s)\
dc.SelectObject(pOldFont);
dc.MoveTo(250,110-j*10); // 第一通道绘制横轴系部分 dc.LineTo(700,110-j*10);
CFont font,*pOldFont;
font.CreateFont(14, // nHeight 6, // nWidth
0, // nEscapement 0, // nOrientation 500, // nWeight FALSE, // bItalic
- 20 -
FALSE, // bUnderline 0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision CLIP_DEFAULT_PRECIS, // nClipPrecision DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, //
nPitchAndFamily
_T( \
pOldFont=dc.SelectObject(&font); dc.SetTextColor(RGB(0,0,250));
dc.TextOut(420,6,\第一通道曲线图\ dc.SelectObject(pOldFont);
// Do not call CDialog::OnPaint() for painting messages
}
1.绘制曲线在坐标轴上的动态显示过程,当绘制曲线超出所绘制的框图时,采用刷新显示,即刷新原来的绘图曲线重新绘图,其代码如下:
void CPage1::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default switch(nIDEvent) {
case 1: {
int offsetx=15; CClientDC dc(this); static int x=250; static int y=110;
CPen pen1(PS_SOLID,0,RGB(255,0,8)); CPen *oldpen1=NULL;
oldpen1=dc.SelectObject(&pen1); x=x+offsetx; if(x<=700) {
dc.MoveTo(x-offsetx,y); y=110-rand()?; dc.LineTo(x,y); } else {
CRect rect;
- 21 -
rect.SetRect(250,20,700,110); InvalidateRect(rect,TRUE); x=250;
y=110-rand()?; } } break;
CDialog::OnTimer(nIDEvent); }
3.3.4 采集数据存储模块
该模块用于对所采集的数据进行存储,存储过程为实时输出显示并存储于指定空间的.txt文件中,其软件流程图如图3.3.5所示:
数据显示 打开文件 数据保存 数据获取
图 3.3.5
实现代码如下:
void CPage1::OnPaint() {
CString strTmp;
strTmp.Format(\ str += strTmp ;
/*\ CStdioFile file( \
// 数据存储位置
file.WriteString(str); // 数据写入
- 22 -
file.Close(); // 关闭文件夹 }
3.3.5 均值、最值处理模块
该模块用于对采集数据均值、最值的实时显示,每个数据显示于相对应的文本控件中,各个控件所显示的值能随采集数值的变化而变化, 本例以第一通道各控件为例,各控件的赋值声明如表3.3.5所示: 表 3.3.5
控件ID IDC_EDIT10 IDC_EDIT11 IDC_EDIT12 IDC_EDIT13
各部分功能代码显示如下:
void CPage1::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent) { case 1: {
int
offsetx=15; 数据类型 Int Float Int Int 成员名 m_caiji1 m_junzhi1 m_max1 m_min1 备注 采集数值 采集均值 采集最大值 采集最小值 CClientDC dc(this); static int x=250; static int y=110;
static int z=0;
static int j=0; static int max=0;
- 23 -
static int min=90;
CPen pen1(PS_SOLID,0,RGB(255,0,8)); CPen *oldpen1=NULL;
oldpen1=dc.SelectObject(&pen1); x=x+offsetx; if(x<=700) {
j++;
dc.MoveTo(x-offsetx,y); y=110-rand()?;
dc.LineTo(x,y);
m_caiji1=(110-y);
UpdateData(FALSE); // 采集数值显示部分 } else {
CRect rect;
rect.SetRect(250,20,700,110);
InvalidateRect(rect,TRUE); // 屏幕刷新区域
j++;
}
x=250;
y=110-rand()?; m_caiji1=(110-y);
UpdateData(FALSE); //采集数值显示部分
z+=m_caiji1;
if(max<=m_caiji1)
m_junzhi1=z/j;
UpdateData(FALSE); // 采集均值显示部分
- 24 -