版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 High-speed Charti ng Con trol-MFC繪 制圖表(折線圖、餅圖、柱形圖)控件 綜述 詁于揑件是用來展示2嚼據(jù)-如下面的圖片. PiKGme ove-r 200S Wif?ir 階陽0刖Q Lipi ape Totiltfecofti1! 9090TO605040 PBW55 Min inCBirni - 3 ikt . n 1 Cardhitind. wiNi 介紹 對于我之前的一個項目, 我需要在圖表控件上顯示連續(xù)的數(shù)據(jù)流。我決定開發(fā)自己的控件, 因為我找不到任何可以提供所需靈活性的自由軟件控件。其中一個主要的限制是,控件必 須繪制大量的數(shù)據(jù),并能夠迅速顯示它(
2、在 Pocket PC上)。控件能夠通過僅繪制新的數(shù)據(jù) 點而不是完整的數(shù)據(jù)序列來做到這一點并且圖表還能夠顯示靜態(tài)數(shù)據(jù)。 這種控件是我長時間工作的結(jié)果,而且費盡周折地為了提供足夠的靈活性來供需要它的人使 用。對于使用者反饋我表示由衷的感謝:一個郵件,留言板中的一一句話或只是對本文評 級。當(dāng)我不知道是否還有人使用它時,我就沒有必要維護(hù)這個控件了。 免責(zé)聲明 這個控件是我花費很長時間的開發(fā)的結(jié)果,因此我對代碼的使用放置一些小條件: 該代碼可以以編譯的形式用于任何非商業(yè)和商業(yè)目的。代碼可以被重新開發(fā),只要它提供作 者名字和完整的免責(zé)聲明。更改源代碼需要得到作者的同意。 此代碼不提供任何安全保證。我不會
3、對使用此代碼造成的損失負(fù)責(zé)。使用它需要自己承擔(dān) 風(fēng)險。 This code may be used for any non-commercial and commercial purposes in a compiled form. The code may be redistributed as long as it rema ins unm odified and providi ng that the author n ame and the disclaimer remai n in tact. The sources can be modified with the author c
4、onsent only. This code is provided without any guara ntees. I cannot be held resp on sible for the damage or the loss of time it causes. Use it at your own risks. 鑒于開發(fā)這個控件所付出的努力,下面的要求并不過分: 如果你在在商業(yè)應(yīng)用程序中使用 這個控件,那么請給我發(fā)郵件讓我知道。 主要特點 控件的主要特點是: 高速繪圖(軸固定時) ,允許快速繪制數(shù)據(jù) 無限數(shù)量的數(shù)據(jù)序列(內(nèi)存是限制) 每個數(shù)據(jù)序列的數(shù)據(jù)量不受限制 支持線圖,點圖,平
5、面圖,柱狀圖, K 線圖 和甘特圖系列 最多四個軸(左,下,右和上軸) 標(biāo)準(zhǔn)軸,對數(shù)軸或日期 /時間軸 自動伸縮的坐標(biāo)軸 , 翻轉(zhuǎn)的坐標(biāo)軸(相互獨立) 軸標(biāo)簽 點標(biāo)簽 平滑的曲線 網(wǎng)格 圖例和標(biāo)題 交互性(在控件中發(fā)生特定事件時的通知) 支持手動縮放和鼠標(biāo)平移 支持鼠標(biāo)指針 支持軸上的滾動條 高度可定制(顏色,標(biāo)題,標(biāo)簽,邊緣,字體等) 支持 UNICODE 支持打印和保存到圖像文件 文檔結(jié)構(gòu) 本文通過一系列簡短的教程來涵蓋控件的大部分功能。 閱讀本文后,您將能夠快速地在自 己的應(yīng)用程序中使用本控件。 我決定從文章中刪除所有的類和函數(shù)的文檔, 因為它不是非常友好并且我很難維護(hù)。 此外, 隨著代
6、碼的增長,要記錄的類和函數(shù)的列表變得過于廣泛以至于不能將所有內(nèi)容放在文章 中。 作為替代,我提供了一個 doxygen 文檔,您可以從本文中(文章的開頭)下載:只需 下載“ Doxygen 文檔” zip 文件,解壓所有文件,雙擊“”文件,進(jìn)行查看。 入門學(xué)習(xí) 此圖表控件允許您在屏幕上繪制一系列數(shù)據(jù)。 此控件可以添加幾個不同類型數(shù)據(jù)序列并且 最多可以使用四個軸。 添加到圖表的數(shù)據(jù)序列與一個水平軸(底部或頂部)和一個垂直軸 (右側(cè)或左側(cè))相關(guān)聯(lián)。 這兩個軸控制數(shù)據(jù)序列在圖表上的顯示方式。 為了能夠在應(yīng)用程序中使用次圖表控件, 您首先需要在自己的工程里添加源代碼 zip 中包含 的文件。 注意:控
7、件在內(nèi)部使用動態(tài)轉(zhuǎn)型, 因此必須啟用 RTTI ( Run Time Type In formation 運行時自 動類型識別的機制),否則可能會發(fā)生崩潰。默認(rèn)情況下,VC6沒有啟用RTTI,因此要啟 用它打開項目設(shè)置 - “C / C + ”選項卡- “C +語言”類別,并確保Enable Run-Time Type In formatio n (RTTI) 選項已選中。 在應(yīng)用程序中使用圖表控件有兩種方法:手動插入,或通過資源編輯器插入。 手動插入 1. #include ChartCtrl添加在對話框(Dialog )類的頭文件中 2. 在對話框類中添加變量CChartCtrl: 對話框
8、類的OnlnitDialog方法中添加這個控件的Create方法。 并為Class屬性指定ChartCtrl。 為 樣式(0 x02000000L),如圖所示。 使用資源管理器 1. 向?qū)υ捒蛸Y源添加自定義控件,打開控件的屬性, 了避免滾動條上的閃爍,必須設(shè)置WS_CLIPCHILDREN 事 X J*聾 曰 Ah Fflr-nMr O DwfiM F-sIhi 応】D Fjke Trw 6 Mnt E Gr m_pPo in tsSeries =(); double YValues10; for (in ti=0;iSetPoi nts(XValues,YValues,10); void C
9、MyClass:O nDataReceived(double X, double Y) m_pPoi ntsSeries-AddPoi nt(X, Y); 所有系列類繼承自同一抽象基類: CChartSerie。該類處理所有系列通用的功能, 但對具 體的數(shù)據(jù)點沒有任何處理功能。點的概念在子類CChartSerieBase中引入,它是一個模板類, 模板參數(shù)是要操作為點的數(shù)據(jù)類型。 這很重要,因為序列可能必須處理不同的數(shù)據(jù)類型: 例 如點序列操作具有 X和Y值的點,但是 K線圖系列操縱具有 5個值(打開,關(guān)閉,高,低 和時間值)的點。其他系列繼承自CChartSerieBase并提供他們操作的數(shù)據(jù)
10、類型。 CChartSerieBase類已經(jīng)處理了大多數(shù)數(shù)據(jù)管理,并通過純虛函數(shù)將渲染委托給子類。每個 系列在創(chuàng)建時也會分配一個Id。此標(biāo)識可通過 CChartSerie : GetSerieId ()檢索,并可用于 從圖表中刪除該系列。 該系列的一個重要特征是控制點的順序:該系列中的所有點將根據(jù)它們的值重新排序。 默認(rèn)情況下,點是基于它們的X值排序的,但您可以通過對它們的Y值排序或不對它們進(jìn) 行排序來改變這種行為(在這種情況下,系列保持將點添加到系列中的順序)。對點進(jìn)行 排序會對性能產(chǎn)生影響: 如果點是有序的,則控件能夠從完整系列中檢索第一個和最后一個 可見點,并且僅繪制兩個點之間的點。另一
11、方面,你將不能繪制像橢圓形的曲線。您可以 通過調(diào)用 CChartSerieBase : SetSeriesOrdering 來更改點的順序。 然而,柱狀圖系列需要一些解釋。 控件中的不同系列的功能通常是不言自明的。 柱狀圖系列 這個系列有點特別,如果其中幾個在同一個控件上繪制在一起,他們將互相影響。目 的是能夠繪制多個條形圖系列,而不會重疊:它們是彼此相鄰繪制的。為此,您需要指定 每個所屬的組(一個簡單的整數(shù)標(biāo)識符)。同一組的系列彼此相鄰地繪制(或者對于水平條 在彼此的頂部):參見兩個圖形的示例。設(shè)置組ID是通過SetGroupId函數(shù)完成的。 ser-! es wi tli Ike saae
12、 gxoxip Id Blt s eri e s. vi th d.i. ffereiLt. ;gr omp Id 您還可以通過調(diào)用SetInterSpace靜態(tài)函數(shù)來控制所有柱形圖之間剩余的空間的寬度。 這將為所有系列設(shè)置以像素為單位的空間(因此,如果顯示多于兩個系列,則在任何位置使 用相同的空間)。注意,您可以通過調(diào)用SetBarWidth單獨設(shè)置柱狀圖系列的寬度。 在點上添加標(biāo)簽 一旦使用數(shù)據(jù)填充您的系列,您還可以在系列的特定點上添加標(biāo)簽:這個標(biāo)簽始終附 加到特定點?,F(xiàn)在,只提供一種類型的標(biāo)簽,氣泡標(biāo)簽:包含文本的圓角矩形并用線連接 到特定點上。 當(dāng)然,如果需要,您也可以提供自己的自定義
13、標(biāo)簽(參見“擴展功能” 一節(jié))。 有兩種方式創(chuàng)建文本標(biāo)簽:靜態(tài)創(chuàng)建標(biāo)簽時,或動態(tài)注冊一個對象,當(dāng)標(biāo)簽請求時, 它將提供文本。第一種方法是最簡單的,但也不太靈活。下面是一個代碼片段,顯示如何 做(假設(shè)m_pSeries已經(jīng)創(chuàng)建并填充足夠的數(shù)據(jù)): void CMyClass:l nit() m_pSeries-CreateBalloo nLabel(5,_T(This is a simple label); 此調(diào)用將創(chuàng)建一個帶有“ This is a simple label ”文本的標(biāo)簽,并將其附加到帶索引為 5 的點。該函數(shù)返回一個指向新創(chuàng)建的標(biāo)簽的指針, 以便您可以修改其某些屬性或存儲以供
14、以 后使用。 第二種方法有點復(fù)雜,但提供了更多的靈活性:例如,您可以以更方便的方式在標(biāo)簽 中顯示點屬性(例如 X值,Y值,)。為此,您必須創(chuàng)建一個繼承自CChartLabelProvider 的類,并在創(chuàng)建標(biāo)簽時提供此類的實例。 此類是模板類,模板參數(shù)是標(biāo)簽附加 到的系列的點 類型。 這個類是一個簡單的接口 , 你必須覆蓋 TChartString GetText (CChartSerieBase * pSerie,unsigned uPtIndex)方法。 此函數(shù)應(yīng)返回必須在標(biāo) 簽中顯示的文本。 它接收指向標(biāo)簽所附加的系列和點索引的指針。 這里有一個這樣的標(biāo)簽 提供程序類的例子: class
15、 CCustomLabelProvider : public CChartLabelProvider public: TChartString GetText(CChartSerieBase* pSeries, unsigned uPtIndex) TChartStringStream ssText; SChartXYPoint Point = pSeries-GetPoint(uPtIndex); ssText _T(X value=) CreateBalloonLabel(5, m_pLabelProvider); 控件不獲取指針的所有權(quán),因此,當(dāng)你不再需要時,你有責(zé)任刪除它。在上面的例子
16、 中,它通常會在 CMyClass 析構(gòu)函數(shù)中被刪除。 在上面的示例中,您可以為所有要添加的 標(biāo)簽地方重復(fù)使用相同的標(biāo)簽類, 這也帶來另一個優(yōu)點:如果你想在運行時改變標(biāo)簽的格 式,你只需要在 CustomLabelProvider 中添加代碼。 不需要遍歷所有現(xiàn)有標(biāo)簽并更改其文本。 當(dāng)然,在這種情況下, 需要刷新控件, 因為必須重新繪制標(biāo)簽。 還要注意 TChartStringStream 類的用法, TChartStringStream 類是由控件提供的別名 (類似于 TChartString )。 當(dāng) UNICODE 被定義時,它解析為std : wstringstream,當(dāng)未定義 UN
17、ICODE時,解析為std : stringstream。 對軸的操作 軸是圖表的一個重要特征,因為它們控制不同系列在控制中的顯示方式。 控件中最多 可使用四個軸:底部,頂部,左側(cè)和右側(cè)。 控件的每個系列必須和一個水平軸和一個垂直 軸相連接。 在圖表中添加系列時指定這些軸。 底部和左側(cè)軸是主軸, 頂部和右側(cè)軸是輔助 軸(您將在控件的某些功能中遇到此問題) 。 現(xiàn)在有三種類型的軸供選擇: 標(biāo)準(zhǔn)軸,對數(shù)軸 和日期 /時間軸。 您可以在不同位置選用不同類型的軸。 一旦您選擇了在不同位置使用哪些軸,您需要先創(chuàng)建它們,然后才能向控件添加任何 數(shù)據(jù)。 為此,通過指定軸附加在哪個位置, 簡單地調(diào)用 Crea
18、teStandardAxis , CreateLogarithmicAxis 或 CreateDateTimeAxis 。 如果已經(jīng)在該位置創(chuàng)建了軸, 則控件將銷毀 它并且用新的軸替換它。 這里有一個簡單的代碼片段,顯示如何在底部創(chuàng)建日期/時間,在 左側(cè)創(chuàng)建一個標(biāo)準(zhǔn)軸: void CMyClass:Init() CChartStandardAxis* pBottomAxis = (CChartCtrl:BottomAxis); CChartLogarithmicAxis* pLeftAxis = (CChartCtrl:LeftAxis); 一旦創(chuàng)建了這些軸,就可以對它們設(shè)置一些屬性。 大多數(shù)
19、屬性在所有軸類型之間共享 (例如自動模式,最小值和最大值,軸標(biāo)簽,)。軸可以設(shè)置為三種“自動”模式:全自 動,屏幕自動和手動模式。 全自動模式基于附加到該軸的所有系列計算軸最小值和最大值(所有系列的所有點的 最小值用作軸的最小值,并使用所有系列的所有點的最大值作為軸的最大值) 。 屏幕自動模式基于與該軸相關(guān)的所有系列的所有可見點計算軸最小值和最大值。例 如,如果圖表僅顯示連接到手動底部軸和屏幕自動左側(cè)軸的一個系列,則左側(cè)軸將自適應(yīng)于 當(dāng)前可見的點, 并且不考慮這些點有可能超過底軸的范圍 (在全自動模式下, 底軸外部的點 將被考慮)。 警告:如果系列的兩個軸都處于屏幕自動模式,則結(jié)果未定義。 在
20、手動模式下,軸最小和最大值由用戶設(shè)置,不由控件計算。 在使用自動軸模式下,如果將數(shù)據(jù)動態(tài)添加到控件,如果新的數(shù)據(jù)點位于軸的范圍之 外,那么控件將自動刷新。 這里是一個代碼片段(繼續(xù)前一個代碼段) ,顯示一個全自動軸 (底部軸)和一個手動軸(左軸,它是一個對數(shù)軸) : void CMyClass:Init() pBottomAxis-SetAutomaticMode(CChartAxis:FullAutomatic); pLeftAxis-SetAutomaticMode(CChartAxis:NotAutomatic); pLeftAxis-SetMinMax,1000); 處于離散模式下的軸
21、 軸有一個模式是離散模式(默認(rèn)禁用)。此模式指定軸不顯示連續(xù)值,而只顯示離散值, 這些值是軸上刻度指定的值,而軸將不顯示其他的值。嘗試?yán)L制不同于顯示的節(jié)拍值的值是 不可能的。讓我們舉一個例子:假設(shè)你有一個底部標(biāo)準(zhǔn)軸,間隔為(所以,顯示的蜱是1, 2, 3等等)。嘗試?yán)L制X值為的點將在相同位置顯示該點,就好像它的值為。事實上,你可 以認(rèn)為兩個刻度之間的區(qū)域是一個常量值。這就是為什么刻度標(biāo)簽顯示在兩個刻度的中間, 而不是刻度本身。 這里有一個小代碼片段,顯示離散軸對系列顯示方式的影響。代碼片段下的兩個圖像 顯示啟用離散模式(第一個圖像)或禁用(第二個圖像)的結(jié)果。 void CMyClass:l
22、nit() CChartSta ndardAxis* pBottomAxis = (CChartCtrl:BottomAxis); pBottomAxis-SetMi nM ax(0, 10); CChartSta ndardAxis* pLeftAxis = (CChartCtrl:LeftAxis); pLeftAxis-SetMi nM ax(0, 10); pBottomAxis-SetTickl ncreme nt(false,; pBottomAxis-SetDiscrete(true); CChartL in eSerie* pSeries =(); double XVal20;
23、 double YVal20; for (int i=0; iSetPoi nts(XVal,YVal,20); Discre te nodle di sa.bJLed. 使用日期/時間軸 使用日期/時間軸有點特別,下面是如何利用這個功能的解釋。要了解日期/時間軸的重 要一點是它們在 COleDateTime對象內(nèi)部工作。 原因很簡單:COleDateTime中有DATE類型 的類, DATE 類型是一個雙精度型。由于圖表中的點表示為雙精度值,因此它非常適合:使 用標(biāo)準(zhǔn)點(非日期 /時間)和日期 /時間點之間沒有差異,這使得后者的使用不太復(fù)雜。所有 點仍然存儲為雙精度型,無論是否是日期 /時間
24、。 創(chuàng)建日期 / 時間軸后,可以在控件中填充數(shù)據(jù)。 為此目的,沒有改變:你必須從 CChartSerie 類調(diào)用 void AddPoint (double X , double Y )或 void SetPoints (double * X , double * Y , int Count)。 CChartCtrl 類提供了兩個靜態(tài)函數(shù),讓你從 COleDateTime 轉(zhuǎn)換為雙精度,反之亦 然: double DateToValue(const COleDateTime COleDateTime maxValue(2007,12,31,0,0,0); pBottomAxis-SetMinM
25、ax(CChartCtrl:DateToValue(minValue), CChartCtrl:DateToValue(maxValue); CChartCrossHairCursor* pCrossHair = (); CChartDragLineCursor* pDragLine = (CChartCtrl:BottomAxis); (false); 注意到對 CChartCtrl : ShowMouseCursor 的調(diào)用結(jié)束。 默認(rèn)情況下, 鼠標(biāo)總是可見的, 但是當(dāng)您使用十字光標(biāo)時,當(dāng)它在繪圖區(qū)域時隱藏有時是需要的。 如果希望在光標(biāo)位置更改時收到通知,則必須實現(xiàn) CChartCurso
26、rListener 接口,創(chuàng)建其 實例并使用光標(biāo)注冊它: class CCustomCursorListener : public CChartCursorListener public: void OnCursorMoved(CChartCursor *pCursor, double xValue, double yValue) TChartStringStream ssText; ssText _T(Cursor moved: xPos=) xValue _T(, yPos=) RegisterListener(pCursorListener); OnCursorMoved 函數(shù)接收一個
27、X 和 Y 值,但對于拖動光標(biāo),只使用這些值中的一個: 如果光標(biāo)與水平軸相關(guān)聯(lián),則使用 X 值,否則使用 Y 值。 使用平移和縮放功能 在版本的控件中,縮放和平移功能已被添加到控件。 使用鼠標(biāo)左鍵控制縮放,用鼠標(biāo) 右鍵控制平移。 要縮放圖表的特定部分,只需左鍵單擊圖表(這將是縮放矩形的左上角) , 然后拖動到右下角。 將出現(xiàn)一個矩形。 一旦松開鼠標(biāo)按鈕, 四個軸將自動調(diào)整到您選擇的 區(qū)域。 默認(rèn)情況下啟用縮放,但您可以通過調(diào)用 CChartCtrl : SetZoomEnabled ( bool bEnabled)來禁用縮放。您還可以通過調(diào)用 CChartAxis : SetZoomLimit
28、 (double dLimit )為 每個軸指定縮放限制。 它指定縮放時軸的最小范圍。 默認(rèn)值為。 要平移控件,右鍵單擊控件上的某處并移動鼠標(biāo)。 鼠標(biāo)下的點將“跟隨”鼠標(biāo)的移動 (實際上,軸的最小和最大值將改變)。 默認(rèn)情況下啟用平移,但您可以通過調(diào)用 CChartCtrl : SetPanEnabled (bool bEnabled)來禁用它。 如果您左鍵單擊圖表(例如開始縮放) ,但如果您移動到左上角,所有使用縮放和平移 功能所做的修改將被取消(控制將處于它的狀態(tài) 在使用平移和縮放操作之前) 。 最后,還 有一種方法通過調(diào)用 CChartAxis : SetPanZoomEnabled (
29、bool bEnabled )禁用特定軸的平移 和縮放功能。 利用高速功能 線和點系列允許以高速率繪制數(shù)據(jù)。 這通常在要繪制來自外部設(shè)備(例如,傳感器) 的數(shù)據(jù)時完成。 這是可能的,因為當(dāng)您向此類系列添加點時,控件不會完全刷新,只會繪 制最后一個點(或最后一個線段) ,這是非常有效的。 但是,如果希望控件能夠足夠快地繪 制數(shù)據(jù),則必須考慮幾點。 一個重要的事情是,使用自動軸可能會降低很多性能。這是因為如果一個點繪制在軸 范圍之外, 則軸范圍將被自動調(diào)整, 這意味著控制將被完全刷新。 因此,如果您使用自動底 部軸線并具有“滾動”軌跡,則每個新點都將位于軸的當(dāng)前范圍之外, 并且將對每個點執(zhí)行 控制
30、刷新。處理的更好的方法是使用固定軸并且每秒手動地增加軸的范圍(或以合理的速 率)。 另一個重要的點是, 你不應(yīng)該在向一個系列添加一個新點之后調(diào)用RefreshCtrl 。這當(dāng)然 會完全地刷新控件, 但是應(yīng)該避免這樣做。 最后, 如果您需要同時應(yīng)用幾個修改或添加幾個 點到控件,您應(yīng)該在 EnableRefresh (false)和EnableRefresh (true)之間圭寸裝這些調(diào)用(請 參閱“自定義外觀”部分) 。 擴展功能 在某些特定情況下,您需要使用新功能擴展控件,例如新的系列類型。目前,您可以 自定義四個組件:序列,軸,點標(biāo)簽和光標(biāo)。 要提供 新軸,新標(biāo)簽或新光標(biāo) ,您只需繼承基類(
31、 CChartAxis , CChartLabel 或 CChartCursor )并實現(xiàn)所需的虛擬函數(shù)。一旦完成,您可以通過調(diào)用不同函數(shù)的自定義版本 ( CChartCtrl : AttachCustomAxis , CChartCtrl : AttachCustomLabel 或 CChartCtrl : AttachCustomCursor )附加您的新對象。 CChartLabel 類是一個模板類。 這個主題有點廣泛, 進(jìn)入了很多細(xì)節(jié),但最簡單的方法是看看不同的現(xiàn)有類。 如果你想提供新的系列,這有點不同:你首先要考慮你想要在你的系列中操縱的點的 類型。如果你只需要使用 X 和 Y 值來
32、操作點,那么你可以繼承 CChartXYSerie ,它提供了 很多功能來操作這些點。 然后, 您必須實現(xiàn)所需的虛擬函數(shù)。 看看下面的系列: CChartLineSerie , CChartPointSerie , CChartSurfaceSerie 和 CChartBarSerie 具體示例。 如果你的系列操縱其他類型的點,那么你首先必須為點包含以下方法創(chuàng)建一個結(jié)構(gòu): double GetX() , double GetXMin() , double GetXMax() , double GetY() , double GetYMin() 和 double GetYMax() 。一旦完成,
33、您必須繼承 CChartSerieBase 并將此點作為模板參數(shù)。然后, 您必須提供 所需的 虛擬功 能。 看看 下面的 系列具 體 例子: CChartCandlestickSerie 和 CChartGanttSerie。 Upgrading from Versionto Version 在版本中,對控件進(jìn)行重構(gòu),導(dǎo)致 API 的更改。 主要的可見變化是每個軸類型現(xiàn)在有 其單獨的類( CChartStandardAxis , CChartDateTimeAxis 和 CChartLogarithmicAxis )。 這也 意味著默認(rèn)情況下沒有創(chuàng)建軸, 并且您必須在向圖表添加系列之前自己創(chuàng)建
34、軸 (否則代碼將 斷言)。 這包括在“操縱軸”部分。 另一個變化是添加系列到圖表的方式: AddSerie 已經(jīng)在 CChartCtrl 類中刪除, 并已被幫 助函數(shù)替代,以創(chuàng)建特定的系列類型(CreateLineSerie, CreatePointsSerie,)。這些函數(shù) 返回確切的系列類型,因此不再需要鑄造。這在“操縱系列”一節(jié)中有詳細(xì)描述。 Upgrading from Version to Version 版本 3.0.0 的主要變化是,系列基類現(xiàn)在已經(jīng)作為模板類,模板參數(shù)是系列操作的點類 型。如果您沒有通過提供新的系列類型擴展控件, 這將不會在您的代碼中有所不同。 如果你 提供了一
35、個新的系列類型,你的類必須繼承 CCharSerieBase 并提供它操作的點的類型。如 果你的系列使用只有 X 和 Y 值的點,你可以簡單地繼承 CChartXYSerie ??纯船F(xiàn)有的系列 更多的例子。 另一個小的修改是標(biāo)簽提供程序現(xiàn)在也是模板類(出于同樣的原因)。并且監(jiān)聽系列中 的鼠標(biāo)事件現(xiàn)在從圖表上的鼠標(biāo)事件中分離出來。 這兩點在“在點上添加標(biāo)簽”部分和 “鼠 標(biāo)事件通知”部分中有很好的解釋。 最后, CChartAxis : SetAutomatic 方法已被標(biāo)記為已棄用,您應(yīng)該使用 CChartAxis : SetAutomaticMode (已經(jīng)引入了一個額外的自動模式)。 例子
36、 本節(jié)只是兩個代碼片段,顯示了如何使用控件。第一個片段再現(xiàn)了示波器示例的圖像 (參見本文頂部) ,第二個示例再現(xiàn)了“ 2008 年收入”圖像。 代碼是文檔化的,所以它不 應(yīng)該太難理解。 Oscilloscope example: (false); .) COLORREF BackColor = RGB(0,50,0); COLORREF GridColor = RGB(0,180,0); COLORREF TextColor = RGB(0,180,0); COLORREF SerieColor = RGB(0,255,0); This will refresh the (true); “ I
37、ncome over 2008 ” example: srand(unsigned int)time(NULL); TChartStringStream labelStream; labelStream _T(Min income: ) lowVal; CChartBalloonLabel* pLabel = pLineSeries-CreateBalloonLabel(lowIndex, () + _T( kEuros); CChartFont labelFont; (_T(Microsoft Sans Serif),100,false,true,false); pLabel-SetFont
38、(labelFont); If you encounter such a problem, please let me know (even if you fixed it yourself) so that I can fix the issue as soon as possible. Other users of the control will thank you for that. The same if you encounter errors in the documentation or typos in the article. I malso more or less co
39、nstantly working on this control to add new features. If you have some requirement for a nice feature that could be useful for others, please let me know and I it to my wishlist. However, as I m working on this control in my spare timye,time is rather limited. Finally, if you liked this control, do
40、not hesitate to drop me a word in the discussion forum or to rate the article, this is much appreciated. Thank you. History 08/05/2006: Release of version 19/08/2006: Release of version Bug fix in ScreenToValue function (CChartAxis) Bug fix in RemoveAllSeries function (CChartCtrl) Added support for
41、manual zoom Added support for mouse panning Ability to specify a tick increment on the axis Added support for resizing the control 09/04/2007: Release of version GDI leak corrected Invisible series are not taken in account for auto axis and legend (thanks to jerminator-jp) Ability to change the text
42、 color of the axis Ability to change the color of the border of the drawing area Surface series added 16/02/2008: Release of version Added date/time axis Bug fix in how the logarithmic labels are displayed (trailing 0) Ability to change the color of the zoom rectangle Removed compiler warnings for V
43、C2005 Bug fix in the zoom 14/04/2008: Release of version Added support for scrollbars Bar series added Legend can be docked on any side or floating Support for legend in horizontal mode Support for transparent background on the legend Support for shadow for several objects RemovePointsFromBegin, Rem
44、ovePointsFromEnd and AddPoints in the CChartSeries class Support for gradient background EnableRefresh and UndoPanZoom functions added in CChartCtrl Possibility to enable/disable the zoom for a specific axis and to set its limit Speed improvement on the series (min and max cached, ordering of the se
45、ries) Series can be removed using their pointers Bug fix for invisible series in the legend Bug fix for logarithmic axis (1 digit was not displayed) Bug fix when removing series from the control Bug fix if the pen width is bigger than 1 for line series Bug fix for automatic axis 20/08/2008: Release
46、of version Added support for UNICODE Added support for printing Auto-hide scrollbars Baseline selection for bar series Performance patch Scrollbar flickering removed (see here) Bug fix: scrollbar is now updated when axis is panned Bug fix: calling AddPoint was not drawing the new point Bug fix: tick
47、 labels for log axis were not always correct (rounding error) Bug fix: last point of ChartPointSerie was not displayed Bug fix: moving the mouse outside the control doesne zoom tosrtpopanthoperation (the button can be released the control) 13/04/2009: Release of version The different axis types are
48、now separated into different classes Modified the way to add series to the control for improved flexibility Added cursors Ability to display discrete axes Ability to be notified about mouse events occurring on the control Added labels on points Ability to display a smooth curve Added ChartFont: allo
49、ws for italic, bold or underlined fonts Added the SetReferenceTick function for date/time axis Ability to store user data for each point Series now have an Id Removed the CChartObject class Points are now stored in a standard array instead of a std:vector for efficiency Binary search implemented for
50、 finding the first and last visible points (for efficiency) The line series now uses PolyLine instead of MoveTo/LineTo (efficiency) Bug fix when using date/time axis with a tick interval in years Bug fix: bar series were drawn from the wrong axis 11/06/2009: Release of version 2.0.1 Optimization: th
51、e pan feature has been smoothed Optimization: points with the same X and Y values are not plotted anymore for the line series. Bug fix: in some situations, the code was crashing when accessing points outside the valid range Bug fix: when series were removed, the legend was accessing removed series (
52、which crashed) Bug fix: when a series was cleared, new points were not drawn properly Bug fix: inserting a point for which the X value already existed in the series did not add the point properly Bug fix with the CChartFont class 07/08/2009: Release of version 2.0.2 Bug fix: the control was crashing
53、 when a series with no points and no ordering was added Bug fix: the shadow of the line was not drawn correctly Bug fix: when an automatic date/time axis was used without any data, the code crashed 28/12/2009: Release of version 3.0.0 Series are now template classes with the template parameter being the point type. This allows the control to manipulate any type of points Added candlestick and Gantt series Added support to save the chart to an image file Bar series can be stacked Added a new automatic mode for axes: the screen automatic mode Listening
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《化工制圖基本知識》課件
- 甘肅政法大學(xué)《先進(jìn)復(fù)合材料》2023-2024學(xué)年第一學(xué)期期末試卷
- 企業(yè)培訓(xùn)課件題目
- 三年級數(shù)學(xué)上冊四兩位數(shù)除以一位數(shù)的除法兩位數(shù)除以一位數(shù)說課稿西師大版
- 《考試習(xí)慣指導(dǎo)》課件
- 三年級科學(xué)上冊第1單元水8它們發(fā)生了什么變化教案2教科版
- 《作文復(fù)習(xí)分析論據(jù)》課件
- 化工生產(chǎn)安全用電課件
- 動物解剖生理學(xué)-25體溫
- 初一安全食品課件
- DB11-T1835-2021 給水排水管道工程施工技術(shù)規(guī)程高清最新版
- 《妊娠期糖尿病患者個案護(hù)理體會(論文)3500字》
- 解剖篇2-1內(nèi)臟系統(tǒng)消化呼吸生理學(xué)
- 《小學(xué)生錯別字原因及對策研究(論文)》
- 便攜式氣體檢測報警儀管理制度
- 酒店安全的管理制度
- (大潔王)化學(xué)品安全技術(shù)說明書
- 2022年科學(xué)道德與學(xué)術(shù)規(guī)范知識競賽決賽題庫(含答案)
- 市場調(diào)查與預(yù)測期末復(fù)習(xí)試題10套含答案
- 呼吸內(nèi)科國家臨床重點專科建設(shè)項目評分標(biāo)準(zhǔn)試行
- 煤炭質(zhì)量分級及低位發(fā)熱量計算
評論
0/150
提交評論