最近看fusioncharts在web上做统计报表做的相当炫,就想怎么在C++里使用,最初是打算直接用flex编写flash然后C++调用flash来实现,后来发现比较麻烦,于是打算用html来展示,把html嵌入到MFc窗体里。这是具体的思路。
实现方法是:
1.编写html
将fusioncharts下的chart文件夹复制出来,然后编写html,如下
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>this is my First Charts</title>
<script language="JavaScript" src="FusionCharts/JS/FusionCharts.js"></script>
<script type="text/javascript">
function showFusionCharts(){
var myChart = new FusionCharts("FusionCharts/Charts/Pie3D.swf", "myChartId", "500", "300");
myChart.setDataURL("Data.xml");
myChart.render("chartdiv");
}
</script>
</head>
<body οnlοad="showFusionCharts();">
<div id="chartdiv"></div>
</body>
</html>
中间用到了一个js文件,是必须的js文件
2.新建一个MFC对话框项目,在MFC对话框里添加一个控件webbrowser,具体的方法如下。http://wenku.baidu.com/view/ee24298fe53a580216fcfe4d.html
然后用这个控件读取本地的html显示
//取路径
TCHAR buf[MAX_PATH+1]={0};
// GetModuleFileName(NULL,buf,MAX_PATH);
GetCurrentDirectory(MAX_PATH,buf);
(_tcsrchr(buf, _T('\\')))[1] = 0;
//转换为双斜框,'\'为转义符,把它忽略
CString Path_name;
for(int n=0;buf[n];n++)
{
if(buf[n]!=_T('\\'))
{
Path_name+=buf[n];
}else
{
Path_name +=_T("/");
}
}
Path_name +=_T("Debug/count.html");
AfxMessageBox(Path_name);
CComBSTR t(Path_name);
VARIANT vt;
vt.vt =VT_BSTR;
vt.bstrVal =t.Copy();
web.Navigate2(&vt,NULL,NULL,NULL,NULL);
3,数据来源
数据主要是从数据库读取然后写入xml里