实时数据可视化图形控件开发指南

在开发实时数据可视化应用程序时,经常需要将仪器的实时数据以图形的形式展示出来。本文将介绍如何在Microsoft Visual Studio中使用图形控件来实现这一功能。将使用Microsoft eMbedded Visual C++ 3.0作为开发工具,并通过一个名为"MECGraphCtrl"的自定义图形控件来展示实时数据。

创建自定义图形控件

首先,需要在对话框中插入一个虚拟的图片控件,并将其大小调整为期望的图形控件大小。将这个控件命名为"IDC_GRAPH_CUSTOM",这个名字听起来很技术化。接下来,在自定义控件的属性中,需要为类名填写"GRAPH_CUSTOM"。这是需要在对话框类构造函数中注册的类名字符串。

在拥有者类(例如对话框)中,添加一个类型为MECGraphCtrl的成员变量。

class MECPerformerDlg : public CDialog { // Construction... protected: static BOOL RegisterWndClass(HINSTANCE hInstance); MECGraphCtrl m_oGraphCtrl; };

在OnInitDialog函数中,需要注册自定义控件。

BOOL MECPerformerDlg::OnInitDialog() { WNDCLASS wc; wc.lpszClassName = _T("GRAPH_CUSTOM"); // matches class name wc.hInstance = hInstance; wc.lpfnWndProc = ::DefWindowProc; // wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = 0; wc.lpszMenuName = NULL; wc.hbrBackground = (HBRUSH) ::GetStockObject(LTGRAY_BRUSH); wc.style = CS_GLOBALCLASS; // To be modified wc.cbClsExtra = 0; wc.cbWndExtra = 0; return CDialog::OnInitDialog(); }

在OnInitDialog函数中,还需要创建控件。

BOOL MECPerformerDlg::OnInitDialog() { CRect rect; GetDlgItem(IDC_GRAPH_CUSTOM)->GetWindowRect(rect); ScreenToClient(rect); GetDlgItem(IDC_GRAPH_CUSTOM)->ShowWindow(SW_HIDE); // create the control m_oGraphCtrl.Create(WS_VISIBLE | WS_CHILD, rect, this); return CDialog::OnInitDialog(); }

接下来,需要设置控件的垂直范围、背景颜色、网格颜色和绘图颜色。

BOOL MECPerformerDlg::OnInitDialog() { // determine the rectangle for the control CRect rect; GetDlgItem(IDC_GRAPH_CUSTOM)->GetWindowRect(rect); ScreenToClient(rect); GetDlgItem(IDC_GRAPH_CUSTOM)->ShowWindow(SW_HIDE); // create the control m_oGraphCtrl.Create(WS_VISIBLE | WS_CHILD, rect, this); m_oGraphCtrl.SetXRange(0, 10, 2); m_oGraphCtrl.SetRange(0, 10, 2); m_oGraphCtrl.SetYUnits("Volume in ml"); m_oGraphCtrl.SetXUnits("Time in seconds"); m_oGraphCtrl.SetBackgroundColor(RGB(0, 0, 64)); m_oGraphCtrl.SetGridColor(RGB(192, 192, 255)); m_oGraphCtrl.SetPlotColor(RGB(0, 255, 0)); return CDialog::OnInitDialog(); } // Call the function with the data value to be appended to the plot. m_oGraphCtrl.AppendPoint(nRandomX, nRandomY);
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485