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
  • 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
  • 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
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • You probably have several goals for your patient portal of choice. Is "community" one of them? With a bevy of vendors offering portal solutions, it can be challenging for a hospital to know where to start. Fortunately, YourCareCommunity helps ease the decision-making process. Read this white paper to learn more. "3 Ways Clinicians can Leverage a Patient Portal to Craft a Healthcare Community" is a published document owned by www.medhost.com

  • The latest release of SugarCRM's flagship product gives users new tools to build extraordinary customer relationships. Read an in-depth analysis of SugarCRM's enhanced ability to help companies execute their customer-facing initiatives from Ovum, a leading technology research firm.

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds