HighspeedChartingControlMFC繪制圖表折線圖餅圖柱形圖控件_第1頁
HighspeedChartingControlMFC繪制圖表折線圖餅圖柱形圖控件_第2頁
HighspeedChartingControlMFC繪制圖表折線圖餅圖柱形圖控件_第3頁
HighspeedChartingControlMFC繪制圖表折線圖餅圖柱形圖控件_第4頁
HighspeedChartingControlMFC繪制圖表折線圖餅圖柱形圖控件_第5頁
已閱讀5頁,還剩12頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 High-speed Charti ng Con trol-MFC繪 制圖表(折線圖、餅圖、柱形圖)控件 綜述 詁于揑件是用來展示2嚼據-如下面的圖片. PiKGme ove-r 200S Wif?ir 階陽0刖Q Lipi ape Totiltfecofti1! 9090TO605040 PBW55 Min inCBirni - 3 ikt . n 1 Cardhitind. wiNi 介紹 對于我之前的一個項目, 我需要在圖表控件上顯示連續的數據流。我決定開發自己的控件, 因為我找不到任何可以提供所需靈活性的自由軟件控件。其中一個主要的限制是,控件必 須繪制大量的數據,并能夠迅速顯示它(

2、在 Pocket PC上)。控件能夠通過僅繪制新的數據 點而不是完整的數據序列來做到這一點并且圖表還能夠顯示靜態數據。 這種控件是我長時間工作的結果,而且費盡周折地為了提供足夠的靈活性來供需要它的人使 用。對于使用者反饋我表示由衷的感謝:一個郵件,留言板中的一一句話或只是對本文評 級。當我不知道是否還有人使用它時,我就沒有必要維護這個控件了。 免責聲明 這個控件是我花費很長時間的開發的結果,因此我對代碼的使用放置一些小條件: 該代碼可以以編譯的形式用于任何非商業和商業目的。代碼可以被重新開發,只要它提供作 者名字和完整的免責聲明。更改源代碼需要得到作者的同意。 此代碼不提供任何安全保證。我不會

3、對使用此代碼造成的損失負責。使用它需要自己承擔 風險。 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. 鑒于開發這個控件所付出的努力,下面的要求并不過分: 如果你在在商業應用程序中使用 這個控件,那么請給我發郵件讓我知道。 主要特點 控件的主要特點是: 高速繪圖(軸固定時) ,允許快速繪制數據 無限數量的數據序列(內存是限制) 每個數據序列的數據量不受限制 支持線圖,點圖,平

5、面圖,柱狀圖, K 線圖 和甘特圖系列 最多四個軸(左,下,右和上軸) 標準軸,對數軸或日期 /時間軸 自動伸縮的坐標軸 , 翻轉的坐標軸(相互獨立) 軸標簽 點標簽 平滑的曲線 網格 圖例和標題 交互性(在控件中發生特定事件時的通知) 支持手動縮放和鼠標平移 支持鼠標指針 支持軸上的滾動條 高度可定制(顏色,標題,標簽,邊緣,字體等) 支持 UNICODE 支持打印和保存到圖像文件 文檔結構 本文通過一系列簡短的教程來涵蓋控件的大部分功能。 閱讀本文后,您將能夠快速地在自 己的應用程序中使用本控件。 我決定從文章中刪除所有的類和函數的文檔, 因為它不是非常友好并且我很難維護。 此外, 隨著代

6、碼的增長,要記錄的類和函數的列表變得過于廣泛以至于不能將所有內容放在文章 中。 作為替代,我提供了一個 doxygen 文檔,您可以從本文中(文章的開頭)下載:只需 下載“ Doxygen 文檔” zip 文件,解壓所有文件,雙擊“”文件,進行查看。 入門學習 此圖表控件允許您在屏幕上繪制一系列數據。 此控件可以添加幾個不同類型數據序列并且 最多可以使用四個軸。 添加到圖表的數據序列與一個水平軸(底部或頂部)和一個垂直軸 (右側或左側)相關聯。 這兩個軸控制數據序列在圖表上的顯示方式。 為了能夠在應用程序中使用次圖表控件, 您首先需要在自己的工程里添加源代碼 zip 中包含 的文件。 注意:控

