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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TeeChart控件

發布時間:2023/12/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TeeChart控件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來自:https://blog.csdn.net/czyt1988/article/details/7428415


C++ GUI 繪圖控件目錄

MFC

VS2010 使用TeeChart繪圖控件 - 之一 - 控件和類的導入
VS2010 使用TeeChart繪圖控件 - 之二 - 繪制圖形(折線圖,柱狀圖)
TeeChart繪圖控件 - 之三 - 提高繪圖的效率
MFC下好用的高速繪圖控件-(Hight-Speed Charting)
繪制動態曲線
Qt

qt超強精美繪圖控件 - QCustomPlot一覽
qt超強繪圖控件qwt - 安裝及配置
QtChart Qt官方繪圖控件

vs2010的用法和vc6有很大的不同,特別是在一些函數調用那里,當然。控件導入也是很不一樣的

安裝好控件后就可以在工程里加入teechart控件了
加入方法有如下幾種:
1.添加Teechart控件
1.1 插入Teechart控件
1.1.1 插入控件

新建一個對話框工程,在對話框上點擊鼠標右鍵,彈出的菜單里選擇“插入ActiveX控件”


然后彈出的對話框里選擇TeeChart控件


這時對話框就有TeeChart控件了


1.1.2 vs2010另外一種插入控件的方法

vs2010對話框設置的工具欄上就有許多控件了,若想把我們常用的控件也加到工具欄上以后使用就很方便了,下面說的這種方法就是把控件加入工具欄里。方便以后的調用

在工具欄的空白處點擊右鍵,選擇添加選項卡

這時vs就會新建一個選項卡,自己可以定義一個名稱,這里命名為繪圖控件


為選項卡添加項:在新建的選項卡的空白處點擊右鍵,選擇“選擇項”
由于控件比較多,會耗費一定的時間打開這個選擇項,別以為死機了,耐心等個幾十秒吧


在打開的對話框中選擇選擇com標簽,選擇teechart控件

這樣teechart控件就會在你的工具欄新加的選項里了,以后都會存在(我添加TeeChat的同時還把其他的一些控件添加進去了)


1.1.3 控件屬性設置

雙擊控件進行相關設置
這里添加一個快速線圖-Fast Line

若數據量特別大,可以在Series標簽里的Format的Draw all選項去掉


在Chart標簽里還可以設置坐標軸的名稱屬性等,這里先不詳細講述屬性的設置

2.為控件添加類
?
vs2010與vc6不一樣,vs2010的控件對應的類添加相對比vc6麻煩
這里就對剛剛加入的TeeChart控件加入相關的類
?
2.1 添加TypeLib的mfc類


(1)選擇vs菜單“項目”-“添加類”(注意這時類視圖樹形控件選中最頂端的父節點)


(2)添加TypeLib的mfc類

(3)在可用的類型庫里選擇teechart5


(4)在接口里就有TeeChart對應的所有類了,這里TChart是必須的接口,其他的可以根據需要添加


(5)點擊完成就把CTChart這個類添加進工程里了

其實第(2)步可以選擇ActiveX控件的Mfc類,操作方法雷同,不過這時是只列出對應的接口

3.把TeeChart控件和對象關聯
3.1 為控件關聯對象
在控件上點擊右鍵,選擇添加變量,即可為控件關聯對象


3.2 去掉vs默認的初始化

不知為何vs會默認給添加的變量初始化0,這個初始化一定要去掉否則無法使用

public: ? ? CTchart1 m_Chart;

