mschart安装使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mschart安装使用
最近需要为程序显示一些柱状图、线图之类的,查了一下微软的mschart不错,功能强大。可是自vc6.0之后mschart控件就从ms的IDE里去掉了,如果用只能自己下载安装。安装mschart需要
1 .net framewrok 3.5 sp1(注意是sp1),没有安装的话就去下载吧,完整包大概200多M
2 安装MSChart.exe MSChart_VisualStudioAddOn.exe 下载mschrt20.ocx 到C:\WINDOWS\system32目录下。命令行运行regsvr32 mschrt20.ocx注册控件
3 在vs2005之后的平台上,你要么在class view下add class->MFC Class f rom ActiveX Control然后有两个,你可以选择registy然后选择ms mschart 6.0(o led),这样只能出现一个类CMSCHART,或者选择File然后浏览mschrt20.ocx,这里面生成了很多类,你全部添加进去,最后就可以用了。
第二、你可以在一个MFC dialog上insert axtivex control或者toolbox选择choose item->com选择组件让它出现在工具箱中,这样也可以有控件。
我们自己选择生成的很多类,跟网上有示例的类函数名称上有所不同,可能会给使用带来麻烦。其实最简单的就是找到一个Demo把里面相关的CMSCHART和其它相关的十几个类都拷贝到我的工程文件夹里,再添加进来,就ok了。
网上很多例子可供参考,比如:/document/viewdoc/?id=9 59
关于遇到的一些问题。在设置图形类型的时候,m_chart.SetChartType(1|2);显示出2D曲线图,而我们用m_chart.SetChartType(16);的时候如果你只设置了m_chart. SetColumnCount(1); 就不会显示,因为16的散列图需要的是一对坐标点,你至少需要设置m_chart.SetColumnCount(2);为2。
MsChart实现无闪烁动态曲线(MFC)
最近需要用MFC做一个界面动态显示曲线,自己画坐标轴画曲线太费时间,网上也有很多已实现的动态曲线接口,但是也不太灵活。正好微软有个现成的MS Chart,功能比较全面,查了一些资料,总算实现了无闪烁的动态曲线。关于MSCh art的安装可以参考上篇文章/wy-wangyan/archive/2011/0 5/06/2038981.html
实现的效果截图:
实现的原理:MSChart如果要实现动态的曲线就只能在设置的定时器中根据R owCount,到一定的列数后在最后一列插入新一列(m_Chart.GetDataGrid().InsertR ows),将最早出现的那一列删除(m_Chart.GetDataGrid().DeleteRows)。对于无闪烁刷新的实现类似于一般MFC画图中创建双缓冲画图避免屏幕闪烁的方法,这里是用CStatic动态创建一个Picture Control图像控件,将它设定和要画的MSChart 一样大,然后把mschart的内容利用m_Chart.EditCopy()复制到剪贴板,然后再在picture control中显示出来。
下面是全部的实现的代码:
MSChart需要在view的oncreate中创建出mschart:
1int CRTDBView::OnCreate(LPCREATESTRUCT lpCreateStruct)
2{
3if(CView::OnCreate(lpCreateStruct) == -1)
4return-1;
5
6// TODO: Add your specialized creation code here
7CRect rc;
8GetClientRect(&rc);
9VERIFY(m_Picture.Create(_T(""),SS_BITMAP|WS_CHILD|WS_EX_TRANSPARE NT| WS_VISIBLE,CRect(0,0,1200,600),this,IDC_PICTURE));
10if(!m_Chart.Create(_T("RTDB"),WS_CHILD| WS_VISIBLE, CRect(0,0,1200,600), this, 10))
11return-1;
12
13
14return0;
15}
在ONSIZE中设置mschart的位置:
1void CRTDBView::OnSize(UINT nType, int cx, int cy)
2{
3CView::OnSize(nType, cx, cy);
4
5// TODO: Add your message handler code here
6if( m_Chart.GetSafeHwnd())
7m_Chart.MoveWindow( 0, 0, cx, cy );
8}
下面是主要实现部分的代码了,InitChart函数实现了mschart的背景、标题、XY 坐标刻度以及颜色字体大小、曲线设定颜色以及数据点的显示等。主要是chart的初始化。
1void CRTDBView::InitChart(void)
2{
3// 设置标题
4m_Chart.SetTitleText(_T("RTDB"));
5
6// 设置标题颜色
7m_Chart.GetTitle().GetVtFont().GetVtColor().Set(0,255,0);
8
9// 改变字体大小
10m_Chart.GetTitle().GetVtFont().SetSize(14);
11
12// 改变背景色
13m_Chart.GetBackdrop().GetFill().SetStyle(1);
14m_Chart.GetBackdrop().GetFill().GetBrush().GetFillColor().Set(0,0,0);