女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當前位置:首頁 > > 充電吧
[導讀]C++ GUI 繪圖控件目錄MFCVS2010 使用TeeChart繪圖控件 - 之一 - 控件和類的導入VS2010 使用TeeChart繪圖控件 - 之二 - 繪制圖形(折線圖,柱狀圖)TeeCh



C++ GUI 繪圖控件目錄

MFC


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


Qt


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


1.前期準備


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


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

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




1.2. 引入必要的頭文件 其實之前的方法比較麻煩,更簡單就是通過類向?qū)?,導入類型庫的?br />


如圖進入類向?qū)Вx擇添加類按鈕的下拉菜單,選擇類型庫中的MFC類




選擇teechart5即可




引入

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


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



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


2. teechart 畫圖 - 折線圖


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




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

代碼如下


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



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



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


好了現(xiàn)在開始說說怎么畫折線圖




2.2 普通連線圖


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


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



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


AddXY就是一個一個加入點,在點數(shù)不多,且需要動態(tài)顯示的時候是不錯的選擇。點數(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是自己寫的函數(shù))就不用了
????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);


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

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

做出來的效果:




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



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



?




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



2.2.2 普通線圖 - AddArray ? 在數(shù)據(jù)量特別大時,強烈建議使用AddArray函數(shù) AddArray的函數(shù)聲明如下 void AddArray(long ArraySize, VARIANT& YArray, VARIANT& XArray); x,y是兩個VARIANT的數(shù)據(jù)類型,VARIANT有個類型是VT_ARRAY 可以給VARIANT賦一個數(shù)組進去 具體操作如下: 方法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;//設置為double型數(shù)組,VT_R8就是指double
vAX.parray=psax;//把內(nèi)容加入VARIANT中
vAY.vt=VT_ARRAY|VT_R8;
vAY.parray=psay;
//這時VARIANT?就可以加入數(shù)據(jù)了
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};????
//?創(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ù)顯示,可以通過代碼去除 CLegend是用來控制這個顯示的 ?

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


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


添加單選控件?? ,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 ?添加柱狀圖




這時會多一個圖形




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



3.2 AddXY ? 方法和線圖沒什么區(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)了




效果還是很不錯的 ? 加個abs,好看很多~~





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

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


第四個參數(shù)0就相當于RGB(0,0,0),這第四個參數(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ù)標示 ? 好吧又遇到問題了,去掉上面的標示 ok,那個標示是用CMarks管理的,加入這個類就行了,用類向?qū)В尤隒Marks #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);



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





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

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








C++ GUI 繪圖控件目錄

MFC


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


Qt


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


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

其實在 c++語言里面const修飾的才算是一個真正的常量,在 c 語言中 const 可以說是個“冒牌貨”。為什么會這樣?其實是 c++ 編譯器對 const 進行了加強,當 c++ 編譯器遇到常量聲明時,不會像 c...

關鍵字: c++ C語言 const

返回函數(shù)的引用去初始化一個新的引用這個和前面一樣,都是不會產(chǎn)生副本,但是現(xiàn)在是用返回值去初始化一個引用聲明c,也就是說這時候變成了變量temp的別名,在c的生命周期內(nèi)temp是一直有效的,這樣做完全可以。

關鍵字: c++ 返回值 引用聲明

C++是一種面向?qū)ο蟮母呒壋绦蛟O計語言,是C語言的超集。

關鍵字: c++ C語言

分析:這是Adobe 公司2007 年校園招聘的最新筆試題。這道題除了考察應聘者的C++ 基本功底外,還能考察反應能力,是一道很好的題目。 在Java 中定義了關鍵字final ,被final 修飾的

關鍵字: c++ class

泛型算法中的定制操作很多算法都會比較輸入序列中的元素,通過定制比較動作,可以控制算法按照編程者的意圖工作。本文以string排序為例進行說明,首先是缺省的排序動作:?vector v{"This","

關鍵字: c++

為什么是lambda?講了這么多天的lambda表達式,有一個很基本的問題沒有回答:為什么叫l(wèi)ambda表達式呢?首先這個lambda就是羅馬字母λ,lambda表達式即λ表達式。數(shù)學上有一個概念叫λ

關鍵字: c++

? ? ? ? 假設我們有個函數(shù)用來揭示處理程序的優(yōu)先權,另一個函數(shù)用來在某動態(tài)分配所得的Widget 上進行某些帶有優(yōu)先權的處理:int priority () ; void processWi

關鍵字: c++ effective

判斷鏈表中是否有環(huán)最經(jīng)典的方法就是快慢指針,同時也是面試官大多想要得到的答案。? ? ? ?快指針pf(f就是fast的縮寫)每次移動2個節(jié)點,慢指針ps(s為slow的縮寫)每次移動1個節(jié)點,如果快

關鍵字: c++ 鏈表 快慢指針

轉(zhuǎn)載請注明出處:http://blog.csdn.net/callon_h/article/details/52073268 引子 上一篇博客從內(nèi)核驅(qū)動到android app講述了android通過

關鍵字: c++ java

在網(wǎng)上看到一段讀寫bmp格式圖像的代碼,本文對這段代碼分成兩個函數(shù)封裝起來方便使用,一個函數(shù)是讀取bmp格式的圖像,一個是向指定文件寫入bmp格式的圖像。前提我們不需要知道這段代碼是如何讀取bmp格式

關鍵字: bmp c++
關閉