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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Teechart动态设计方法

發布時間:2025/3/12 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Teechart动态设计方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以前搞Qt或者MFC,不明白為何大牛做界面時不用工具箱生成和設計控件,反而要花大量的精力用代碼動態生成。經過一段時間的編程體驗后,會發現動態生成更好控制,更好的根據開發人員的意愿在代碼修改屬性,而且不容易出一些莫名其妙的bug。但是也并不就是說工具箱可不用,工具箱自然是最簡單,最方便的使用方式,如果窗體的控件變化不大,大可以拖來拖去設置屬性。

本篇筆記將總結Teechart繪圖工具的動態創建和設計方法。介紹其中幾個常見功能的動態設計方法,希望能達到舉一反三的效果。

一、準備工作

1.新建一個MFC基于dialog的工程TeechartTest。

2.為工程添加一個類,選擇來自Typelib的MFC 類,選擇TeeChart ActiveX ControlV5,將下面左右的類全部添加進來。(本例中需要用哪個就Include哪個為了學習方便,這樣會導致工程比較大。在實際開發時需要用哪個添加哪個。)

3.在TeechartTestDlg.cpp中的初始化函數OnInitDialog里新建個函數TeechartSetup,用來寫我們的動態代碼。

4.在TeechartTestDlg.h中聲明該函數,在TeechartTestDlg.cpp中定義該函數TeechartSetup。

二、動態創建一個Tchart

1.右鍵工程添加類,與添加其他Teechart類不同,此處選擇ActiveX控件中的MFC類。


2.選擇TeeChart Pro ActiveXControl V5<1.0>,發現只有一個ITchart,將它添加進來,在工程中多了一個CTChart0類。


3.在Dlg.h中添加#include"CTChart0.h",聲明一個對象該類的對象CTChart0 m_tchart;

4.在dlg.cpp中的TeechartSetup里調用Create函數創建表格。我們可以在.h文件中在定義一個CTChart0 m_tchart1,生成兩個表格。

CRect rect;

GetClientRect(&rect);

m_tchart.Create(NULL,WS_CHILD|WS_VISIBLE,CRect(0,0,rect.Width(),rect.Height()/2),this,1000);

m_tchart1.Create(NULL,WS_CHILD|WS_VISIBLE,CRect(0,rect.Height()/2,rect.Width(),rect.Height()),this,1001);


三、表格屬性設置

1.默認是三維的,想把它改成二維的。在.h文件中添加#include"CAspect.h",在TeechartSetup函數里獲取該Aspect,設置View3D為False。

/*設置D/3D顯示*/

?????? CAspect m_aspect = m_tchart.get_Aspect(); //得到表體

?????? m_aspect.put_View3D(FALSE); //設置D關閉


2.設置表格標題內容。獲取標題需要用到Ctitles和CStrings這兩個類。自然先Include這兩個頭文件。原理是先用chart的get_header獲取一個Ctitles對象,再用其成員函數得到其CStrings,通過CStrings設置其內容。注意Add函數變量是variant類型,可以用_variant_t轉化即可。

/*設置表格標題內容*/

?????? CTitles m_title = m_tchart.get_Header(); //得到標題

?????? CStrings m_titlestring = m_title.get_Text(); //得到標題內容

?????? m_titlestring.Clear(); //先清除

?????? m_titlestring.Add(_variant_t("MyTest")); //添加新標題

3.設置標題樣式。獲取其標題Font,用到CTeeFont類。

/*設置表格標題字體樣式*/

?????? CTeeFont m_titleFont = m_title.get_Font(); //得到樣式

?????? m_titleFont.put_Bold(TRUE); //加粗

?????? m_titleFont.put_Color(RGB(0,0,255)); //顏色

?????? m_titleFont.put_Size(14); //字號


四、動態添加曲線Series

1.添加Series類頭文件#include"CSeries.h"

2.調用AddSeries添加曲線。其參數ESeriesClass是曲線類型,見sc宏定義


ESeriesClass

