2024年5月11日发(作者:)

VC画波形图 我要编写一个小软件读取信号并显示信号波形。

我的做法是创建基于对话框的应用程序主对话框类假设为

ADlg我在主对话框上留出一片区域用于显示波形新建了一

个基类为CWnd的类CImageWnd类希望对波形的绘制操作

ShowSignal在该类中完成。但是我在CImageWnd类的

OnPaint函数中无法使用自定义坐标系统而如果把显示信号

的操作ShowSignal放在ADlg类中却可以使用自定义坐标系

统。为什么在CImageWnd类的OnPaint函数中无法使用自定

义坐标系统 //////////////////////////////////////////// ///////////下面的

OnPaint函数老是出错 /////////////////////////////////////////// void

CImageWnd::ShowSignalint length const void lpShort

DataLengthlength ifData delete Data Datanew shortDataLength

memcpyDatalpShortDataLength Invalidate void

CImageWnd::OnPaint CPaintDC dcthis // device context for

painting // TODO: Add your message handler code here // CDC

pDCGetDC //

pDC00SRCCOPY // CDC

pDCGetDC CBrush brush1

HatchBrushHS_CROSSRGB128128128

Objectbrush1 glerect Object

short MaxDataFindAbsMaxDataDataDataLength//最大数据十

进制 short MaxshortMaxData1.1

ModeMM_ANISOTROPIC//设置映射模式为

MM_ANISOTROPIC //设置窗口左上角的坐标为0Max //

dowOrg0Max dowExtDataLength-2Max//

设置窗口度量 // wportOrg00//设置视口左上角的坐

标 //设置视口度量 //

创建蓝色实线画笔 CPen

penPS_SOLID1RGB00255pen1PS_SOLID1RGB25500

Objectpen//载入蓝色实线画笔 00 int x

short p forx0pDataxRectanglerect Object

lpLongSelectedlpLong SelectedLengthlength

MaxDataFindAbsMaxDatalpLonglength MaxlongMaxData1.1

pDC-SetMapModeMM_ANISOTROPIC//设置映射模式为

MM_ANISOTROPIC pDC-SetWindowOrg0Max//设置窗口左

上角的坐标为0Max pDC-SetWindowExtlength-2Max//设置窗

口度量 xWinExtlength yWinExt-2Max

pDC-SetViewportOrg2020//设置视口左上角的坐标

//设置视口度量

CPen penPS_SOLID1RGB00255pen1PS_SOLID1RGB25500

pDC-SelectObjectpen//载入蓝色实线画笔 pDC-MoveTo00 int

x long p forx0plpLongxSelectObjectpen1//载入红色实线画笔

pDC-MoveTo00//绘制X轴 pDC-LineTolength-10

Object Object ReleaseDCpDC 但是当程

序处于非顶层窗口时波形会消失。窗口重绘

////////////////////////////////////////////////////////// 根据经验判断是

SetMapMode引起的问题 最好int iMode

pDC-SetMapModeMM_ANISOTROPIC 在绘画操作结束后

加上pDC-SetMapModeiMode 正是因为这个的不同才引起了

你所提的问题希望对你有所帮助