7、件在內部使用動態轉型, 因此必須啟用 RTTI ( Run Time Type In formation 運行時自 動類型識別的機制),否則可能會發生崩潰。默認情況下,VC6沒有啟用RTTI,因此要啟 用它打開項目設置 - “C / C + ”選項卡- “C +語言”類別,并確保Enable Run-Time Type In formatio n (RTTI) 選項已選中。 在應用程序中使用圖表控件有兩種方法:手動插入,或通過資源編輯器插入。 手動插入 1. #include ChartCtrl添加在對話框(Dialog )類的頭文件中 2. 在對話框類中添加變量CChartCtrl: 對話框

8、類的OnlnitDialog方法中添加這個控件的Create方法。 并為Class屬性指定ChartCtrl。 為 樣式(0 x02000000L),如圖所示。 使用資源管理器 1. 向對話框資源添加自定義控件,打開控件的屬性, 了避免滾動條上的閃爍,必須設置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。該類處理所有系列通用的功能, 但對具 體的數據點沒有任何處理功能。點的概念在子類CChartSerieBase中引入,它是一個模板類, 模板參數是要操作為點的數據類型。 這很重要,因為序列可能必須處理不同的數據類型: 例 如點序列操作具有 X和Y值的點,但是 K線圖系列操縱具有 5個值(打開,關閉,高,低 和時間值)的點。其他系列繼承自CChartSerieBase并提供他們操作的數據

10、類型。 CChartSerieBase類已經處理了大多數數據管理,并通過純虛函數將渲染委托給子類。每個 系列在創建時也會分配一個Id。此標識可通過 CChartSerie : GetSerieId ()檢索,并可用于 從圖表中刪除該系列。 該系列的一個重要特征是控制點的順序:該系列中的所有點將根據它們的值重新排序。 默認情況下,點是基于它們的X值排序的,但您可以通過對它們的Y值排序或不對它們進 行排序來改變這種行為(在這種情況下,系列保持將點添加到系列中的順序)。對點進行 排序會對性能產生影響: 如果點是有序的,則控件能夠從完整系列中檢索第一個和最后一個 可見點,并且僅繪制兩個點之間的點。另一

11、方面,你將不能繪制像橢圓形的曲線。您可以 通過調用 CChartSerieBase : SetSeriesOrdering 來更改點的順序。 然而,柱狀圖系列需要一些解釋。 控件中的不同系列的功能通常是不言自明的。 柱狀圖系列 這個系列有點特別,如果其中幾個在同一個控件上繪制在一起,他們將互相影響。目 的是能夠繪制多個條形圖系列,而不會重疊:它們是彼此相鄰繪制的。為此,您需要指定 每個所屬的組(一個簡單的整數標識符)。同一組的系列彼此相鄰地繪制(或者對于水平條 在彼此的頂部):參見兩個圖形的示例。設置組ID是通過SetGroupId函數完成的。 ser-! es wi tli Ike saae

12、 gxoxip Id Blt s eri e s. vi th d.i. ffereiLt. ;gr omp Id 您還可以通過調用SetInterSpace靜態函數來控制所有柱形圖之間剩余的空間的寬度。 這將為所有系列設置以像素為單位的空間(因此,如果顯示多于兩個系列,則在任何位置使 用相同的空間)。注意,您可以通過調用SetBarWidth單獨設置柱狀圖系列的寬度。 在點上添加標簽 一旦使用數據填充您的系列,您還可以在系列的特定點上添加標簽:這個標簽始終附 加到特定點。現在,只提供一種類型的標簽,氣泡標簽:包含文本的圓角矩形并用線連接 到特定點上。 當然,如果需要,您也可以提供自己的自定義

