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

  • Corporate e-Learning technology has a long and diverse pedigree. As far back as the 1980s, companies were adopting computer-based training to supplement traditional classroom activities. More recently, rich web-based applications have added streaming audio and video, real-time collaboration and other new tools to the e-Learning mix. At the same time, the growing availability of informal learning tools--a category that includes everything from web searches to social media posts--are having a major impact on …

  • Event Date: April 15, 2014 The ability to effectively set sales goals, assign quotas and territories, bring new people on board and quickly make adjustments to the sales force is often crucial to success--and to the field experience! But for sales operations leaders, managing the administrative processes, systems, data and various departments to get it all right can often be difficult, inefficient and manually intensive. Register for this webinar and learn how you can: Align sales goals, quotas and …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds