VC实现波形不闪烁动态绘图

王朝vc·作者佚名  2006-01-17
宽屏版  字体: |||超大  

VC实现波形不闪烁动态绘图

作者:重庆大学通信工程学院 吴华

下载源代码

一、程序运行时波形效果

二、在信号处理中,通常需要把采集信号的实时波形显示出来。

如果直接在屏幕上动态绘图的话,会出现闪烁现象,为了克服这个问题,本文采用的就是先在内存绘图,然后再拷贝到屏幕,从而实现动态绘图而不闪烁。详细介绍如下:

2.1首先在头文件中定义以下私有变量,并在对话框资源中放置一个picture控件

private:

CDC *pDC; //屏幕绘图设备

CDC memDC; //内存绘图设备

int m_High; //绘图起点

int m_Low; //绘图终点

int m_lCount[1024]; //数据存储数组

int m_now; //记录波形当前点

2.2在实现文件中初始化变量,并设置定时器

BOOL CDrawTest::OnInitDialog()?

{

CDialog::OnInitDialog();

// TODO: Add extra initialization here

m_Low = 0;

m_High = 1024;

m_now =0;

SetTimer(1,100,NULL);

return TRUE; // return TRUE unless you set the focus to a control

// EXCEPTION: OCX Property Pages should return FALSE

}

2.3在定时器里创建内存绘图设备,并调用绘图函数在内存设备中绘图,绘图完毕后把内存设备中图拷贝到屏幕

void CDrawTest::OnTimer(UINT nIDEvent)

{

// TODO: Add your message handler code here and/or call default

CRect rect;

// 获取绘制坐标的文本框

CWnd* pWnd = GetDlgItem(IDC_COORD);

//获得对话框上的picture的窗口句柄

pWnd-GetClientRect(&rect);

// 指针

pDC = pWnd-GetDC();

pWnd-Invalidate();

pWnd-UpdateWindow();

//内存绘图

CBitmap memBitmap;

CBitmap* pOldBmp = NULL;

//创建内存绘图设备

memDC.CreateCompatibleDC(pDC);

memBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);

pOldBmp = memDC.SelectObject(&memBitmap);

memDC.BitBlt(rect.left,rect.top,rect.right,rect.bottom,pDC,0,0,SRCCOPY);

//自定义绘图函数,详细见源程序

DrawWave(&memDC);

//把内存绘图拷贝到屏幕

pDC-BitBlt(rect.left,rect.top,rect.right,rect.bottom,&memDC,0,0,SRCCOPY);

memDC.SelectObject(pOldBmp);

memDC.DeleteDC();

memBitmap.DeleteObject();

CDialog::OnTimer(nIDEvent);

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有