QQ登录

只需一步,快速开始

MFC扩展编程实例3D曼哈顿叠加柱状图创建与交互操作

[ 复制链接 ]
MFC扩展编程实例3D曼哈顿叠加柱状图创建与交互操作

当前例程实现三维曼哈顿叠加柱状图的创建及交互操作功能。
与前面的例程相似,仅是在创建图表时,设置了不同的图表类型。
例程界面如下:
2020-01-14_132125.jpg
可以设置图表数据标签显示位置,图表数据系列渐变填充样式,
以及通过界面圆形控件及鼠标交互操作图表。

在阅读例程时我们要知道例程的大概结构。
下面是例程实现过程与关键代码。
首先是创建基于class CMy123View : public CBCGPFormView的单文档工程,
在视窗资源对话框中添加图片控件IDC_ROTATE,IDC_CHART用于操作图表与显示图表。

然后在视窗类中添加变量与成员函数及虚函数Create。
        CBCGPChartCtrl      m_wndChart;
        CBCGPRotationCtrl        m_wndRotate;
    void RotateChart(CBCGPRotationObject::RotationElement hit, double xDelta = 10., double yDelta = 10., double persperctiveDelta = 0.1);

其中虚函数Create代码如下,在此函数中就实现了三维曼哈顿叠加柱状图的创建。
  1. BOOL CMy123View::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
  2. {
  3.         BOOL bRst = CBCGPFormView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);;
  4.         m_wndRotate.SubclassDlgItem(IDC_ROTATE,this);
  5.         m_wndRotate.GetRotationObject()->SetAutorepeatMode(100);
  6.         m_wndRotate.GetRotationObject()->SetColorTheme(CBCGPRotationObject::BCGP_COLOR_THEME_VISUAL_MANAGER);
  7.         m_wndRotate.GetRotationObject()->EnablePart(CBCGPRotationObject::BCGP_ROTATION_CLOCKWISE, FALSE);
  8.         m_wndRotate.GetRotationObject()->EnablePart(CBCGPRotationObject::BCGP_ROTATION_COUNTER_CLOCKWISE, FALSE);
  9.         m_wndRotate.GetRotationObject()->EnableFlatIcons();
  10.         //获取图表指针;
  11.         m_wndChart.SubclassDlgItem(IDC_CHART,this);//子类化图表;
  12.         CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
  13.         pChart->SetChartTitle(_T("3D曼哈顿叠加柱状图"));//图表标题设置;
  14.         pChart->SetLegendPosition(BCGPChartLayout::LP_NONE);//不显示图例;
  15.         pChart->SetThemeOpacity(70);//图表主题透明度设置;
  16.         pChart->EnableMouseTrackingMode(BCGPChartHitInfo::HIT_DIAGRAM);
  17.         BCGPChartCategory category = BCGPChartColumn3D;//图表种类,F12查看全部;
  18.         BCGPChartType type = BCGP_CT_STACKED;//图表类型,按F12查看全部;
  19.         pChart->SetChartType(category, type);//设置图表类别;

  20.         //设置3D场景属性;
  21.         DWORD dwoFlags = CBCGPChartDiagram3D::DWO_OUTLINE_ALL;
  22.         dwoFlags |= (CBCGPChartDiagram3D::DWO_DRAW_ALL_WALLS | CBCGPChartDiagram3D::DWO_DRAW_FLOOR);
  23.         pChart->GetDiagram3D()->SetDrawWallOptions((CBCGPChartDiagram3D::DrawWallOptions)dwoFlags);
  24.         pChart->GetDiagram3D()->SetThickWallsAndFloor(true);
  25.         pChart->GetDiagram3D()->SetExplicitGrouping(CBCGPChartDiagram3D::EG_NOT_GROUPED);
  26.         //创建数据系列,添加数据并分组实现并列显示;
  27.         for (int i = 0; i < 9; i++)
  28.         {
  29.                 CBCGPChartSeries* pBarSeries = pChart->CreateSeries(_T(""));
  30.                 pBarSeries->m_bIncludeSeriesToLegend = FALSE;
  31.                 for (int j = 0; j < 3; j++)
  32.                 {
  33.                         pBarSeries->AddDataPoint(ceil(Rand(2.0, 15.0)));
  34.                         pBarSeries->SetGroupID(i / 3);
  35.                 }
  36.         }
  37.         //添加添加到布局管理器统一管理布局;
  38.         if (GetLayout() == NULL)
  39.                 return bRst;
  40.         CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
  41.         if (pLayout == NULL)
  42.                 return bRst;
  43.         pLayout->AddAnchor(m_wndChart.GetDlgCtrlID(), CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
  44.         //
  45.         return bRst;
  46. }
复制代码


最后图表创建好后,就是关联控件m_wndRotate点击函数,与鼠标点击平移函数,
实现对图表控件的交互操作。
三个函数分别为
        afx_msg void OnRotate();
        afx_msg LRESULT OnMouseTrack(WPARAM wp, LPARAM lp);
        afx_msg LRESULT OnMouseDown(WPARAM wp, LPARAM lp);

具体可以下载例程查看。
了解了例程结构后就可以针对具体函数分析学习了。
另外例程使用了布局管理器,记得在视窗类构造函数添加代码EnableLayout()。

例程使用的MFC扩展库可以网站搜索下载。
例程源代码下载地址:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:20.MFC扩展编程实例3D曼哈顿叠加柱状图创建与交互操作.rar 
文件大小:82.93 KB  售价:2金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索