ST_Curve是一個專業的折線、曲線繪制控件,它有幾個特點:
一:它是個AcitveX,所以只能運行在windows平臺,只要能用控件的地方,就能用;
二:它是個ActiveX,所以具有ActiveX的所有特點,比如需要注冊等,此處省略若干字;
三:它幾乎沒有模型(比如說圓模型,提供圓點和直徑,理論上就可以畫出來,但ST_Curve不行),
所有的點都必須要提供,所以特別適合有現成數據的場合,比如工控行業數據采集;
四:它面向二次開發者,開發語言不限,只要能使用AcitveX即可;
五:它采用MFC開發,所以需要MFC運行庫的支持;
六:雖然它只繪制折線、曲線,但由于支持填充,可以輕松的繪制柱狀圖。

目前提供的版本有(均為unicode版本,MFC庫請用我提供的):
一:32位2000-xp,位于“2000-xp”文件夾,vc2003編譯,依賴MFC71運行庫;
二:32位xp_sp2-win7,位于“xp_sp2-win8\xp_sp2-win7”文件夾,vc2012編譯,依賴MFC110運行庫;
三:32位vista-win8,位于“xp_sp2-win8\vista-win8”文件夾,vc2012編譯,依賴MFC110庫;
四:64位xp_sp2-win7,位于“xp_sp2-win7”文件夾,vc2012編譯,依賴MFC110運行庫;
五:64位vista-win8,位于“vista-win8”文件夾,vc2012編譯,依賴MFC110庫;
六:上面二至五版本的double版本和英文版本;
七:其它不提供的版本請向我索取,如果有需要的話。
關于double版本的由來
控件中的坐標格式是([DATE, float],參看AddMainData2接口),這樣的簽名,在非vc開發環境中,將被映射為
時間類型,比如DateTime,那么當橫坐標顯示為數值的時候,其原始數據類型也往往是數值類型,此時怎么調用接口呢?
答案是將數值型數據轉成double類型數據,再通過DateTime的FromOADate函數,得到一個DateTime對象,再調用接口。
在這個轉換過程中,很明顯有一個缺陷:時間對象的范圍是double范圍的一個子集,不是所有的double都能轉換成
時間對象。這就是double版本的由來,我通過修改控件的idl文件,將坐標類型改為[double, float],這樣就解決了
時間對象范圍相對較小的問題(因為可以直接使用double類型數據了)。此時又帶來另一個問題,如果我橫坐標顯示為
時間(其原始數據往往也應該是時間類型),如何使用double版本控件呢?答案是調用DateTime的ToOADate函數,得到
一個double值再調用接口。換句話說,時間版的控件能做的事,double版的都能做!那為什么還要保留時間版呢?因為
時間版更容易理解(在橫坐標顯示為時間的時候)。
vc開發的同仁們用時間版本,就能解決一切問題了,因為在vc中,坐標被映射為[DATE, float],而DATE就是double,
所以在vc下面,兩個版本是完全一樣的,區別僅僅是在字面上,[DATE, float] VS [double, float]實質上是完全一回事!
正是因為DATE和double的一致性,我的double版才是double版,而不是float版或者int版,我可以保證我的代碼在兩個
版本下面完全一樣,只是idl文件不一樣。
目錄組織
32目錄下面是所有32位版本,64目錄下面是所有64版本;
32和64目錄下的demo里面是示例源代碼,32的工程是vc6,64的工程是vc2012,用vc6打開工程時,如果出現無法編譯的情況,
則原因一般是因為沒有安裝unicode庫的問題,解決辦法有二:一是換到多字節版本編譯,二是為vc6添加unicode庫(修復安裝)
32目錄下的demo只能編譯出32位例程,64目錄下的demo可以編譯出32位和64位例程。
使用64位控件時,會有一些問題(64位控件本身的問題,與ST_Curve無關),你仍然需要注冊32位版本到開發機器上,否則在
vc中可能看不到控件,MFC71和MFC110是MFC運行庫,當控件無法注冊的時候,可能是缺少這些庫。
depends是一個依賴檢測工具,有32和64位兩個版本,由微軟開發的,當出現控件無法注冊時,可以用它來看看缺少哪些庫,
關于這個工具的使用,請網上搜索。
common目錄中,ST_Curve.h是控件導出函數的申明(配合各個版本目錄下的ST_Curve.lib,可實現靜態加載),控件是有導出函數,
此時它就完全是一個普通dll了,具體請參看開發文檔。ST_Curve_PlugIn.h是控件支持的插件的函數申明,要開發插件,必須按照
這里面的定義實現相應的函數。ST_Curve_PlugIn.lua是我寫的一個簡單使用Lua的例子,TestST_Curve2這個demo里面有使用(加載
時注意路徑問題,demo里面采用的是相對路徑)。插件分為dll和Lua兩種,具體請參看開發文檔。