www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]C++ GUI 繪圖控件目錄MFCVS2010 使用TeeChart繪圖控件 - 之一 - 控件和類的導(dǎo)入VS2010 使用TeeChart繪圖控件 - 之二 - 繪制圖形(折線圖,柱狀圖)TeeCh



C++ GUI 繪圖控件目錄

MFC


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


Qt


qt超強(qiáng)精美繪圖控件 - QCustomPlot一覽qt超強(qiáng)繪圖控件qwt - 安裝及配置


1.前期準(zhǔn)備


?具體可見(jiàn)VS2010 使用TeeChart繪圖控件 - 之一?控件和類的導(dǎo)入


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

添加TeeChart控件,右擊控件,選擇添加變量,vs會(huì)自動(dòng)給我們引入CTchart1這個(gè)類,但是只有這個(gè)類,我們是遠(yuǎn)遠(yuǎn)不夠的,需要添加teechart其他相關(guān)的類,添加方法在之前已經(jīng)講過(guò),不再重復(fù)。




1.2. 引入必要的頭文件 其實(shí)之前的方法比較麻煩,更簡(jiǎn)單就是通過(guò)類向?qū)?,?dǎo)入類型庫(kù)的類


如圖進(jìn)入類向?qū)?,選擇添加類按鈕的下拉菜單,選擇類型庫(kù)中的MFC類




選擇teechart5即可




引入

#include?"CSeries.h"?
#include?"CAxis.h"
#include?"CAxes.h"
#include?"CLegend.h"


需要還可以繼續(xù)在之后引入



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


2. teechart 畫(huà)圖 - 折線圖


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




2.1 清除圖形 在畫(huà)線之前把圖形清除一下,否則會(huì)覆蓋,清除可用CSeries的函數(shù)Clear();
但是當(dāng)添加多個(gè)Series后要對(duì)所有Series都clear,這是很蛋疼的,因?yàn)槟阌袝r(shí)都不知道有多少個(gè)Series,這樣可以先獲得Series的總數(shù)在clear

代碼如下


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



通過(guò)CTchart 的get_SeriesCount函數(shù)獲得所有圖像序列,再全部清除,這個(gè)函數(shù)經(jīng)常用到,可用定義為類成員函數(shù),這里是個(gè)對(duì)話框CTChartDlg



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


好了現(xiàn)在開(kāi)始說(shuō)說(shuō)怎么畫(huà)折線圖




2.2 普通連線圖


一般我們畫(huà)的圖都屬于這種,就是把點(diǎn)連接起來(lái),選擇fast line 的 Normal,就是普通連線圖


在需要畫(huà)圖的地方先要獲得曲線序列Series,然后通過(guò)畫(huà)圖函數(shù)AddXY,或者AddArray作圖。



2.2.1 普通線圖 - AddXY 下面演示AddXY的方法


AddXY就是一個(gè)一個(gè)加入點(diǎn),在點(diǎn)數(shù)不多,且需要?jiǎng)討B(tài)顯示的時(shí)候是不錯(cuò)的選擇。點(diǎn)數(shù)多的情況下嘛,那就還是用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是自己寫(xiě)的函數(shù))就不用了
????for(int?i=0;i<nDATALENGTH;i++)
????{
????????lineSeries.AddXY((double)i,dData[i],NULL,0);
????}


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


然后再調(diào)用這個(gè)序列來(lái)作圖,作圖前先清空?qǐng)D像,用ClearAllSeries()也可以

然后就是一個(gè)點(diǎn)一個(gè)點(diǎn)的往里加了

做出來(lái)的效果:




AddXY的第一個(gè)參數(shù)是x點(diǎn)坐標(biāo),第二個(gè)是y點(diǎn)坐標(biāo),第三個(gè)參數(shù)是為了使x坐標(biāo)特殊顯示,這是會(huì)替換掉x坐標(biāo)的顯示內(nèi)容,如我想顯示“點(diǎn)xx“可以這樣



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



?




第四個(gè)參數(shù)在線圖里不起作用,在柱狀圖里可以設(shè)置顏色



2.2.2 普通線圖 - AddArray ? 在數(shù)據(jù)量特別大時(shí),強(qiáng)烈建議使用AddArray函數(shù) AddArray的函數(shù)聲明如下 void AddArray(long ArraySize, VARIANT& YArray, VARIANT& XArray); x,y是兩個(gè)VARIANT的數(shù)據(jù)類型,VARIANT有個(gè)類型是VT_ARRAY 可以給VARIANT賦一個(gè)數(shù)組進(jìn)去 具體操作如下: 方法1:

