示波器控件






4.71/5 (37投票s)
2004年6月22日
2分钟阅读

188479

10308
WTL 示波器控件。
引言
这是一个简单的示波器控件实现。该控件显示用户数据的最后 N 个点。它最多支持 8 个通道(通道数量由头文件中的 OSC_MAX_CHANNELS
参数定义)。每个通道只能显示一条曲线(在本版本中)。示波器包括通过 X(水平)、Y(垂直)以及同时通过两个轴(矩形)进行缩放的实现。通过在通道区域按下右键鼠标(按住 CTRL 键可完全缩放)也可以进行缩放。
使用代码
要在您的应用程序中使用此控件
- 设计对话框并添加静态控件。
- 将 Oscilloscope.h 头文件添加到您的项目中。
- 将
OscilloscopeCtrl
控件分配给您的静态控件。 - 在
OnInitDialog()
中,使用SubclassWindow
方法将OscilloscopeCtrl
控件子类化到 ID。
不要忘记启用您需要的任何通道。
#include "Oscilloscope.h" //... class CMainDlg : public CDialogImpl<CMainDlg> { BEGIN_MSG_MAP(CMainDlg) ... MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) REFLECT_NOTIFICATIONS() END_MSG_MAP() ... LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); ... OscilloscopeCtrl m_oscill; ... }; //... LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { ... m_oscill.SubclassWindow( ::GetDlgItem( IDC_AREA ) ); m_oscil.ShowChannel(0); m_oscil.ShowChannel(2); ... }
创建示波器控件后,您可以为曲线和背景(每个通道)设置特殊颜色,设置点样式(如何绘制曲线的数据点),打开/关闭网格,设置填充和填充系数。填充是自动计算的值,用于通过 Y 轴偏移曲线。通过增加填充系数(k>1),可以减小曲线与通道顶部边界框之间的间隙。如果 k<1,则间隙将增加(当 k != 0 时)。您可以通过打开/关闭 X 和 Y 轴以及更改它们的位置(X 轴在顶部或底部;Y 轴在左侧或右侧)来更改示波器布局。重要提示:X 轴是所有通道的唯一一个,而 Y 轴是每个通道的唯一一个。
... m_oscil.UseGrid(true); // trun on grid m_oscil.UsePadding(true); // use padding m_oscil.PaddingCoef(2.0); // set padding coefficient m_oscil.PointStyle(UTriangle); // set point style to UTriangle m_oscil.GetChannel(0)->SetLnColor( RGB(0,255,0) ); // green curve m_oscil.GetChannel(0)->SetBgColor( RGB(0,0,0) ); // white background m_oscil.BottomXAxis(true); // adds bottom X axis m_oscil.LeftYAxis(true); // adds left Y axis ...
然后您需要为示波器提供数据(指向双精度数组的指针)。重要的是,您传递给示波器的双精度数组必须是全局的。为了提高绘图速度,示波器不会将数据复制到其缓冲区中(!!!)。双精度数组仅包含 Y 值,示波器使用用户时间自动计算 X 值。
... // number of arrays have to be equal to OSC_MAX_CHANNELS !!! // but if you don't need data for example // for channel 1 the m_values[1] can be NULL double* m_values[OSC_MAX_CHANNELS]; size_t m_cnt; size_t m_time; ... m_oscil.SetPoints(m_time, m_values, m_cnt); ...
更新
std
:)演示程序
这个小演示程序展示了如何使用示波器控件。添加按钮来控制其布局,更改缩放模式,点样式,最后点数等。您可以更改源代码以供将来使用。