内容
*介绍
*开发背景
*代码的应用
>创建柱形图
>标题文本和背景色
>添加柱形图
>网格,标签和提示工具
>缩放功能
>删除柱形图
>打印
>连接数据库
介绍
CBarChart 是一个来自CWnd派生的MFC控件的简单实例,它可以帮助你很快速很简单得到你想要的矩形图表.
开发背景
几天前,我需要去添加一个图表项目,当我完成时,我感觉我自己做的不是太烂,所以我决定在这里和我的同事朋友们,分享一下这些代码.
我没有太多时间在这个控件上,所以我尽可能怎么简单怎么来.下面是我做这个图表的目标:
开发不超过两三天.
图表必须有吸引力,必须准确,用户不太熟悉电脑或程序也可以很方便操作.
它必须简单易懂,不是处理大数据,而是为了方便新用户.
它应该可以打印.
它应该可以重用.
以上面为目的开始写程序的,如果你有什么意见,有什么错误,或者你有什么优化代码,请帮我指出.
代码的应用
>创建柱形图
首先我们要创建柱形图:
1. 添加 BarChart.cpp 和 BarChar.h 到你的工程里
2. 添加#include “BarChart.h”到你想创建柱形图表类的头文件中
3. 添加CBarChart类型的成员变量m_chart.
4. 在你的CPP文件中使用Create方法来创建柱形图表
复制代码
如果创建成功返回TRUE.
>标题文本和背景色
你可以使用SetTitle和SetBKColor去添加和改变背景色
复制代码
>添加柱形图
最终,去添加柱形图,使用:AddBar函数如下:
复制代码
>网格,标签和提示工具
你可以决定是否可以看到网格,标签和设定的值
复制代码
还要注意ShowBarText使用时位置,0表示显示在柱形的顶部,1表示关于其他值的百分比
你也可以使网格改变成默认.在默认的情况下网格填充图背景且垂直和水平线交错,改变这种网络可以使用SetGridLine函数.
复制代码
>缩放功能
柱形图主要使用的是StretchBlt,图形的质量不够好,因为时间问题,没有绘制图表到屏幕上
复制代码
>删除柱形图
你可以使用RemoveAt和RemoveAll来删除一个或者全部
复制代码
>打印
使用打印的功能打印图表
因为我不态熟悉打印功能的实现,如果你有时间可以帮助查看打印的代码,如有错误,还望修正.
复制代码
>连接数据库
有三步连接到ODBC数据库的
首先使用ReadFromDatabase连接ODBC数据库
复制代码
第二是用于连接到一个表
复制代码
最后是调用这函数的例子
复制代码
*介绍
*开发背景
*代码的应用
>创建柱形图
>标题文本和背景色
>添加柱形图
>网格,标签和提示工具
>缩放功能
>删除柱形图
>打印
>连接数据库
介绍
CBarChart 是一个来自CWnd派生的MFC控件的简单实例,它可以帮助你很快速很简单得到你想要的矩形图表.
开发背景
几天前,我需要去添加一个图表项目,当我完成时,我感觉我自己做的不是太烂,所以我决定在这里和我的同事朋友们,分享一下这些代码.
我没有太多时间在这个控件上,所以我尽可能怎么简单怎么来.下面是我做这个图表的目标:
开发不超过两三天.
图表必须有吸引力,必须准确,用户不太熟悉电脑或程序也可以很方便操作.
它必须简单易懂,不是处理大数据,而是为了方便新用户.
它应该可以打印.
它应该可以重用.
以上面为目的开始写程序的,如果你有什么意见,有什么错误,或者你有什么优化代码,请帮我指出.
代码的应用
>创建柱形图
首先我们要创建柱形图:
1. 添加 BarChart.cpp 和 BarChar.h 到你的工程里
2. 添加#include “BarChart.h”到你想创建柱形图表类的头文件中
3. 添加CBarChart类型的成员变量m_chart.
4. 在你的CPP文件中使用Create方法来创建柱形图表
- // 创建柱形图表
- if (!m_chart.Create(
- rcBound, // 创建边界区域
- this, // 父窗口的指针
- 0 )) // 控件ID
- {
- // 如果错误在这里处理
- }
如果创建成功返回TRUE.
>标题文本和背景色
你可以使用SetTitle和SetBKColor去添加和改变背景色
- m_chart.SetTitle("A test chart, displaying some dummy data...");
- m_chart.SetBKColor(RGB(255, 255, 240));
>添加柱形图
最终,去添加柱形图,使用:AddBar函数如下:
- m_chart.AddBar(
- 1600.356, // 设置柱形图的值
- "Jan", // 设置柱形图的标签
- RGB(255,255,0)); // 设置柱形图的颜色
>网格,标签和提示工具
你可以决定是否可以看到网格,标签和设定的值
- m_chart.ShowGrid(m_bShowGrid, TRUE); // 显示或隐藏风格
- m_chart.ShowBarText(1, m_bShowText, TRUE); // 显示或隐藏 值(顶部)
- m_chart.ShowLabel(m_bShowLabel, TRUE); // 显示或隐藏 标签(底部)
- m_chart.ShowTooltip(m_bShowTip); // 激活或不激活 提示工具
还要注意ShowBarText使用时位置,0表示显示在柱形的顶部,1表示关于其他值的百分比
你也可以使网格改变成默认.在默认的情况下网格填充图背景且垂直和水平线交错,改变这种网络可以使用SetGridLine函数.
- SetGridLines(
- int nHorLineCount, // 水平线的数量 0 = 默认
- int nVerLineCount, // 垂直线的数量, 0 = 默认
- BOOL bFixedSize, // 如果这个值为TRUE前面两参数失效
- int nFixedSize) // 定义2线之间的距离
>缩放功能
柱形图主要使用的是StretchBlt,图形的质量不够好,因为时间问题,没有绘制图表到屏幕上
- m_chart.SetAutoScale(m_bScale); // 设置图表自动缩放
- // 重新定义窗口到适合大小
- m_chart.SetWindowPos( 0, 0, 0,
- rcClient.Width(),
- rcClient.Height() , SWP_NOMOVE);
- m_chart.Refresh(); // 重绘
- // You might also need to override OnSize of the
- // Parent to position the chart, so it is always at the size you like
>删除柱形图
你可以使用RemoveAt和RemoveAll来删除一个或者全部
- m_chart.RemoveAt(nRemIndex); // 删除一个
- m_chart.RemoveAll(); // 删除全部
- 保存成Bitmap文件
- 使用SaveToFile保存位图文件,接受一个参数,默认为空.如果为空,就会提示输入文件路径对话框.如果返回False,说明保存失败.使用GetLastErrorMessage来获得失败原因
- // 保存
- if (!m_chart.SaveToFile())
- {
- AfxMessageBox(m_chart.GetLastErrorMessage());
- };
>打印
使用打印的功能打印图表
因为我不态熟悉打印功能的实现,如果你有时间可以帮助查看打印的代码,如有错误,还望修正.
- m_chart.Print(); // 打印整个柱形图表页
>连接数据库
有三步连接到ODBC数据库的
首先使用ReadFromDatabase连接ODBC数据库
- // Use this form to call a stored procedure or a query and use
- // result set as chart input
- ReadFromDatabase("DS Name", "Stored proc/Query Name", "List of all parameters",
- "Bars Color", "UserName", "Password"));
- // Note that the query or stored procedure MUST have at least 2 columns,
- // First column MUST be of type char with maximum length of 50 and
- // Second a double. These columns will be used as input data for the chart.
第二是用于连接到一个表
- m_chart.ReadFromDatabase("DS Name", "Table name", "Filter",
- "Laabel column name", "dValue column name",
- Bars color , "username", "password");
最后是调用这函数的例子
- if (!m_chart.ReadFromDatabase("CHTst", "SpChartGetSale", "1, 12",
- RGB(0, 0, 0), "hamed", "hamed"))
- {
- AfxMessageBox(m_chart.GetLastDatabaseErrMessage());
- };
- or
- m_chart.ReadFromDatabase("CHTst", "Sales", "",
- "Month", "SaleRate",
- RGB(0, 0, 0) , "hamed", "hamed");