您的位置:首页 > 编程语言 > C语言/C++

MFC画图的强大工具MSChart的使用

2014-08-06 12:42 218 查看
MFC画图的强大工具MSChart的使用
图表由于其直观明了的特性,在实际应用中十分很广泛。我们常常希望数据能通过图表来显示其特性。例如在Delphi和C++Builder编程中,我们可以很方便地实现数据图表。MsChart(6.0或5.0版)是Windows系统中Visual
studio自带的一个ACTIVEX控件,它功能强大,应用广泛,具有以下特点:

·支持随机数据和随机数组,动态显示。

· 支持所有主要的图表类型。

· 支持三维显示。

下面是一个实例:

程序运行效果图



一、在工程中加入 mschart

菜单->Project->Add To Project->Components and Controls->Registered ActiveX Controls->Microsoft Chart Control, version 6.0 (OLEDB)

二、在CDemoView中加入:CMSChart m_Chart

三、创建及设置m_Chart

3.1 在 CDemoView::OnCreate 中创建CMSChart

1.
//
CDemoView::OnCreate()


2.
CRect
rc;


3.
GetClientRect(&rc);


4.
if
(!m_Chart.Create(
"mschart"
,
WS_CHILD| WS_VISIBLE, rc,
this
,
10))


5.
return
-1;


3.2 在 CDemoView::OnSize 中调整 m_Chart 的大小,使之能随窗口大小变化而变化

1.
//
CDemoView::OnSize


2.
if
(
m_Chart.GetSafeHwnd() )


3.
m_Chart.MoveWindow(
0, 0, cx, cy );


3.3 设置 m_Chart

01.
void
CDemoView::InitChart()


02.
{


03.
//
设置标题


04.
m_Chart.SetTitleText(
"mschart
示例 by thinkry@263.net"
);


05.
//
下面两句改变背景色


06.
m_Chart.GetBackdrop().GetFill().SetStyle(1);


07.
m_Chart.GetBackdrop().GetFill().GetBrush().GetFillColor().Set(255,
255, 255);


08.
//
显示图例


09.
m_Chart.SetShowLegend(TRUE);


10.
m_Chart.SetColumn(1);


11.
m_Chart.SetColumnLabel((
LPCTSTR
)
"1号机"
);


12.
m_Chart.SetColumn(2);


13.
m_Chart.SetColumnLabel((
LPCTSTR
)
"2号机"
);


14.
m_Chart.SetColumn(3);


15.
m_Chart.SetColumnLabel((
LPCTSTR
)
"3号机"
);


16.
//
栈模式


17.
//
m_Chart.SetStacking(TRUE);


18.
//
Y轴设置


19.
VARIANT
var;


20.
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetAuto(FALSE);
//
不自动标注Y轴刻度


21.
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMaximum(100);
//
Y轴最大刻度


22.
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMinimum(0);
//
Y轴最小刻度


23.
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMajorDivision(5);
//
Y轴刻度5等分


24.
m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMinorDivision(1);
//
每刻度一个刻度线


25.
m_Chart.GetPlot().GetAxis(1,var).GetAxisTitle().SetText(
"小时"
);
//
Y轴名称


26.
//
3条曲线


27.
m_Chart.SetColumnCount(3);


28.
//
线色


29.
m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().GetVtColor().Set(0,
0, 255);


30.
m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetPen().GetVtColor().Set(255,
0, 0);


31.
m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetPen().GetVtColor().Set(0,
255, 0);


32.
//
线宽(对点线图有效)


33.
m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().SetWidth(50);


34.
m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetPen().SetWidth(100);


35.
m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetPen().SetWidth(2);


36.
//
数据点类型显示数据值的模式(对柱柱状图和点线图有效)


37.
//
0: 不显示 1: 显示在柱状图外


38.
//
2: 显示在柱状图内上方 3: 显示在柱状图内中间 4: 显示在柱状图内下方


39.
m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1);


40.
m_Chart.GetPlot().GetSeriesCollection().GetItem(2).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1);


41.
m_Chart.GetPlot().GetSeriesCollection().GetItem(3).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1);


42.
}


3.4 设置数据

01.
void
CDemoView::DrawChart()


02.
{


03.
int
nRowCount
= 6;


04.
m_Chart.SetRowCount(nRowCount);


05.
VARIANT
var;


06.


07.
//
不自动标注X轴刻度


08.
m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetAuto(FALSE);


09.


10.
//
每刻度一个标注


11.
m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerLabel(1);


12.


13.
//
每刻度一个刻度线


14.
m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerTick(1);


15.


16.
//
X轴名称


17.
m_Chart.GetPlot().GetAxis(0,var).GetAxisTitle().SetText(
"日期"
);


18.
char
buf[32];


19.
srand
(
(unsigned)
time
(
NULL ) );


20.
for
(
int
row
= 1; row <= nRowCount; ++row)


21.
{


22.
m_Chart.SetRow(row);


23.
sprintf
(buf,
"%d号"
,
row);


24.
m_Chart.SetRowLabel((
LPCTSTR
)buf);


25.
m_Chart.GetDataGrid().SetData(row,
1,
rand
()
* 100 / RAND_MAX, 0);


26.
m_Chart.GetDataGrid().SetData(row,
2,
rand
()
* 100 / RAND_MAX, 0);


27.
m_Chart.GetDataGrid().SetData(row,
3,
rand
()
* 100 / RAND_MAX, 0);


28.
}


29.
m_Chart.Refresh();


30.
}


3.5 改变显示类型

view
source

print?

01.
//
折线图


02.
void
CDemoView::OnChartLine()


03.
{


04.
m_Chart.SetChartType(3);


05.
DrawChart();


06.
}


07.


08.
//
柱状图


09.
void
CDemoView::OnChartCombi()


10.
{


11.
m_Chart.SetChartType(1);


12.
DrawChart();


13.
}


14.
//
饼状图


15.
void
CDemoView::OnChartPie()


16.
{


17.
m_Chart.SetChartType(14);


18.
DrawChart();


19.
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  VC++ mfc MSChart
相关文章推荐