Using a MS Chart Control in VC

Environment: VC++, charting

The following is the description for using a MS Chart control in VC++. The diagram below will give you an idea of the chart we are going to make.



Click here for a larger image.

Firstly, insert the chart control in your project using Project->Add Reference->Microsoft Chart Control.

Next is populating the chart control. When I was working with Visual Basic, I had used data source to pass data to the chart. But in VC++, I did not get the datasource method in the initial tries. So, I passed the chart data through a COleSafeArray. Thanks to J. L. Colson for illuminating the details in his article.

Here is the code snippet for that:

//First, create a safe array

  COleSafeArray saRet;

  SAFEARRAYBOUND sab[2];

  sab[0].cElements = noOfRows;    // give this exactly the number
                                  // of rows you display in your
                                  // chart
  sab[1].cElements = 5;           // number of columns + 1
                                  // (because the first column is
                                  // where we put the row labels -
                                  // in 1.1, 2.1, 3.1, 4,1, etc.

    sab[0].lLbound = sab[1].lLbound = 1;

  // Use the chart as the backdrop of the legend.
  m_ChartControl.SetShowLegend(TRUE);

  // Create the safe array...

  saRet.Create(VT_BSTR, 2, sab);

  long index[2] = {0,0};         // a 2D graph needs a 2D array as
                                 // an index array
  BSTR bstr;
  index[0]=1;

  FILEDETAILS filedetailsstruct; // this is just a datastructure
                                 // I used, pls see attached code
  CString cstemp;

  //m_filedetails is an STL list of filedetailsstruct

  //-----------------------------------------------------
  // in this loop, we populate the safe array
  //-----------------------------------------------------
  for(i=m_filedetails.begin();i!=m_filedetails.end();i++)
  {
    filedetailsstruct =(FILEDETAILS)*i;
    index[1]=1;
    bstr = filedetailsstruct.login.AllocSysString();  // Row label
    // make sure this cannot be converted to a valid number like
    // "54" and is a valid string like "John"

      saRet.PutElement(index, bstr);

      index[1]=2;

    bstr = filedetailsstruct.n9000.AllocSysString();
           // Data for column 1
    ::SysFreeString(bstr);
    saRet.PutElement(index, bstr);

    index[1]=3;
    bstr = filedetailsstruct.n9002.AllocSysString();
           // Data for column 2
    ::SysFreeString(bstr);
    saRet.PutElement(index, bstr);

    index[1]=4;
    bstr = filedetailsstruct.n9004.AllocSysString();
           // Data for column 3
    ::SysFreeString(bstr);
    saRet.PutElement(index, bstr);

    index[1]=5;
    bstr = filedetailsstruct.nCancel.AllocSysString();
           // Data for column 4
    ::SysFreeString(bstr);
    saRet.PutElement(index, bstr);

    index[0]++;

  }

// now hand over the safe array to the chart control

m_ChartControl.SetChartData(saRet.Detach());

Our chart data will look like this:

............................

2,1  2,2  2,3  2,4  2,5

1,1  1,2  1,3  1,4  1,5

where

1,1 -Row label 1
2,1 -Row Label 2

Okay, now to label the columns:

  m_ChartControl.SetColumnLabelCount(4);
  m_ChartControl.SetColumn(1);
  m_ChartControl.SetColumnLabel("Monday") ;
  m_ChartControl.SetColumn(2);
  m_ChartControl.SetColumnLabel("Wednesday") ;
  m_ChartControl.SetColumn(3);
  m_ChartControl.SetColumnLabel("Friday") ;
  m_ChartControl.SetColumn(4);
  m_ChartControl.SetColumnLabel("Saturday") ;

Thats it, folks.


Dependencies

MFC42.DLL, MSVCRT.DLL, KERNEL32.DLL, USER32.DLL, ADVAPI32.DLL, OLEAUT32.DLL

Developed on Windows 2000 Server using VC++ ver 6.

Downloads

Download source - 113 Kb


Comments

  • add label over/above column

    Posted by marcdev on 07/26/2005 11:39am

    Is it possible to add labels with the value of each column over (or above) each column? Thanks

    • THANK

      Posted by guoshu on 07/19/2007 04:33am

      !

      Reply
    Reply
  • good

    Posted by Legacy on 01/03/2004 12:00am

    Originally posted by: nedtong

    good
    good

    Reply
  • Thank you!!

    Posted by Legacy on 12/09/2003 12:00am

    Originally posted by: Leegun

    Thank you!!Thank you!!

    Reply
  • VARIANT Data Fill

    Posted by Legacy on 10/23/2003 12:00am

    Originally posted by: Vicky Vigia

    Can we fill the chart with spreadsheet control's
    VARIANT Range.GetValue()

    Any comments!?

    Reply
  • Flickering problem

    Posted by Legacy on 09/11/2003 12:00am

    Originally posted by: Arbind Yadav

    Hi ,this MSCHART is nice,but there was one major problems.
    If ,I refresh the MSCHART ,THEN it is flickering.

    I do not know ,how to solve this problems.Plz help me regarding this.

    It is really urgent for me.

    Arbind

    Reply
  • How are going to use scroll bars in MSChart

    Posted by Legacy on 07/16/2003 12:00am

    Originally posted by: Imran Abdul Baset

    Suppose the data set goes large, how will we use scrolling to make the graph more understandable!!!
    

    Reply
  • can not open M2Crypt.h??

    Posted by Legacy on 06/09/2003 12:00am

    Originally posted by: happyisgood2002

    M2Crypt.h

    • chart

      Posted by walidz on 05/04/2005 03:32am

      Please java code  chart

      Reply
    Reply
  • This is great ..Thanks !!! .. Thanks for additional info.

    Posted by Legacy on 05/30/2003 12:00am

    Originally posted by: Mar

    Thanks... It is really a timely code for me.. I need it..


    Reply
  • hey Just what i was looking for! thanks

    Posted by Legacy on 05/30/2003 12:00am

    Originally posted by: Mark

    hey Just what i was looking for! thanks

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • On-demand Event Event Date: September 10, 2014 Modern mobile applications connect systems-of-engagement (mobile apps) with systems-of-record (traditional IT) to deliver new and innovative business value. But the lifecycle for development of mobile apps is also new and different. Emerging trends in mobile development call for faster delivery of incremental features, coupled with feedback from the users of the app "in the wild." This loop of continuous delivery and continuous feedback is how the best mobile …

  • As mobile devices have pushed their way into the enterprise, they have brought cloud apps along with them. This app explosion means account passwords are multiplying, which exposes corporate data and leads to help desk calls from frustrated users. This paper will discover how IT can improve user productivity, gain visibility and control over SaaS and mobile apps, and stop password sprawl. Download this white paper to learn: How you can leverage your existing AD to manage app access. Key capabilities to …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds