Visual C++ 7.1Visual Studio .NET 2003Windows 2003Windows 2000Visual C++ 6.0Windows XPMFC中级开发Visual StudioWindowsC++
条形图控件
一个有用的条形图控件,派生自 CStatic。
引言
这是一个简单的条形图控件类,派生自 CStatic
。它支持显示实时数据,使用任意数量的不同颜色的条形,使用刻度,以厘米和英寸为单位等等。代码使用优化的绘制,没有闪烁。我们可以更改背景颜色、文本颜色、条形颜色等,更改刻度,以及更改显示区域。
使用代码
- 将文件 GraphCtrl.h 和 GraphCtrl.cpp 复制到您的项目目录,并添加到您的项目中。
- 在您需要使用此类的文件中包含 GraphCtrl.h。
- 将
CStatic
的定义更改为CGraphCtrl
。 - 使用下面描述的函数。
方法
void SetUnit(CString pUnit);
- 设置要显示在 Y 轴附近的单位类型字符串。void SetScale(int);
- 设置 Y 轴上一个单位的值。int GetScale();
- 返回当前的刻度值。int AddBar(int iVal, COLORREF bClr, const char* sLabel);
- 在右端添加一个新条形。bClr
是条形颜色,sLabel
是要在条形下显示的字符串。int InsertBar(int index,int iVal, COLORREF bClr, const char* sLabel);
- 在一个位置插入一个新条形。int DeleteBar(int index);
- 删除一个条形。void SetBarValue(int index, int iVal, BOOL bDraw=TRUE);
- 设置一个条形的值。void SetBarColor(int, COLORREF, BOOL bDraw=TRUE);
- 设置一个条形的颜色。int GetBarValue(int iIndex);
- 返回一个位置处条形的值。COLORREF GetBarColor(int iIndex);
- 返回一个位置处条形的颜色值。void SetBGColor(COLORREF clr);
- 设置图表的背景颜色。COLORREF GetBGColor();
- 返回图表的背景颜色。void SetAxisColor(COLORREF);
- 设置图表中坐标轴线的颜色。COLORREF GetAxisColor();
- 返回坐标轴颜色。void SetTextColor(COLORREF);
- 设置文本颜色。COLORREF GetTextColor();
- 返回文本颜色。int GetNumberOfBars();
- 返回条形的数量。int DrawGraph(void);
- 绘制图表。int SetDisplayRange(int iRangeStart, int iRangeEnd);
- 设置 Y 轴的显示范围。void GetDisplayRange(int& iRangeStart, int& iRangeEnd);
- 获取 Y 轴的显示范围。
使用示例
m_Graph.SetUnit("centi-meters"); //Sets Unit Text
m_Graph.SetScale(10); // Scale value per 1 unit
m_Graph.GetDisplayRange(0, 100); //Display from 0 to 100
for(UINT i=0;i<10;i++)
{
char tmp[16];
sprintf(tmp, "bar%d", i);
m_Graph.AddBar(rand()%100, RGB(rand()%256, rand()%256, rand()%256), tmp);
//Sets Random values
sprintf(tmp, "%d", i);
m_BarCombo.AddString(tmp);
}
m_Graph.SetBGColor(RGB(0,0,0));
m_Graph.SetAxisColor(RGB(255,255,255));
m_Graph.SetTextColor(RGB(0,0,255));