13、標簽(參見“擴展功能” 一節)。 有兩種方式創建文本標簽:靜態創建標簽時,或動態注冊一個對象,當標簽請求時, 它將提供文本。第一種方法是最簡單的,但也不太靈活。下面是一個代碼片段,顯示如何 做(假設m_pSeries已經創建并填充足夠的數據): void CMyClass:l nit() m_pSeries-CreateBalloo nLabel(5,_T(This is a simple label); 此調用將創建一個帶有“ This is a simple label ”文本的標簽,并將其附加到帶索引為 5 的點。該函數返回一個指向新創建的標簽的指針, 以便您可以修改其某些屬性或存儲以供

14、以 后使用。 第二種方法有點復雜,但提供了更多的靈活性:例如,您可以以更方便的方式在標簽 中顯示點屬性(例如 X值,Y值,)。為此,您必須創建一個繼承自CChartLabelProvider 的類,并在創建標簽時提供此類的實例。 此類是模板類,模板參數是標簽附加 到的系列的點 類型。 這個類是一個簡單的接口 , 你必須覆蓋 TChartString GetText (CChartSerieBase * pSerie,unsigned uPtIndex)方法。 此函數應返回必須在標 簽中顯示的文本。 它接收指向標簽所附加的系列和點索引的指針。 這里有一個這樣的標簽 提供程序類的例子: 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); 控件不獲取指針的所有權,因此,當你不再需要時,你有責任刪除它。在上面的例子

16、 中,它通常會在 CMyClass 析構函數中被刪除。 在上面的示例中,您可以為所有要添加的 標簽地方重復使用相同的標簽類, 這也帶來另一個優點:如果你想在運行時改變標簽的格 式,你只需要在 CustomLabelProvider 中添加代碼。 不需要遍歷所有現有標簽并更改其文本。 當然,在這種情況下, 需要刷新控件, 因為必須重新繪制標簽。 還要注意 TChartStringStream 類的用法, TChartStringStream 類是由控件提供的別名 (類似于 TChartString )。 當 UNICODE 被定義時,它解析為std : wstringstream,當未定義 UN

17、ICODE時,解析為std : stringstream。 對軸的操作 軸是圖表的一個重要特征,因為它們控制不同系列在控制中的顯示方式。 控件中最多 可使用四個軸:底部,頂部,左側和右側。 控件的每個系列必須和一個水平軸和一個垂直 軸相連接。 在圖表中添加系列時指定這些軸。 底部和左側軸是主軸, 頂部和右側軸是輔助 軸(您將在控件的某些功能中遇到此問題) 。 現在有三種類型的軸供選擇: 標準軸,對數軸 和日期 /時間軸。 您可以在不同位置選用不同類型的軸。 一旦您選擇了在不同位置使用哪些軸,您需要先創建它們,然后才能向控件添加任何 數據。 為此,通過指定軸附加在哪個位置, 簡單地調用 Crea

18、teStandardAxis , CreateLogarithmicAxis 或 CreateDateTimeAxis 。 如果已經在該位置創建了軸, 則控件將銷毀 它并且用新的軸替換它。 這里有一個簡單的代碼片段,顯示如何在底部創建日期/時間,在 左側創建一個標準軸: void CMyClass:Init() CChartStandardAxis* pBottomAxis = (CChartCtrl:BottomAxis); CChartLogarithmicAxis* pLeftAxis = (CChartCtrl:LeftAxis); 一旦創建了這些軸,就可以對它們設置一些屬性。 大多數

19、屬性在所有軸類型之間共享 (例如自動模式,最小值和最大值,軸標簽,)。軸可以設置為三種“自動”模式:全自 動,屏幕自動和手動模式。 全自動模式基于附加到該軸的所有系列計算軸最小值和最大值(所有系列的所有點的 最小值用作軸的最小值,并使用所有系列的所有點的最大值作為軸的最大值) 。 屏幕自動模式基于與該軸相關的所有系列的所有可見點計算軸最小值和最大值。例 如,如果圖表僅顯示連接到手動底部軸和屏幕自動左側軸的一個系列,則左側軸將自適應于 當前可見的點, 并且不考慮這些點有可能超過底軸的范圍 (在全自動模式下, 底軸外部的點 將被考慮)。 警告:如果系列的兩個軸都處于屏幕自動模式,則結果未定義。 在

20、手動模式下,軸最小和最大值由用戶設置,不由控件計算。 在使用自動軸模式下,如果將數據動態添加到控件,如果新的數據點位于軸的范圍之 外,那么控件將自動刷新。 這里是一個代碼片段(繼續前一個代碼段) ,顯示一個全自動軸 (底部軸)和一個手動軸(左軸,它是一個對數軸) : void CMyClass:Init() pBottomAxis-SetAutomaticMode(CChartAxis:FullAutomatic); pLeftAxis-SetAutomaticMode(CChartAxis:NotAutomatic); pLeftAxis-SetMinMax,1000); 處于離散模式下的軸

