vc波形图
VC画波形图
我要编写一个小软件,读取信号并显示信号波形。我的做法是:创建基于对话框的应用程序,主对话框类假设为ADlg,我在主对话框上留出一片区域用于显示波形,新建了一个基类为CWnd的类CImageWnd类,希望对波形的绘制操作ShowSignal()在该类中完成。但是,我在CImageWnd类的OnPaint()函数中无法使用自定义坐标系统,而如果把显示信号的操作ShowSignal放在ADlg类中却可以使用自定义坐标系统。为什么在CImageWnd类的OnPaint()函数中无法使用自定义坐标系统?
//////////////////////////////////////////// ///////////下面的OnPaint()函数老是出错:
/////////////////////////////////////////// void CImageWnd::ShowSignal(int length, const void *lpShort)
{
DataLength=length;
if(Data) delete Data;
Data=new short[DataLength];
memcpy(Data,lpShort,DataLength);
Invalidate();
}
void CImageWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here // CDC* pDC=GetDC();
// dc.BitBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,SRCCOPY);
// CDC* pDC=GetDC();
CBrush brush1;
brush1.CreateHatchBrush(HS_CROSS,RGB(128,128,128)); dc.SelectObject(&brush1);
dc.Rectangle(&rect);
brush1.DeleteObject();
short MaxData=FindAbsMaxData(Data,DataLength);//最大数据(十进制)
short Max=short(MaxData*1.1);
dc.SetMapMode(MM_ANISOTROPIC);//设置映射模式为MM_ANISOTROPIC
//设置窗口左上角的坐标为(0,Max)
// dc.SetWindowOrg(0,Max);
dc.SetWindowExt(DataLength,-2*Max);//设置窗口度量
/**/
dc.SetViewportOrg(0,0);//设置视口左上角的坐标
dc.SetViewportExt(rect.Width(),rect.Height());//设置视口度量
//创建蓝色实线画笔
CPen pen(PS_SOLID,1,RGB(0,0,255)),pen1(PS_SOLID,1,RGB(255,0,0));
dc.SelectObject(&pen);//载入蓝色实线画笔
dc.MoveTo(0,0);
int x;
short *p;
for(x=0,p=Data;(xSelectObject(&brush1);
pDC->Rectangle(&rect);
brush1.DeleteObject();
lpLongSelected=lpLong;
SelectedLength=length;
MaxData=FindAbsMaxData(lpLong,length); Max=long(MaxData*1.1);
pDC->SetMapMode(MM_ANISOTROPIC);//设置映射模式为MM_ANISOTROPIC
pDC->SetWindowOrg(0,Max);//设置窗口左上角的坐标为(0,Max)
pDC->SetWindowExt(length,-2*Max);//设置窗口度量
xWinExt=length;
yWinExt=-2*Max;
pDC->SetViewportOrg(20,20);//设置视口左上角的坐标
pDC->SetViewportExt(rect.Width(),rect.Height());//设置视口度量
CPen pen(PS_SOLID,1,RGB(0,0,255)),pen1(PS_SOLID,1,RGB(255,0,0));
pDC->SelectObject(&pen);//载入蓝色实线画笔
pDC->MoveTo(0,0);
int x;
long* p;
for(x=0,p=lpLong;(xLineTo(x,*p);//绘制正半轴曲线
pDC->SelectObject(&pen1);//载入红色实线画笔
pDC->MoveTo(0,0);//绘制X轴
pDC->LineTo(length-1,0);
pen.DeleteObject();
pen1.DeleteObject();
ReleaseDC(pDC);
}
但是当程序处于非顶层窗口时,波形会消失。(窗口重绘)
根据经验判断是SetMapMode()引起的问题~~
最好int iMode = pDC->SetMapMode(MM_ANISOTROPIC);
在绘画操作结束后加上pDC->SetMapMode(iMode); 正是因为这个的不同,才引起了你所提的问题(希望对你有所帮助~)
本文档为【vc波形图】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。