VC-MFC封装柱形图标控件CBarChart

内容
    *介绍
        *开发背景
        *代码的应用
                >创建柱形图
                >标题文本和背景色
                >添加柱形图
                >网格,标签和提示工具
                >缩放功能
                >删除柱形图
        >打印
                >连接数据库

介绍
CBarChart 是一个来自CWnd派生的MFC控件的简单实例,它可以帮助你很快速很简单得到你想要的矩形图表.

开发背景
几天前,我需要去添加一个图表项目,当我完成时,我感觉我自己做的不是太烂,所以我决定在这里和我的同事朋友们,分享一下这些代码.
我没有太多时间在这个控件上,所以我尽可能怎么简单怎么来.下面是我做这个图表的目标:
         开发不超过两三天.
        图表必须有吸引力,必须准确,用户不太熟悉电脑或程序也可以很方便操作.
        它必须简单易懂,不是处理大数据,而是为了方便新用户.
        它应该可以打印.
        它应该可以重用.
以上面为目的开始写程序的,如果你有什么意见,有什么错误,或者你有什么优化代码,请帮我指出.



代码的应用
        >创建柱形图
首先我们要创建柱形图:
1.        添加 BarChart.cpp 和 BarChar.h 到你的工程里
2.        添加#include “BarChart.h”到你想创建柱形图表类的头文件中
3.        添加CBarChart类型的成员变量m_chart.
4.        在你的CPP文件中使用Create方法来创建柱形图表
  1. // 创建柱形图表
  2. if (!m_chart.Create(
  3.     rcBound,              // 创建边界区域
  4.    this,                 // 父窗口的指针
  5.    0 ))                  // 控件ID
  6.     {
  7.     // 如果错误在这里处理
  8.     }
复制代码

如果创建成功返回TRUE.

>标题文本和背景色
你可以使用SetTitle和SetBKColor去添加和改变背景色
  1. m_chart.SetTitle("A test chart, displaying some dummy data...");
  2. m_chart.SetBKColor(RGB(255, 255, 240));
复制代码

>添加柱形图
最终,去添加柱形图,使用:AddBar函数如下:
  1. m_chart.AddBar(
  2. 1600.356,           // 设置柱形图的值
  3. "Jan",              // 设置柱形图的标签
  4. RGB(255,255,0));    // 设置柱形图的颜色
复制代码


>网格,标签和提示工具
你可以决定是否可以看到网格,标签和设定的值
  1. m_chart.ShowGrid(m_bShowGrid, TRUE);            // 显示或隐藏风格
  2. m_chart.ShowBarText(1, m_bShowText, TRUE);      // 显示或隐藏 值(顶部)
  3. m_chart.ShowLabel(m_bShowLabel, TRUE);          // 显示或隐藏 标签(底部)
  4. m_chart.ShowTooltip(m_bShowTip);                // 激活或不激活 提示工具
复制代码

还要注意ShowBarText使用时位置,0表示显示在柱形的顶部,1表示关于其他值的百分比
你也可以使网格改变成默认.在默认的情况下网格填充图背景且垂直和水平线交错,改变这种网络可以使用SetGridLine函数.
  1. SetGridLines(
  2. int nHorLineCount,      // 水平线的数量 0 = 默认
  3. int nVerLineCount,      // 垂直线的数量, 0 = 默认
  4. BOOL bFixedSize,        // 如果这个值为TRUE前面两参数失效
  5. int nFixedSize)         // 定义2线之间的距离
复制代码


>缩放功能
柱形图主要使用的是StretchBlt,图形的质量不够好,因为时间问题,没有绘制图表到屏幕上
  1. m_chart.SetAutoScale(m_bScale);         // 设置图表自动缩放
  2. // 重新定义窗口到适合大小
  3. m_chart.SetWindowPos( 0, 0, 0,
  4. rcClient.Width(),
  5. rcClient.Height() , SWP_NOMOVE);
  6. m_chart.Refresh();                      // 重绘

  7. // You might also need to override OnSize of the
  8. // Parent to position the chart, so it is always at the size you like
复制代码


>删除柱形图
你可以使用RemoveAt和RemoveAll来删除一个或者全部
  1. m_chart.RemoveAt(nRemIndex);    // 删除一个
  2. m_chart.RemoveAll();            // 删除全部

  3. 保存成Bitmap文件
  4.         使用SaveToFile保存位图文件,接受一个参数,默认为空.如果为空,就会提示输入文件路径对话框.如果返回False,说明保存失败.使用GetLastErrorMessage来获得失败原因
  5. // 保存
  6. if (!m_chart.SaveToFile())
  7.     {
  8.     AfxMessageBox(m_chart.GetLastErrorMessage());
  9.     };
复制代码


>打印
使用打印的功能打印图表
因为我不态熟悉打印功能的实现,如果你有时间可以帮助查看打印的代码,如有错误,还望修正.
  1. m_chart.Print();        // 打印整个柱形图表页
复制代码


>连接数据库
有三步连接到ODBC数据库的
首先使用ReadFromDatabase连接ODBC数据库
  1. // Use this form to call a stored procedure or a query and use 
  2. // result set as chart input

  3. ReadFromDatabase("DS Name", "Stored proc/Query Name", "List of all parameters",
  4.          "Bars Color", "UserName", "Password"));

  5. // Note that the query or stored procedure MUST have at least 2 columns,
  6. // First column MUST be of type char with maximum length of 50 and
  7. // Second a double. These columns will be used as input data for the chart.
复制代码



第二是用于连接到一个表
  1. m_chart.ReadFromDatabase("DS Name", "Table name", "Filter",
  2. "Laabel column name", "dValue column name",
  3. Bars color , "username", "password");
复制代码

最后是调用这函数的例子
  1. if (!m_chart.ReadFromDatabase("CHTst", "SpChartGetSale", "1, 12",
  2.                       RGB(0, 0, 0), "hamed", "hamed"))
  3.     {
  4.         AfxMessageBox(m_chart.GetLastDatabaseErrMessage());
  5.     };
  6. or
  7. m_chart.ReadFromDatabase("CHTst", "Sales", "",
  8. "Month", "SaleRate",
  9. RGB(0, 0, 0) , "hamed", "hamed");
复制代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值