CTeeChartDlg::CTeeChartDlg(CWnd* pParent/*=NULL*/)?
? ? : CDialogEx(CTeeChartDlg::IDD, pParent)
{
? ? m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
?
void CTeeChartDlg::DoDataExchange(CDataExchange* pDX)?
{
? ? CDialogEx::DoDataExchange(pDX);
? ? DDX_Control(pDX, IDC_TCHART1, m_Chart);
}

?
這時TeeChart就可正常使用了
?


TeeChart5破解版下載地址:http://download.csdn.net/detail/czyt1988/4201107

vc6,vs2010皆可用


C++ GUI 繪圖控件目錄

MFC

VS2010 使用TeeChart繪圖控件 - 之一 - 控件和類的導入
VS2010 使用TeeChart繪圖控件 - 之二 - 繪制圖形(折線圖,柱狀圖)
TeeChart繪圖控件 - 之三 - 提高繪圖的效率
MFC下好用的高速繪圖控件-(Hight-Speed Charting)
繪制動態曲線
Qt

qt超強精美繪圖控件 - QCustomPlot一覽
qt超強繪圖控件qwt - 安裝及配置

?

?

?

來自:https://blog.csdn.net/wangshouchao/article/details/8837080

1.前期準備?

?具體可見VS2010 使用TeeChart繪圖控件 - 之一?控件和類的導入

?

1. 1 添加TeeChart控件,給控件添加變量m_TeeChart

?

添加TeeChart控件,右擊控件,選擇添加變量,vs會自動給我們引入CTchart1這個類,但是只有這個類,我們是遠遠不夠的,需要添加teechart其他相關的類,添加方法在之前已經講過,不再重復。

?

?

1.2. 引入必要的頭文件

其實之前的方法比較麻煩,更簡單就是通過類向導,導入類型庫的類

?

如圖進入類向導,選擇添加類按鈕的下拉菜單,選擇類型庫中的MFC類

?

?

選擇teechart5即可

?

?

?

暫時引入
#include "CSeries.h"?
#include "CAxis.h"
#include "CAxes.h"
#include "CLegend.h"

需要還可以繼續在之后引入

?

--------------------------------------------------------------------------------------------------------------------------------

?

2. teechart 畫圖 - 折線圖

?

TeeChart 畫圖步驟一般是先獲得圖線序列CSeries,再給Series添加點;添加點可以用函數AddXY,或者AddArray。AddArray要比AddXY的效率高出很多,其比較可見 TeeChart繪圖控件 - 之三 - 提高繪圖的效率

?

?

?

2.1 清除圖形

在畫線之前把圖形清除一下,否則會覆蓋,清除可用CSeries的函數Clear();
但是當添加多個Series后要對所有Series都clear,這是很蛋疼的,因為你有時都不知道有多少個Series,這樣可以先獲得Series的總數在clear
代碼如下

?

?

? ??for(long?i?=?0;i<m_TeeChart.get_SeriesCount();i++)?
????{
????????((CSeries)m_TeeChart.Series(i)).Clear();
????}

?

通過CTchart 的get_SeriesCount函數獲得所有圖像序列,再全部清除,這個函數經常用到,可用定義為類成員函數,這里是個對話框CTChartDlg

?

?

?

void?CTChartDlg::ClearAllSeries(void)?
{
????for(long?i?=?0;i<m_TeeChart.get_SeriesCount();i++)
????{
????????((CSeries)m_TeeChart.Series(i)).Clear();
????}
}

?

好了現在開始說說怎么畫折線圖

?

?

2.2 普通連線圖

一般我們畫的圖都屬于這種,就是把點連接起來,選擇fast line 的 Normal,就是普通連線圖


在需要畫圖的地方先要獲得曲線序列Series,然后通過畫圖函數AddXY,或者AddArray作圖。

?

?

2.2.1 普通線圖 - AddXY

下面演示AddXY的方法

?

AddXY就是一個一個加入點,在點數不多,且需要動態顯示的時候是不錯的選擇。點數多的情況下嘛,那就還是用AddArray了

先看看AddXY

?

?


? ??const?UINT?nDATALENGTH=?100;?
????double?dData[nDATALENGTH];
????for?(int?i=0;i<nDATALENGTH;i++)
????{
????????dData[i]?=?100 * sin((float)i)*cos((float)4*i);
????}
????//ClearAllSeries();
????CSeries lineSeries?=?(CSeries)m_TeeChart.Series(0);
????lineSeries.Clear();//在最前面加上ClearAllSeries(ClearAllSeries是自己寫的函數)就不用了
????for(int?i=0;i<nDATALENGTH;i++)
????{
????????lineSeries.AddXY((double)i,dData[i],NULL,0);
????}

?

?

由于在TeeChart里,只加了一個FastLine,所以Series(0)就算Fast Line,代碼首先獲得圖像序列m_TeeChart.Series(0);

然后再調用這個序列來作圖,作圖前先清空圖像,用ClearAllSeries()也可以

然后就是一個點一個點的往里加了

做出來的效果:

?

?

AddXY的第一個參數是x點坐標,第二個是y點坐標,第三個參數是為了使x坐標特殊顯示,這是會替換掉x坐標的顯示內容,如我想顯示“點xx“可以這樣

?

?

?

????CString?str;?
????for(int?i=0;i<nDATALENGTH;i++)
????{
????????str.Format(_T("點%d"),i);
????????lineSeries.AddXY((double)i,dData[i],str,0);
????}

?

?

?

?

第四個參數在線圖里不起作用,在柱狀圖里可以設置顏色

?

?

?

2.2.2 普通線圖 - AddArray

?

在數據量特別大時,強烈建議使用AddArray函數

AddArray的函數聲明如下

void AddArray(long ArraySize, VARIANT& YArray, VARIANT& XArray);

x,y是兩個VARIANT的數據類型,VARIANT有個類型是VT_ARRAY

可以給VARIANT賦一個數組進去

具體操作如下:

方法1:

?

const?UINT?nDATALENGTH?=?100;?
double?dData[nDATALENGTH];

for?(int?i=0;i<nDATALENGTH;i++)
{
?????dData[i]?=?100*sin((float)i)*cos((float)4*i);
}
//聲明如下數據:
VARIANT vAX,vAY;
SAFEARRAY*?psax;
SAFEARRAY*?psay;
SAFEARRAYBOUND rgsabound;
//初始化
rgsabound.cElements=nDATALENGTH;?
rgsabound.lLbound=0;
psax=SafeArrayCreate(VT_R8,1,&rgsabound);//分配空間
psay=SafeArrayCreate(VT_R8,1,&rgsabound);
vAX.vt=VT_ARRAY|VT_R8;//設置為double型數組,VT_R8就是指double
vAX.parray=psax;//把內容加入VARIANT中
vAY.vt=VT_ARRAY|VT_R8;
vAY.parray=psay;
//這時VARIANT 就可以加入數據了
double?dtemp;//用來臨時存放x坐標?
for(long?i=0;i<nDATALENGTH;i++)
{
????dtemp?=?i;
????SafeArrayPutElement(psax,&i,&dtemp);
????dtemp?=?dData[i];
????SafeArrayPutElement(psay,&i,&dtemp);
????//更簡單寫法
????//SafeArrayPutElement(psay,&i,dData+i);
}
//開始畫圖
CSeries lineSeries?=?(CSeries)m_TeeChart.Series(0);?
lineSeries.Clear();
lineSeries.AddArray(nDATALENGTH,vAY,vAX);

?

?

?

方法2:

這時我看TeeChart官方實例找到的方法,相對簡單點


????COleSafeArray XValues;????
????COleSafeArray YValues;????
????DWORD?numElements[]?=?{nDATALENGTH};????
????// 創建安全數組???
????XValues.Create(VT_R8,?1, numElements);????
????YValues.Create(VT_R8,?1, numElements);????
????// 初始化?
????long?i;????
????double?dval;
????for(i=0; i<nDATALENGTH; i++)?
????{???????
????????dval?=?i;
????????XValues.PutElement(&i,?&dval);
????????dval?=?dData[i];
????????YValues.PutElement(&i,?&dval);
????????//YValues.PutElement(&i, dData+i);
????};
????CSeries lineSeries?=?(CSeries)m_TeeChart.Series(0);
????lineSeries.Clear();
????lineSeries.AddArray(nDATALENGTH,YValues,XValues);

?

2.3 去除/顯示legend

如果不想要右邊那一欄數據顯示,可以通過代碼去除

CLegend是用來控制這個顯示的

?

CLegend legend?=?(CLegend)m_TeeChart.get_Legend();?????
legend.put_Visible(FALSE);

?

可以用一個check控件控制器顯示狀態

?

?

添加單選控件?? ,id為IDC_CHECK_ShowLegend,

?

單擊響應

?

void?CTChartDlg::OnBnClickedCheck_ShowLegend()?
{
????CLegend legend?=?(CLegend)m_TeeChart.get_Legend();
????if(BST_CHECKED?==?((CButton*)GetDlgItem(IDC_CHECK_ShowLegend))->GetCheck())
????{
????????legend.put_Visible(TRUE);
????}
????else
????{
????????legend.put_Visible(FALSE);
????}
}

?

效果:

?

?

?

?

不用代碼的話可以通過設置控件屬性

?

?

?

?

明顯,這沒有代碼靈活

?

2.4 改變線圖顏色

?

默認設置是紅,我要設置成其他顏色可以用put_Colour

?

如上代碼的lineSeries最后加一個,就會變成RGB(255,0,255)的顏色了

?

lineSeries.put_Color(RGB(255,0,255));

?

效果:

?

?

?

?

3. teechart 畫圖 - ?柱狀圖

?

3.1 ?添加柱狀圖

?

?

這時會多一個圖形

?

?

?

注意這里默認是綠色的,等下會發現畫出來的不一樣

?

?

3.2 AddXY

?

方法和線圖沒什么區別,直接上碼:

?

????const?UINT?nDATALENGTH?=?20;?
????double?dData[nDATALENGTH];

????for?(int?i=0;i<nDATALENGTH;i++)
????{
????????dData[i]?=?abs(100*sin((float)i));
????}
????//
????ClearAllSeries();
????CSeries barSeries?=?(CSeries)m_TeeChart.Series(1);
????for(int?i=0;i<nDATALENGTH;i++)
????{
?????????????barSeries.AddXY((double)i,dData[i],NULL,0);
????}

?

注意不是Series(0)了

?

?

?

?

我擦~那效果

?

加個abs,好看很多~~

?

?

?

?

3.3 改變柱狀圖的顏色

?

為啥是黑色的?設置了綠色的,我一開始也以為坑爹的設置沒有用,后來研究了一下發現時AddXY的第四個參數起作用的

?

上面的圖我們是這樣加的

barSeries.AddXY((double)i,dData[i],NULL,0);

?

第四個參數0就相當于RGB(0,0,0),這第四個參數就是設置顏色的了

?

把程序稍作修改

?

????for(int?i=0;i<nDATALENGTH;i++)?
????{
????????i%2==?0
??????????????barSeries.AddXY((double)i,dData[i],NULL,RGB(255,255,0))
????????????:?barSeries.AddXY((double)i,dData[i],NULL,RGB(0,255,255));
????}

?

?

?

?

牛x

?

?

?

3.4 去除/顯示 數據標示

?

好吧又遇到問題了,去掉上面的標示

ok,那個標示是用CMarks管理的,加入這個類就行了,用類向導,加入CMarks

#include "CMarks.h"

?

?

添加單選控件??IDC_CHECK_Marks

?

?

?

void?CTChartDlg::OnBnClickedCheckMarks()?
{
????CSeries barSeries?=?(CSeries)m_TeeChart.Series(1);
????CMarks SeriesMarks?=?(CMarks)barSeries.get_Marks();
????if(BST_CHECKED?==?((CButton*)GetDlgItem(IDC_CHECK_Marks))->GetCheck())
????{
????????SeriesMarks.put_Visible(TRUE);
????}
????else
????{
????????SeriesMarks.put_Visible(FALSE);
????}
}

?

效果:

?

?

?

?

3.5 AddArray 給柱狀圖添加數據

和line一樣

?


????const?UINT?nDATALENGTH?=?20;?
????double?dData[nDATALENGTH];

????for?(int?i=0;i<nDATALENGTH;i++)
????{
????????dData[i]?=?abs(100*sin((float)i));
????}
????COleSafeArray XValues;????
????COleSafeArray YValues;????
????DWORD?numElements[]?=?{nDATALENGTH};????
????// 創建安全數組???
????XValues.Create(VT_R8,?1, numElements);????
????YValues.Create(VT_R8,?1, numElements);????
????// 初始化?
????long?i;????
????double?dval;
????for(i=0; i<nDATALENGTH; i++)?
????{???????
????????dval?=?i;
????????XValues.PutElement(&i,?&dval);
????????dval?=?dData[i];
????????YValues.PutElement(&i,?&dval);
????????//YValues.PutElement(&i, dData+i);
????};
????//
????ClearAllSeries();
????CSeries lineSeries?=?(CSeries)m_TeeChart.Series(1);
????lineSeries.AddArray(nDATALENGTH,YValues,XValues);

?

這時出現的圖像就是默認的顏色了

?

?

?

?

想改顏色!沒問題,還是用put_Color

?

barSeries.put_Color(RGB(255,0,0));

?

?

總結

以上是生活随笔為你收集整理的TeeChart控件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。