Real Time 2D Graph | CodeGuru

Real Time 2D Graph

Environment: eMbedded Visual C++ 3.0, Windows 2000, Windows CE Emulator To Run this application you must have installed eMbedded Visual C++ 3.0 This Article is mainly contributed to develop the 2D Real Time Graph. I was searching the net to develop the graph as shown above. I found that the picture control had been used […]

Written By
CodeGuru Staff
CodeGuru Staff
Nov 5, 2001
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: eMbedded Visual C++ 3.0, Windows 2000, Windows CE Emulator

To Run this application you must have installed eMbedded Visual C++ 3.0

This Article is mainly contributed to develop the 2D Real Time Graph. I was searching the net to develop the graph as shown above. I found that the picture control had been used to draw the graph in Microsoft Visual Studio. To Develop this application, I needed to use the Microsoft eMbedded Visual C++ 3.0.

Historically, I’ve shown “live” Instrument readings through the constant updating of a numerical value by using constant value array. The Graph shows the real time data from the instrument

This MECGraphCtrl is based on the bitmap repainting concept used in Mark C. Malburg. . It provides significant enhancements through the display of scaling information and plotting of double precision values. The user implementation is described below.

In the control’s owner (for example dialog) insert a dummy picture control.
Size the Custom Control border to be the desired size of the GraphCtrl. Name the control something that sounds technical, like “IDC_GRAPH_CUSTOM”.
In the property of the custom control, For class, write GRAPH_CUSTOM. This is the string for the class that should be registered in the Constructor of the Dialog class.

1. Insert the control in the owner class.

Add a member variable of type MECGraphCtrl.

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

2. Register the custom control.

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;
}

3. Create the control.

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) ;
  …
}

4. Personalize the Control

Set the vertical range, background color, grid color and plot color.

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)) ;
  …
}

5. Use the control.

Call the m_oGraphCtrl.AppendPoint(nRandomX, nRandomY); function with the the data value to be appended to the plot.

values can be modified to achieve different styles of displays.

Downloads

Download demo project – 59 Kb

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.