constUINT?nDATALENGTH=100;?
double?dData[nDATALENGTH];

for?(int?i=0;i<nDATALENGTH;i++)
{
?????dData[i]?=100*sin((float)i)*cos((float)4*i);
}
//聲明如下數(shù)據(jù):
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;//設(shè)置為double型數(shù)組,VT_R8就是指double
vAX.parray=psax;//把內(nèi)容加入VARIANT中
vAY.vt=VT_ARRAY|VT_R8;
vAY.parray=psay;
//這時(shí)VARIANT?就可以加入數(shù)據(jù)了
double?dtemp;//用來(lái)臨時(shí)存放x坐標(biāo)?
for(long?i=0;i<nDATALENGTH;i++)
{
????dtemp?=?i;
????SafeArrayPutElement(psax,&i,&dtemp);
????dtemp?=?dData[i];
????SafeArrayPutElement(psay,&i,&dtemp);
????//更簡(jiǎn)單寫(xiě)法
????//SafeArrayPutElement(psay,&i,dData+i);
}
//開(kāi)始畫(huà)圖
CSeries?lineSeries?=?(CSeries)m_TeeChart.Series(0);?
lineSeries.Clear();
lineSeries.AddArray(nDATALENGTH,vAY,vAX);


? 方法2: 這時(shí)我看TeeChart官方實(shí)例找到的方法,相對(duì)簡(jiǎn)單點(diǎn)

COleSafeArray?XValues;????
COleSafeArray?YValues;????
DWORD?numElements[]?=?{nDATALENGTH};????
//?創(chuàng)建安全數(shù)組???
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 如果不想要右邊那一欄數(shù)據(jù)顯示,可以通過(guò)代碼去除 CLegend是用來(lái)控制這個(gè)顯示的 ?

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


? 可以用一個(gè)check控件控制器顯示狀態(tài)


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


單擊響應(yīng)

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);
????}
}


效果:





不用代碼的話可以通過(guò)設(shè)置控件屬性





明顯,這沒(méi)有代碼靈活 ? 2.4 改變線圖顏色 ? 默認(rèn)設(shè)置是紅,我要設(shè)置成其他顏色可以用put_Colour ? 如上代碼的lineSeries最后加一個(gè),就會(huì)變成RGB(255,0,255)的顏色了

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


效果:




3. teechart 畫(huà)圖 - ?柱狀圖 ?
3.1 ?添加柱狀圖




這時(shí)會(huì)多一個(gè)圖形




注意這里默認(rèn)是綠色的,等下會(huì)發(fā)現(xiàn)畫(huà)出來(lái)的不一樣



3.2 AddXY ? 方法和線圖沒(méi)什么區(qū)別,直接上碼: ?

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)了




效果還是很不錯(cuò)的 ? 加個(gè)abs,好看很多~~





3.3 改變柱狀圖的顏色 ? 為啥是黑色的?設(shè)置了綠色的,我一開(kāi)始也以為坑爹的設(shè)置沒(méi)有用,后來(lái)研究了一下發(fā)現(xiàn)時(shí)AddXY的第四個(gè)參數(shù)起作用的 ? 上面的圖是這樣加的:

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


第四個(gè)參數(shù)0就相當(dāng)于RGB(0,0,0),這第四個(gè)參數(shù)就是設(shè)置顏色的了 ? 把程序稍作修改

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));
}





很漂亮的效果~



3.4 去除/顯示 數(shù)據(jù)標(biāo)示 ? 好吧又遇到問(wèn)題了,去掉上面的標(biāo)示 ok,那個(gè)標(biāo)示是用CMarks管理的,加入這個(gè)類就行了,用類向?qū)?,加入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 給柱狀圖添加數(shù)據(jù) 和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};????
????//?創(chuàng)建安全數(shù)組???
????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);



? 這時(shí)出現(xiàn)的圖像就是默認(rèn)的顏色了





想改顏色!沒(méi)問(wèn)題,還是用put_Color ?

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








C++ GUI 繪圖控件目錄

MFC


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


Qt


qt超強(qiáng)精美繪圖控件 - QCustomPlot一覽qt超強(qiáng)繪圖控件qwt - 安裝及配置


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