21、 軸有一個模式是離散模式(默認禁用)。此模式指定軸不顯示連續值,而只顯示離散值, 這些值是軸上刻度指定的值,而軸將不顯示其他的值。嘗試繪制不同于顯示的節拍值的值是 不可能的。讓我們舉一個例子:假設你有一個底部標準軸,間隔為(所以,顯示的蜱是1, 2, 3等等)。嘗試繪制X值為的點將在相同位置顯示該點,就好像它的值為。事實上,你可 以認為兩個刻度之間的區域是一個常量值。這就是為什么刻度標簽顯示在兩個刻度的中間, 而不是刻度本身。 這里有一個小代碼片段,顯示離散軸對系列顯示方式的影響。代碼片段下的兩個圖像 顯示啟用離散模式(第一個圖像)或禁用(第二個圖像)的結果。 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對象內部工作。 原因很簡單:COleDateTime中有DATE類型 的類, DATE 類型是一個雙精度型。由于圖表中的點表示為雙精度值,因此它非常適合:使 用標準點(非日期 /時間)和日期 /時間點之間沒有差異,這使得后者的使用不太復雜。所有 點仍然存儲為雙精度型,無論是否是日期 /時間

24、。 創建日期 / 時間軸后,可以在控件中填充數據。 為此目的,沒有改變:你必須從 CChartSerie 類調用 void AddPoint (double X , double Y )或 void SetPoints (double * X , double * Y , int Count)。 CChartCtrl 類提供了兩個靜態函數,讓你從 COleDateTime 轉換為雙精度,反之亦 然: 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 的調用結束。 默認情況下, 鼠標總是可見的, 但是當您使用十字光標時,當它在繪圖區域時隱藏有時是需要的。 如果希望在光標位置更改時收到通知,則必須實現 CChartCurso

26、rListener 接口,創建其 實例并使用光標注冊它: 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 函數接收一個

27、X 和 Y 值,但對于拖動光標,只使用這些值中的一個: 如果光標與水平軸相關聯,則使用 X 值,否則使用 Y 值。 使用平移和縮放功能 在版本的控件中,縮放和平移功能已被添加到控件。 使用鼠標左鍵控制縮放,用鼠標 右鍵控制平移。 要縮放圖表的特定部分,只需左鍵單擊圖表(這將是縮放矩形的左上角) , 然后拖動到右下角。 將出現一個矩形。 一旦松開鼠標按鈕, 四個軸將自動調整到您選擇的 區域。 默認情況下啟用縮放,但您可以通過調用 CChartCtrl : SetZoomEnabled ( bool bEnabled)來禁用縮放。您還可以通過調用 CChartAxis : SetZoomLimit

28、 (double dLimit )為 每個軸指定縮放限制。 它指定縮放時軸的最小范圍。 默認值為。 要平移控件,右鍵單擊控件上的某處并移動鼠標。 鼠標下的點將“跟隨”鼠標的移動 (實際上,軸的最小和最大值將改變)。 默認情況下啟用平移,但您可以通過調用 CChartCtrl : SetPanEnabled (bool bEnabled)來禁用它。 如果您左鍵單擊圖表(例如開始縮放) ,但如果您移動到左上角,所有使用縮放和平移 功能所做的修改將被取消(控制將處于它的狀態 在使用平移和縮放操作之前) 。 最后,還 有一種方法通過調用 CChartAxis : SetPanZoomEnabled (

29、bool bEnabled )禁用特定軸的平移 和縮放功能。 利用高速功能 線和點系列允許以高速率繪制數據。 這通常在要繪制來自外部設備(例如,傳感器) 的數據時完成。 這是可能的,因為當您向此類系列添加點時,控件不會完全刷新,只會繪 制最后一個點(或最后一個線段) ,這是非常有效的。 但是,如果希望控件能夠足夠快地繪 制數據,則必須考慮幾點。 一個重要的事情是,使用自動軸可能會降低很多性能。這是因為如果一個點繪制在軸 范圍之外, 則軸范圍將被自動調整, 這意味著控制將被完全刷新。 因此,如果您使用自動底 部軸線并具有“滾動”軌跡,則每個新點都將位于軸的當前范圍之外, 并且將對每個點執行 控制

