ST_Curve是一個(gè)專業(yè)的折線、曲線繪制控件,它有幾個(gè)特點(diǎn):
一:它是個(gè)AcitveX,所以只能運(yùn)行在windows平臺(tái),只要能用控件的地方,就能用;
二:它是個(gè)ActiveX,所以具有ActiveX的所有特點(diǎn),比如需要注冊(cè)等,此處省略若干字;
三:它幾乎沒有模型(比如說圓模型,提供圓點(diǎn)和直徑,理論上就可以畫出來,但ST_Curve不行),
所有的點(diǎn)都必須要提供,所以特別適合有現(xiàn)成數(shù)據(jù)的場(chǎng)合,比如工控行業(yè)數(shù)據(jù)采集;
四:它面向二次開發(fā)者,開發(fā)語言不限,只要能使用AcitveX即可;
五:它采用MFC開發(fā),所以需要MFC運(yùn)行庫的支持;
六:雖然它只繪制折線、曲線,但由于支持填充,可以輕松的繪制柱狀圖。
目前提供的版本有(均為unicode版本,MFC庫請(qǐng)用我提供的):
一:32位2000-xp,位于“2000-xp”文件夾,vc2003編譯,依賴MFC71運(yùn)行庫;
二:32位xp_sp2-win7,位于“xp_sp2-win8\xp_sp2-win7”文件夾,vc2012編譯,依賴MFC110運(yùn)行庫;
三:32位vista-win8,位于“xp_sp2-win8\vista-win8”文件夾,vc2012編譯,依賴MFC110庫;
四:64位xp_sp2-win7,位于“xp_sp2-win7”文件夾,vc2012編譯,依賴MFC110運(yùn)行庫;
五:64位vista-win8,位于“vista-win8”文件夾,vc2012編譯,依賴MFC110庫;
六:上面二至五版本的double版本和英文版本;
七:其它不提供的版本請(qǐng)向我索取,如果有需要的話。
關(guān)于double版本的由來
控件中的坐標(biāo)格式是([DATE, float],參看AddMainData2接口),這樣的簽名,在非vc開發(fā)環(huán)境中,將被映射為
時(shí)間類型,比如DateTime,那么當(dāng)橫坐標(biāo)顯示為數(shù)值的時(shí)候,其原始數(shù)據(jù)類型也往往是數(shù)值類型,此時(shí)怎么調(diào)用接口呢?
答案是將數(shù)值型數(shù)據(jù)轉(zhuǎn)成double類型數(shù)據(jù),再通過DateTime的FromOADate函數(shù),得到一個(gè)DateTime對(duì)象,再調(diào)用接口。
在這個(gè)轉(zhuǎn)換過程中,很明顯有一個(gè)缺陷:時(shí)間對(duì)象的范圍是double范圍的一個(gè)子集,不是所有的double都能轉(zhuǎn)換成
時(shí)間對(duì)象。這就是double版本的由來,我通過修改控件的idl文件,將坐標(biāo)類型改為[double, float],這樣就解決了
時(shí)間對(duì)象范圍相對(duì)較小的問題(因?yàn)榭梢灾苯邮褂胐ouble類型數(shù)據(jù)了)。此時(shí)又帶來另一個(gè)問題,如果我橫坐標(biāo)顯示為
時(shí)間(其原始數(shù)據(jù)往往也應(yīng)該是時(shí)間類型),如何使用double版本控件呢?答案是調(diào)用DateTime的ToOADate函數(shù),得到
一個(gè)double值再調(diào)用接口。換句話說,時(shí)間版的控件能做的事,double版的都能做!那為什么還要保留時(shí)間版呢?因?yàn)?br>時(shí)間版更容易理解(在橫坐標(biāo)顯示為時(shí)間的時(shí)候)。
vc開發(fā)的同仁們用時(shí)間版本,就能解決一切問題了,因?yàn)樵趘c中,坐標(biāo)被映射為[DATE, float],而DATE就是double,
所以在vc下面,兩個(gè)版本是完全一樣的,區(qū)別僅僅是在字面上,[DATE, float] VS [double, float]實(shí)質(zhì)上是完全一回事!
正是因?yàn)镈ATE和double的一致性,我的double版才是double版,而不是float版或者int版,我可以保證我的代碼在兩個(gè)
版本下面完全一樣,只是idl文件不一樣。
目錄組織
32目錄下面是所有32位版本,64目錄下面是所有64版本;
32和64目錄下的demo里面是示例源代碼,32的工程是vc6,64的工程是vc2012,用vc6打開工程時(shí),如果出現(xiàn)無法編譯的情況,
則原因一般是因?yàn)闆]有安裝unicode庫的問題,解決辦法有二:一是換到多字節(jié)版本編譯,二是為vc6添加unicode庫(修復(fù)安裝)
32目錄下的demo只能編譯出32位例程,64目錄下的demo可以編譯出32位和64位例程。
使用64位控件時(shí),會(huì)有一些問題(64位控件本身的問題,與ST_Curve無關(guān)),你仍然需要注冊(cè)32位版本到開發(fā)機(jī)器上,否則在
vc中可能看不到控件,MFC71和MFC110是MFC運(yùn)行庫,當(dāng)控件無法注冊(cè)的時(shí)候,可能是缺少這些庫。
depends是一個(gè)依賴檢測(cè)工具,有32和64位兩個(gè)版本,由微軟開發(fā)的,當(dāng)出現(xiàn)控件無法注冊(cè)時(shí),可以用它來看看缺少哪些庫,
關(guān)于這個(gè)工具的使用,請(qǐng)網(wǎng)上搜索。
common目錄中,ST_Curve.h是控件導(dǎo)出函數(shù)的申明(配合各個(gè)版本目錄下的ST_Curve.lib,可實(shí)現(xiàn)靜態(tài)加載),控件是有導(dǎo)出函數(shù),
此時(shí)它就完全是一個(gè)普通dll了,具體請(qǐng)參看開發(fā)文檔。ST_Curve_PlugIn.h是控件支持的插件的函數(shù)申明,要開發(fā)插件,必須按照
這里面的定義實(shí)現(xiàn)相應(yīng)的函數(shù)。ST_Curve_PlugIn.lua是我寫的一個(gè)簡單使用Lua的例子,TestST_Curve2這個(gè)demo里面有使用(加載
時(shí)注意路徑問題,demo里面采用的是相對(duì)路徑)。插件分為dll和Lua兩種,具體請(qǐng)參看開發(fā)文檔。
相關(guān)搜索:數(shù)據(jù)曲線繪制軟件 曲線