Click here to Skip to main content
6,822,123 members and growing! (17,344 online)
Email Password   helpLost your password?
Platforms, Frameworks & Libraries » WTL » General     Intermediate

Oscilloscope control

By Voland7

WTL Oscilloscope control.
VC6, Windows, WTL, Dev
Posted:21 Jun 2004
Updated:23 Jun 2004
Views:77,924
Bookmarked:45 times
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
33 votes for this article.
Popularity: 6.22 Rating: 4.09 out of 5
1 vote, 3.0%
1
4 votes, 12.1%
2
1 vote, 3.0%
3
6 votes, 18.2%
4
21 votes, 63.6%
5

Sample Image

Introduction

This is a simple implementation of Oscilloscope control. This control shows last N points of user data. It has up to 8 channels (number of channels are defined by OSC_MAX_CHANNELS parameter in header file). Each channel can show only one curve (in this version). Oscilloscope includes zoom in implementation by X (Horizontal), by Y (Vertical), and by both axes simultaneously (Rectangle). Zoom out is also available by pressing right mouse button in channel area (hold CTRL key to full zoom out).

Using the code

To use this control in your application:

  • Design the dialog and add the Static control.
  • Add the Oscilloscope.h header file to your project.
  • Assign a OscilloscopeCtrl to your static control.
  • In OnInitDialog(), subclass OscilloscopeCtrl control to ID using the SubclassWindow method.

Don't forget to turn on any channels you need.

#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);
     ...
}

After creating Oscilloscope control, you can set special colors for curves and background (for each channel), point styles (how to draw the data points of curves), turn on/off grid, padding, and set padding coefficient. Padding is auto calculating value and used to offset curve by Y axis. By increasing padding coefficient (k>1), it is possible to decrease the gap between curve and channel top boundary box. If k<1, the gap will be increased (then k != 0). You can change oscilloscope layout by turning on/off X and Y axes and changing their positions (up or bottom for X axis; left or right for Y axis). Important: X axis is only one for all channels and Y axis is unique for every channel.

     ...
     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

     ...

Then you need to supply data for oscilloscope (pointers to double arrays). It's important that double arrays you pass to oscilloscope have to be global. To increase drawing speed, oscilloscope doesn't copy data to its buffers (!!!). The double arrays contains only Y values, oscilloscope calculates X values automatically by using user time.

     ...
     // 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);
     ...

Updates

  • Removed using namespace std from header file :)
  • Added double buffering to avoid flickering on draw (thanks to Michal Mecinski)

      Demo program

      The small demo program shows how to use the oscilloscope control. Add buttons to control its layout, to change zoom mode, points styles, last points, and etc. You can change source code for any future usage.

    • License

      This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

      A list of licenses authors might use can be found here

      About the Author

      Voland7


      Member

      Occupation: Web Developer
      Location: Russian Federation Russian Federation

      Other popular WTL articles:

      Article Top
      You must Sign In to use this message board.
      FAQ FAQ 
       
      Noise Tolerance  Layout  Per page   
       Msgs 1 to 25 of 32 (Total in Forum: 32) (Refresh)FirstPrevNext
      GeneralSetPoints Pinmemberjustinlacroix7:01 17 Nov '06  
      GeneralVery slow :( PinmemberHyperThreading10:39 24 Oct '06  
      GeneralHelp to create MFC program using Oscilloscope PinmemberMuralish21:52 16 Sep '06  
      GeneralPossible Bug PinmemberPiotrGutkowski8:26 28 Mar '06  
      GeneralOscilloscope? Really? PinmemberMichael__Ber21:25 21 Jan '06  
      GeneralRe: Oscilloscope? Really? Pinmemberkezhu21:59 25 Mar '08  
      GeneralThis one (oscilloscope-lib) doesn't give ... PinmemberMichael__Ber8:02 26 Mar '08  
      Generalmutliple siginals Pinmemberrbuchana12:09 6 Jan '06  
      GeneralRe: mutliple siginals Pinmemberrbuchana7:34 20 Feb '06  
      Generaldisplay sound PinmemberTassadaqHussain13:30 15 Aug '05  
      Generalto MFC PinmemberEMTA413:00 19 May '05  
      GeneralRe: to MFC PinmemberAlexander Yadykin4:43 8 Jun '05  
      GeneralRe: to MFC PinmemberSchwenner Simon6:28 13 Jun '05  
      GeneralRe: to MFC PinmemberAlexander Yadykin21:04 13 Jun '05  
      GeneralRe: to MFC PinmemberSchwenner Simon2:28 14 Jun '05  
      GeneralPlease HELP with MISSING Files Pinmembervishnya13:11 5 Apr '05  
      GeneralRe: Please HELP with MISSING Files Pinmembergyar12:16 6 Apr '05  
      GeneralRe: Please HELP with MISSING Files PinsussAnonymous13:12 6 Apr '05  
      GeneralRe: Please HELP with MISSING Files Pinmembervishnya13:41 6 Apr '05  
      Generalcould you give me missed files? Pinmemberwindshade12:28 11 Aug '04  
      GeneralRe: could you give me missed files? PinsussAnonymous13:24 6 Apr '05  
      GeneralSpeed Pinmembermanu77723:18 2 Aug '04  
      GeneralOsc screen Pinmembergyar5:39 1 Jul '04  
      Generalmissing files ? PinmemberMaxHacker8:55 24 Jun '04  
      GeneralRe: missing files ? Pinmemberautodebug15:57 15 Sep '04  

      General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

      Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads.

      PermaLink | Privacy | Terms of Use
      Last Updated: 23 Jun 2004
      Editor: Nishant Sivakumar
      Copyright 2004 by Voland7
      Everything else Copyright © CodeProject, 1999-2010
      Web19 | Advertise on the Code Project