{

??? scLine = 0,

??? scBar = 1,

??? scHorizBar = 2,

??? scArea = 3,

??? scPoint = 4,

??? scPie = 5,

??? scFastLine = 6,

??? scShape = 7,

??? scGantt = 8,

??? scBubble = 9,

??? scArrow = 10,

??? scCandle = 11,

??? scPolar = 12,

??? scSurface = 13,

??? scVolume = 14,

??? scErrorBar = 15,

??? scBezier = 16,

??? scContour = 17,

??? scError = 18,

??? scPoint3D = 19,

??? scRadar = 20,

??? scClock = 21,

??? scWindRose = 22,

??? scBar3D = 23,

??? scImageBar = 24,

??? scDonut = 25,

??? scTriSurface = 26,

??? scBox = 27,

??? scHorizBox = 28,

??? scHistogram = 29,

??? scColorGrid = 30,

??? scBarJoin = 31,

??? scHighLow = 32,

??? scWaterfall = 33,

??? scSmith = 34,

??? scPyramid = 35,

??? scMap = 36,

??? scHorizLine = 37,

??? scFunnel = 38,

??? scCalendar = 39


3.用CSeries獲取曲線對象,調用AddXY添加數據。

/*動態添加曲線Series,并添加數據源進行顯示*/

?????? m_teechart.AddSeries(scFastLine); //SC宏定義

?????? CSeries m_series = m_teechart.Series(0);

?????? for (int i=0; i<100; i++)

?????? {

????????????? m_series.AddXY(i,rand()%50,NULL,RGB(255,0,0));

?????? }

五、舉一反三

是時候舉一反三了。

如果你是新手,你應該不知道設置某一個控件需要獲取哪些對象(句柄),怎么獲得,獲得了又該怎么設置。

一個很好的突破口就是Teechart自帶的幫助文檔,就像所有其他工具的幫助文檔一樣。打開開始菜單中的teechart tutorials.lnk,也即打開了Teechart的面紗。


那么幫助文檔怎么用呢?舉個例子:

目的:我們想設置下表格的坐標軸。

我們大概可以直到坐標軸應該累屬于表格,也就是說表格類CTChart0應該有其對應的獲取函數。模型一般都是get_hanshu。我們可以在CTChart0下找其成員函數,很快就會發現get_Axis,會點英文應該大概直到這跟獲取坐標軸對象有關。

我們可以在幫助文檔的索引中輸入Axis,雙擊ITchart,可以看到一個鮮活的示例。


可以看到Tchart的確有個Axis對象,也就是有對應的類,而要獲取縱軸,它還調用了Left。如果你有點好奇心你肯定點開了property Axis:IAxes看了。


這時,你應該明白了怎么寫代碼了。如果你還是不知道調用哪個函數。你可以在搜索中輸入Axis,點開tutorial 15看看,應該很明確了吧。


按照這個思路,整理代碼如下:

/*動態設置坐標軸*/

?????? CAxes m_Axis = m_tchart.get_Axis(); //得到坐標軸

?????? CAxis m_left = m_Axis.get_Left(); //得到縱軸

?????? CAxis m_bottom = m_Axis.get_Bottom(); //得到橫軸

?

?????? m_left.put_Automatic(FALSE); //設置不自動適應

?????? m_left.put_Minimum(0); //設置縱軸起始值

?????? m_left.put_Maximum(100); //設置縱軸結束值

?????? m_left.put_Increment(20); //設置增量

?????? m_left.put_StartPosition(20); //設置起始位置%

?????? m_left.put_EndPosition(80); //設置結束位置%

?

?????? CAxisTitle m_AxisLeftTitle = m_left.get_Title(); //得到縱軸標題

?????? m_AxisLeftTitle.put_Caption(_T("隨機數"));//設置縱軸標題

?????? CAxisTitle m_AxisBottomTitle = m_bottom.get_Title(); //得到橫軸標題

?????? m_AxisBottomTitle.put_Caption(_T("時刻")); //設置橫軸標題

?

?????? CTeeFont m_LeftTitleFont = m_AxisLeftTitle.get_Font(); //得到坐標軸樣式

?????? m_LeftTitleFont.put_Size(14);

?????? m_LeftTitleFont.put_Bold(TRUE);

?????? CTeeFont m_BottomTitleFont = m_AxisBottomTitle.get_Font(); //得到坐標軸樣式

?????? m_BottomTitleFont.put_Size(14);

?????? m_BottomTitleFont.put_Bold(TRUE);


六、還有個方法

找到安裝目錄下的.\Utilities\New VC Classes文件夾,里面是對應的C++源碼。只要把所有文件拷貝到建立的公工程下,并把這些文件添加到工程里,在應用的.h文件里添加你需要的頭文件,如#include"tchart.h"。這樣在具體設置時就可以直接用“.”了,而且成員函數比較好找。例如:

m_tchart.GetHeader().GetText().Clear();

m_tchart.GetHeader().GetText().Add(_variant_t("MyTest"));

m_tchart.GetHeader().GetFont().SetBold(TRUE);

m_tchart.GetHeader().GetFont().SetSize(20);

但是我覺得這樣顯得工程比較大。而且比如上面的getfont之后,如果須設置多項,還得重新從頭“點”一遍,執行的時候也是從新獲取一遍,覺得有點浪費資源。而且從代碼長度看也沒簡便到哪去,可能好的一點就是不用去管get到的是個啥類型的變量了。

?

總結

以上是生活随笔為你收集整理的Teechart动态设计方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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