Click here to Skip to main content
Click here to Skip to main content

A 2D Graph Component With Zoom Capability

, 21 Dec 2004 CPOL
Rate this:
Please Sign up or sign in to vote.
A 2D graph component with zoom capability.

Sample Image - SmartGraph2.png

Update (2004-December-21):

  1. In SmartGraph, there was a problem in labeling X and Y axes, now it has been solved.
  2. Selection problem in demo project solved.
  3. Name of output file changed to SmartGraph rather than Graph.


In my recent projects, I needed to show some data in a 2D graph. This graph must have capability of zoom in, zoom out, and colorization. At first, I wrote some code directly in my VC project and the result was satisfactory, but I had to do it for any new project and it was time consuming. So, I thought of doing it as an ATL component so that it does all the things I need. This SmartGraph is what I want.

SmartGraph is written in VC++ .NET 2003 using ATL and has several good methods, events and properties that makes it something easy to use.

This SmartGraph is an ActiveX, so it can be used in any visual language that supports ActiveX, such as Visual C++, Visual Basic, C#, Delphi, ... It can resample its data more quickly by using SetData(.,.,.,true). It also can be viewed as Regular graph, Dot graph, or Bar graph by using SetPlotType(.).

Bar Graph

How to use SmartGraph?

To use SmartGraph, you must do these steps:

  1. Register SmartGraph using this command at command prompt: "regsvr32 <PATH>\Graph.dll", or only compile "Graph.sln".

    Note: if you don’t have VC++ .NET, you can’t register Graph.dll unless you copy "msvcr71.dll" to your Windows directory. (This file is attached to this article.)

  2. In your project, press right-click on your ToolBox and then "Add/Remove Item", then select "SmartGraph" from "COM Components" tab, now it must appear in your toolbox.
  3. Now, only click on it and drag it to your dialog, now create a variable and use it:
    /*SetParentWnd : Sets Parent Window because this component 
                     is WindowLess, it needs a handle for 
                     some painting operation.*/
    m_Graph.SetPlotType(0);// Regular Graph
    m_Graph.put_Title("Graph Test");

    and when your data is ready, use:


SmartGraph Properties:

  • Back Color: use it to change background color of the graph (put_BackColor and get_BackColor).
  • BorderColor
  • ForeColor
  • Title: title of graph.
  • Columns and Rows: number of columns and rows to be drawn if grid is on (ShowGrid(true)).
  • xLable and yLable: Labels appearing in X and Y axes.
  • MarginTop, MarginLeft, MarginRight, MarginBottom: Margins for labels, title and …

SmartGraph Methods:

  • SetData and SetData2: use SetData if you don’t want to set maximum and minimum of X and Y axis. Use SetData2 if you want to specify max and min of data.
  • ShowGrid
  • UpdateGraph
  • SetPlotType: 0 - Regular, 1 - Dot Graph, 2 - Bar Graph.
  • ZoomIn, ZoomInByPercent: Zoom in (x axes) from sample/percent "FromSample"/"FromPercent" to sample/percent "ToSample"/"ToPercent".
  • ZoomOut: returns graph to previous view.
  • Reset: returns graph to original view.
  • GetDisplayedRange: returns range of samples that already are shown.
  • SetLegendText

SmartGraph Events:

  • LButtonDown
  • LButtonUp
  • MouseMove

Sample application provided is a good demonstration of this SmartGraph.

Use, enjoy and guide me for future improvements.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Hossein Khosravi
Software Developer (Senior)
Iran (Islamic Republic Of) Iran (Islamic Republic Of)
I am an assistant Prof. at Shahrood University of Technology. I'm interested in Pattern Recognition (specially OCR), Neural Networks, Image Processing and Machine Vision. I'm a PROGRAMMER as well. I was born in Khezri, a city in Khorasan, the largest province of Iran. I took My BS. from Sharif University of technology in 2002 and MSc. and PhD. from Tarbiat Modarres University in 2006 and 2010 respectively.
Currently I'm working in Shahrood university as an assistant professor in Faculty of Electrical & Robotic Engineering.
Hossein Khosravi's Blog: Andisheh Online
Commercial Site: Farsi OCR Resources

Comments and Discussions

AnswerRe: How to install and use it in Visual C++? PinmemberHossein Khosravi27-Oct-06 21:12 
GeneralRe: How to install and use it in Visual C++? PinmemberZeus 198130-Oct-06 0:59 
GeneralRe: How to install and use it in Visual C++? PinmemberHossein Khosravi30-Oct-06 17:43 
GeneralThanks! Pinmemberwarrenblackwell1-Sep-05 12:11 
AnswerRe: Thanks! PinmemberHossein Khosravi2-Sep-05 20:28 
GeneralRe: Thanks! Pinmemberman2815-Jun-06 1:16 
GeneralUsing in C# PinmemberDuongNguyen18-Apr-05 7:17 
GeneralQuery regarding using SmartGraph Pinmemberkrihtika7413-Jan-05 18:50 
QuestionHow to use it (zooming in/out) in VB? Pinmemberhyxkona@yahoo.com4-Jan-05 11:56 
AnswerRe: How to use it (zooming in/out) in VB? Pinmemberanonymous17-Jan-05 0:01 
GeneralCheers Pinmembernice_boy24730-Dec-04 5:38 
GeneralHI PinmemberMohammadAmiry22-Dec-04 2:41 
GeneralRe: HI PinsussAnonymous22-Dec-04 19:53 
GeneralHighlighter issue Pinmembersad61t6-Dec-04 0:03 
Hi, great article for a very useful control.
However I noticed that:
* If I highlight an area in SmartGraphDemo, then change the graph type, the highlight is hidden. When I highlight again, the yellow area reappears and the new highlight is in blue. So I have blue, yellow, blue, yellow, blue bands on the screen. Confused | :confused: (graph.dll is version
* Some comments in the (demo) SmartGraph.h file specifying the parameters/returns would be very useful.
* The SmartGraph.cpp/h files in the control source and the demo source have different uses. So maybe different names would avoid confusion.
Best regards
GeneralRe: Highlighter issue PinmemberHossein Khosravi13-Dec-04 19:48 
QuestionI am very happy? PinmemberZero_One_ADO5-Oct-04 23:33 
AnswerRe: I am very happy? PinmemberHossein Khosravi8-Oct-04 19:25 
AnswerRe: I am very happy? PinsussAnonymous30-Dec-04 1:51 
GeneralRe: I am very happy? PinsussNeta Zmora30-Dec-04 1:53 
GeneralProblem with smartgraph Pinmemberbollons17-Sep-04 4:06 
GeneralRe: Problem with smartgraph PinmemberHossein Khosravi18-Sep-04 17:53 
General&amp;#1583;&amp;#1605;&amp;#1578; &amp;#1711;&amp;#1585;&amp;#1605; Pinmembervazan11-Sep-04 3:10 
GeneralRe: &amp;#1583;&amp;#1605;&amp;#1578; &amp;#1711;&amp;#1585;&amp;#1605; PinmemberHossein Khosravi11-Sep-04 3:57 
Questionwhy not change it into c#? Pinmemberdxhdxh8-Sep-04 9:11 
AnswerRe: why not change it into c#? PinmemberHossein Khosravi8-Sep-04 17:46 
GeneralExcellent! PinmemberA. Riazi1-Sep-04 8:36 
GeneralHi please help... Pinmembervenkyhyd14-Jan-05 15:52 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

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

| Advertise | Privacy | Mobile
Web01 | 2.8.141015.1 | Last Updated 22 Dec 2004
Article Copyright 2004 by Hossein Khosravi
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid