65.9K
CodeProject is changing. Read more.
Home

Windows Task Manager Style History Plot

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.50/5 (7 votes)

Nov 25, 2007

CPOL

1 min read

viewsIcon

35881

downloadIcon

1249

Realtime plotting using Windows Task Manager style.

Screenshot - WinTaskManagerHistoryPlotLike.png

Introduction

While working with a Process Control System, I needed to plot various output variables in real time. As Windows Task Manager History is very elegant to me, it has been my inspiration, and I added zooming capability and tooltips message to make it fancier.

Background

I want to give credits to article authors for their articles I used to accomplish this work.

Using the Code

The main class GraphWnd is derived from CWnd so that it can have a standard MFC control signature.

class GraphWnd : public CWnd

You have to plan ahead how many parameters you want to plot and choose their colors on the plots by adding different colors from a predefined enum into a vector while being passed to a GraphWnd class construction.

enum eColor     {
         SOLID_RED,
         LIGHT_RED,
         SOLID_YELLOW,
         LIGHT_YELLOW,
         SOLID_GREEN,
         LIGHT_GREEN,
         SOLID_BLUE,
         LIGHT_BLUE,
         SOLID_BLACK,
         LIGHT_BLACK,
         SOLID_MAGENTA,
         LIGHT_MAGENTA,
         SOLID_CYAN,
         LIGHT_CYAN,
         SOLID_WHITE};

...

GraphWnd(CRect rect,          //Plotting Control location

         CWnd* parent,        //parent control

         vector<ecolor> color)//color and number of parameters to be plotted

The parameters plotting is done through the UpdateGraphe method.

void UpdateGraphe(GraphData<double> data,
        double timeUnit, //the grid width in pixel on X axis

        double valueUnit,//the grid height in pixel on Y axis

        double minValue, //the minimum value expected on Y axis

        double maxValue, //the maximum value expected on Y axis

        string message)  //the tooltip message
  • The structure GraphData<t> data is used to handle the display of as many as parameters you wish.
  •         template<T> struct GraphData
            { 
                std::vector<T> d;
            }; 

    The plot axis are time axes as X axis and values axis as Y axis.

  • double timeUnit is the grid width in pixel on the X axis.
  • double valueUnit is the grid height in pixel on the Y axis.
  • double minValue is the minimum value expected on the Y axis.
  • double maxValue is the maximum value expected on the Y axis.
  • string message is a tooltip message.

That's all, folks. Please vote after using my article.

History

  • 25-11-2007
    • Original article.