日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC绘图工具High-speed Charting Control(VS2019)

發(fā)布時(shí)間:2023/12/8 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC绘图工具High-speed Charting Control(VS2019) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MFC繪圖工具High-speed Charting Control(VS2019)

  • 前言
  • 一、High-speed Charting Control
    • 1.1 下載
    • 1.2 添加到項(xiàng)目中
  • 二、繪圖測試
    • 2.1 添加控件
    • 2.2 編寫程序
    • 2.3 測試程序
  • 三、困惑咨詢
  • 總結(jié)


前言

由于本人項(xiàng)目需要用到繪制實(shí)時(shí)柱狀圖,在網(wǎng)上看主要的博客都是介紹TeeChart。無意間發(fā)現(xiàn)了一個(gè)更適合的工具:High-speed Charting Control,簡單做一下分享


提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、High-speed Charting Control

1.1 下載

在CSDN上有人分享過資源,直接可以查到。如果萌新沒有積分的話可以在底下留言,我通過云盤的方式分享

1.2 添加到項(xiàng)目中

首先將資源中的Chart_source復(fù)制到工程文件夾中(可能不同的資源里面名字不一樣,這個(gè)文件就是該工具分裝好的頭文件和源文件)

然后在工程中:項(xiàng)目-添加現(xiàn)有項(xiàng)-Chart_source文件夾全選添加

至此,已經(jīng)完成了將資源添加進(jìn)項(xiàng)目工程中

二、繪圖測試

2.1 添加控件

High-speed Charting Control是基于Custom Control控件繪制,添加該控件后需要修改屬性,主要有兩處
(1)樣式
??將默認(rèn)的0x50010000修改為0x52010000
(2)類
??修改為ChartCtrl

2.2 編寫程序

(1)在項(xiàng)目頭文件(xxxDlg.h)中添加需要使用的庫

#include "ChartCtrl_source\ChartCtrl.h" //曲線基本設(shè)置頭文件 #include "ChartCtrl_source\ChartTitle.h" //曲線標(biāo)題設(shè)置頭文件 #include "ChartCtrl_source\ChartBarSerie.h" //柱狀圖頭文件// MyChartDlg.h: 頭文件 //

(2)在項(xiàng)目源文件(xxxDlg.cpp)中添加變量并綁定控件
??注意綁定控件要在對(duì)話框類下的DoDataExchange中,不然無法顯示

CChartCtrl m_ChartCtrl; //這里的成員變量名稱根據(jù)實(shí)際需要命名即可void CMyChartDlg::DoDataExchange(CDataExchange* pDX) {CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_CUSTOM1, m_ChartCtrl); }

(3)初始化坐標(biāo)軸以及標(biāo)題