30、刷新。處理的更好的方法是使用固定軸并且每秒手動地增加軸的范圍(或以合理的速 率)。 另一個重要的點是, 你不應該在向一個系列添加一個新點之后調用RefreshCtrl 。這當然 會完全地刷新控件, 但是應該避免這樣做。 最后, 如果您需要同時應用幾個修改或添加幾個 點到控件,您應該在 EnableRefresh (false)和EnableRefresh (true)之間圭寸裝這些調用(請 參閱“自定義外觀”部分) 。 擴展功能 在某些特定情況下,您需要使用新功能擴展控件,例如新的系列類型。目前,您可以 自定義四個組件:序列,軸,點標簽和光標。 要提供 新軸,新標簽或新光標 ,您只需繼承基類(

31、 CChartAxis , CChartLabel 或 CChartCursor )并實現所需的虛擬函數。一旦完成,您可以通過調用不同函數的自定義版本 ( CChartCtrl : AttachCustomAxis , CChartCtrl : AttachCustomLabel 或 CChartCtrl : AttachCustomCursor )附加您的新對象。 CChartLabel 類是一個模板類。 這個主題有點廣泛, 進入了很多細節,但最簡單的方法是看看不同的現有類。 如果你想提供新的系列,這有點不同:你首先要考慮你想要在你的系列中操縱的點的 類型。如果你只需要使用 X 和 Y 值來

32、操作點,那么你可以繼承 CChartXYSerie ,它提供了 很多功能來操作這些點。 然后, 您必須實現所需的虛擬函數。 看看下面的系列: CChartLineSerie , CChartPointSerie , CChartSurfaceSerie 和 CChartBarSerie 具體示例。 如果你的系列操縱其他類型的點,那么你首先必須為點包含以下方法創建一個結構: double GetX() , double GetXMin() , double GetXMax() , double GetY() , double GetYMin() 和 double GetYMax() 。一旦完成,

33、您必須繼承 CChartSerieBase 并將此點作為模板參數。然后, 您必須提供 所需的 虛擬功 能。 看看 下面的 系列具 體 例子: CChartCandlestickSerie 和 CChartGanttSerie。 Upgrading from Versionto Version 在版本中,對控件進行重構,導致 API 的更改。 主要的可見變化是每個軸類型現在有 其單獨的類( CChartStandardAxis , CChartDateTimeAxis 和 CChartLogarithmicAxis )。 這也 意味著默認情況下沒有創建軸, 并且您必須在向圖表添加系列之前自己創建

34、軸 (否則代碼將 斷言)。 這包括在“操縱軸”部分。 另一個變化是添加系列到圖表的方式: AddSerie 已經在 CChartCtrl 類中刪除, 并已被幫 助函數替代,以創建特定的系列類型(CreateLineSerie, CreatePointsSerie,)。這些函數 返回確切的系列類型,因此不再需要鑄造。這在“操縱系列”一節中有詳細描述。 Upgrading from Version to Version 版本 3.0.0 的主要變化是,系列基類現在已經作為模板類,模板參數是系列操作的點類 型。如果您沒有通過提供新的系列類型擴展控件, 這將不會在您的代碼中有所不同。 如果你 提供了一

35、個新的系列類型,你的類必須繼承 CCharSerieBase 并提供它操作的點的類型。如 果你的系列使用只有 X 和 Y 值的點,你可以簡單地繼承 CChartXYSerie 。看看現有的系列 更多的例子。 另一個小的修改是標簽提供程序現在也是模板類(出于同樣的原因)。并且監聽系列中 的鼠標事件現在從圖表上的鼠標事件中分離出來。 這兩點在“在點上添加標簽”部分和 “鼠 標事件通知”部分中有很好的解釋。 最后, CChartAxis : SetAutomatic 方法已被標記為已棄用,您應該使用 CChartAxis : SetAutomaticMode (已經引入了一個額外的自動模式)。 例子

36、 本節只是兩個代碼片段,顯示了如何使用控件。第一個片段再現了示波器示例的圖像 (參見本文頂部) ,第二個示例再現了“ 2008 年收入”圖像。 代碼是文檔化的,所以它不 應該太難理解。 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論