BOOL CMyChartDlg::OnInitDialog() {CDialogEx::OnInitDialog();// 將“關(guān)于...”菜單項(xiàng)添加到系統(tǒng)菜單中。// IDM_ABOUTBOX 必須在系統(tǒng)命令范圍內(nèi)。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 設(shè)置此對(duì)話框的圖標(biāo)。 當(dāng)應(yīng)用程序主窗口不是對(duì)話框時(shí),框架將自動(dòng)// 執(zhí)行此操作SetIcon(m_hIcon, TRUE); // 設(shè)置大圖標(biāo)SetIcon(m_hIcon, FALSE); // 設(shè)置小圖標(biāo)// TODO: 在此添加額外的初始化代碼// //初始化坐標(biāo)軸CChartAxis* pAxis = NULL;pAxis = m_ChartCtrl.CreateStandardAxis(CChartCtrl::BottomAxis); //底部坐標(biāo)軸//pAxis->SetAutomatic(true); //根據(jù)具體數(shù)值自動(dòng)調(diào)節(jié)坐標(biāo)軸坐標(biāo),如果要固定坐標(biāo)軸需要將其參數(shù)修改為falsepAxis->SetAutomatic(false);pAxis->SetMinMax(0, 20); //固定x軸坐標(biāo)為0-20pAxis = m_ChartCtrl.CreateStandardAxis(CChartCtrl::LeftAxis); //左邊坐標(biāo)軸pAxis->SetAutomatic(false);pAxis->SetMinMax(0, 100); //固定y軸坐標(biāo)為0-100//添加標(biāo)題TChartString str1;str1 = _T("High-speed Charting畫圖Demo");m_ChartCtrl.GetTitle()->AddString(str1);//設(shè)置顏色m_ChartCtrl.GetTitle()->SetColor(RGB(255, 255, 255)); //標(biāo)題字體白色m_ChartCtrl.GetLeftAxis()->SetTextColor(RGB(255, 255, 255)); //左坐標(biāo)軸白色m_ChartCtrl.GetBottomAxis()->SetTextColor(RGB(255, 255, 255)); //底部坐標(biāo)軸白色m_ChartCtrl.SetBorderColor(RGB(255, 255, 255)); //邊框顏色白色m_ChartCtrl.SetBackColor(RGB(85, 85, 85)); //背景顏色深灰色return TRUE; // 除非將焦點(diǎn)設(shè)置到控件,否則返回 TRUE }

(4)繪制曲線
添加Button控件來啟動(dòng)定時(shí)器,定時(shí)器到時(shí)會(huì)自動(dòng)更新繪圖,參數(shù)給隨機(jī)數(shù)
其中添加定時(shí)器的方法為:類向?qū)?消息-添加WM_TIMER

//點(diǎn)擊按鈕啟動(dòng)定時(shí)器 void CMyChartDlg::OnBnClickedTimerStart() {// TODO: 在此添加控件通知處理程序代碼SetTimer(1, 1000, NULL); //啟動(dòng)定時(shí)器1,計(jì)時(shí)1s }//定時(shí)器到時(shí)自動(dòng)執(zhí)行 void CMyChartDlg::OnTimer(UINT_PTR nIDEvent) {// TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值switch (nIDEvent){case 1: //定時(shí)器1到時(shí){srand((unsigned int)time(NULL)); //產(chǎn)生隨機(jī)數(shù)種子,包含頭文件#include<ctime>double X1Values[15], Y1Values[15];for (int i = 0; i < 15; i++){X1Values[i] = i;Y1Values[i] = rand() % 100 + 1; //y坐標(biāo)隨機(jī)產(chǎn)生1~100}CChartBarSerie* pBarSerie3; //定義柱狀圖句柄m_ChartCtrl.SetZoomEnabled(true);m_ChartCtrl.RemoveAllSeries();//先清空pBarSerie3 = m_ChartCtrl.CreateBarSerie(); //綁定繪圖變量pBarSerie3->SetSeriesOrdering(poNoOrdering);//設(shè)置為無序pBarSerie3->SetPoints(X1Values, Y1Values, 15);}break;default:break;}CDialogEx::OnTimer(nIDEvent); }

2.3 測試程序

(1)執(zhí)行時(shí)會(huì)報(bào)錯(cuò)

??這是因?yàn)閂S2019做了優(yōu)化,標(biāo)準(zhǔn)頭文件從stdafx.h變?yōu)榱藀ch.h,將High-speed Charting Control中源文件的庫文件修改過來即可
(2)運(yùn)行效果

三、困惑咨詢

該控件的簡單使用已經(jīng)分享完畢了,現(xiàn)在有一個(gè)小困惑,懇請(qǐng)各位大佬能幫忙解答一下,每次Debug啟動(dòng)項(xiàng)目的時(shí)候,會(huì)彈出一個(gè)報(bào)警

點(diǎn)擊忽略后,程序可以正常運(yùn)行,不知道如何解決該問題

總結(jié)

本例只分享了柱狀圖的繪制,其他種類的圖都可以仿照繪制,有問題可以留言交流~

總結(jié)

以上是生活随笔為你收集整理的MFC绘图工具High-speed Charting Control(VS2019)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。