摘要:本文提出了基于ActiveX的多通道數據曲線編輯控件的設計思想,并詳細討論了其具體實現方法。同時給出了該控件的應用實例,說明了使用該控件的優越性。
關鍵詞:ActiveX 控件 多通道數據 曲線編輯
Realization of a Multichannel Data Curve Edit Control Based on ActiveX
Peng LiHui Wu HongXiu
(Huazhong University of Science and Technology 430074)
Abstract: This paper proposes a design thought of multichannel data curve
edit control based on ActiveX, then discussed the realization of the control in
detail , An example of using this control is given, and the advantage of it is
discussed too.
KeyWords: ActiveX , Control, Multichannel Data, Curve Editor
1 引言
隨著計算機軟、硬件技術的迅速發展,越來越多的用戶開始使用計算機來觀察和處理數據。在常見的各種數據采集裝置中,最后得到的數據通常是以16位二進制的格式存放在一個純文本的文件中。眾所周知,人的大腦在圖形識別方面特別敏感,當數據以圖形形式顯示時,用戶可以很快的從中提取所需的信息。對于數據的曲線顯示與編輯的要求也應運而生,同時也出現了一些相關的控件,但這些控件通常沒有考慮到來自多個通道的數據曲線顯示問題,也沒有提供標尺,而在實際應用中,這些對于用戶都是非常重要的。如我們在研究大腦神經網絡時,就需要一個能顯示、分析多通道數據的控件。本文將詳細討論一個基于ActiveX的數據曲線編輯控件LabCurve.ocx的具體實現方法。
2 ActiveX控件
ActiveX是一種標準,利用這個標準可以使通過不同語言開發的軟件構件在單機或網絡環境中相互操作。同時,ActiveX也是以組件對象模型為基礎的開放技術的集合,它代表了應用程序與internet的一種集成策略。ActiveX
組件最常用的有三種:控件(Control)、自動化服務器(Automation
Server)和文檔(Document)。ActiveX控件作為一種可重用的組件,相當于一個封裝好的代碼模塊,通過其方法、屬性、事件與應用程序進行通信。ActiveX控件是一種特殊的OLE控件,它不僅可以在支持OLE
控件的容器中使用,更可以作為一個internet
控件,直接成為網頁的一部分。ActiveX控件的開發可以用各種語言,如:VB、VC等,ActiveX控件的使用也可以是不同的語言和工具,如Delphi、IE等。
3 控件的主要功能
3.1數據的采集
不管所用的數據采集裝置為何種,只要數據采集裝置通過與硬件相配套的軟件將數據存放在一個緩沖區,即可調用Record方法將數據保存在所選的文件中。數據文件以16位二進制的格式存放所采集到的數據,為保持控件的通用性,文件中并不包含通道數等與采集相關的信息。
3.2數據的波形顯示
用戶可以根據自己的研究需要,動態調整實際顯示的通道數。并可將不同通道的數據的幅度以不同的比例縮放,在不同的幅度范圍內觀察?;跀祿嵌嗤ǖ劳瑫r采集的,為方便研究數據的時間相關性,所有通道均以相同的時間比例顯示相同時間區域的數據。當然,顯示時間比例和時間區域都是可調的。為突出觀察某些重要通道,還可調整每一通道的顯示區域大小。同時,還可動態調整整個控件窗口的尺寸大小,便于來自不同文件的數據進行比較。
為使數據的觀察與分析更加直觀,在顯示區里,添加了兩個標尺,每個標尺都帶有一個可上下拖動的文本框??勺笥彝蟿訕顺?,從標尺的文本框中迅速得到任意一點所在的時間和幅度大小,并可通過兩個標尺進行簡單的數據分析,例如通過兩個標尺的時間差和兩個標尺間的周期數得到兩個標尺間數據的頻率。同時,還可以通過標尺的小橫線直觀看出所在點幅度在整個曲線幅度中所處位置。
3.3數據的編輯
用戶可以隨時將兩個標尺移到當前的顯示區域,也可迅速將曲線恢復最初的顯示比例。我們還提供了將鼠標所選擇的區域進行數據曲線的剪切、復制和粘貼的功能。另外,還提供了曲線波形的打印功能,可將數據曲線按當前的顯示比例打印出來,以方便進一步的分析與研究。
4 基于ActiveX的實現
VC++5.0提供了四種開發ActiveX的選擇:MFC、ActiveX模板庫、BaseControl框架和建立自己的框架。最簡便快捷的便是使用MFC。只需從File菜單中選擇New命令打開New對話,在Projects選項卡中單擊代表MFC
ActiveX ControlWizard的圖標。在后續步驟中,默認其選擇,ControlWizard提問完畢后,基本的框架代碼已經生成。
然而,我們還需要為控件添加屬性、方法和消息處理程序函數,以實現所要求的功能。屬性是控件和包容器內部的公共數據,它可以用來向對方描述自己。包容器可以讀取該控件的屬性,來了解它當前的狀態,如果控件允許的話,還可以重寫屬性,以改變控件的行為。LabCurve的屬性大部分為自定義屬性。所謂自定義屬性就是控件設計者想展現給包容器的數據。包容器通過調用MFC中作為Get和Set方法的函數來讀寫控件的屬性,這些方法是由該控件導出的。用戶在按鼠標右鍵所彈出的對話框中可以讀取或改變相應權限的LabCurve的自定義屬性。方法為ActiveX控件展現給包容器應用程序的函數,允許客戶調用。消息處理函數完成了對外部動作的反應和控件的繪制,是整個控件的核心部分。
4.1數據采集的實現
在Windows 環境下,由于Windows的多任務性和數據采集的速度要求,同時考慮到當掉電時,所采集到的數據不應丟失,數據的采集應使用多線程。也就是說在一個線程中,通過與采集硬件相配套的軟件將數據存放在一個緩沖區,在另一個線程中調用LabCurve
的Record方法將數據保存在所選的文件中。文件名由FileName屬性決定。文件中的數據依次來自各通道,例如,采集通道0~通道2的數據,則文件中的數據依次來自通道:0、1、2、0、1、2、0
……
4.2多通道數據波形顯示的實現
由于文件中并不包含與采集相關的信息,因此需要設置通道數、采樣頻率和各通道的增益大小,即通過改變控件的屬性nChannelNum、nSampleFre和nGain,達到使控件能正確的從文件中讀取和顯示信息的目的。為突出重點,用戶還可改變nChannelDisp屬性,以動態調整通道的顯示數目。
在控件內部,定義了n個數組(n=nChannelNum)。每個數組依通道數輪流從文件中讀取數據,代表來自于一個通道的數據。所讀取數據在文件中的位置由當前顯示的時間區域決定,即由XleftLimit和XRightLimit屬性決定。
為了使不同通道的數據的幅度可以按不同的比例縮放,在不同的幅度范圍內觀察。在控件內部,每個通道都有一個有關幅度顯示區域的SCROLLINFO類型和有關幅度縮放比例的成員變量。當用戶改變某一通道的YTopLimit(Y軸頂端幅度)、YBottomLimit
(Y軸底端幅度)屬性,或按動垂直滾動條和垂直拉縮鈕,就會引起相應通道變量的變化,從而使顯示達到所需要求。
基于所有通道均以相同的時間比例顯示相同時間區域的數據??丶炔恐挥幸粋€有關時間顯示區域的SCROLLINFO類型和有關時間縮放比例的變量成員。用戶改變XLeftLimit、YRightLimit屬性,或按動水平滾動條和水平拉縮鈕,即會起這些變量的相應變化,從而使顯示達到所需要求。
為調整整個控件窗口的尺寸大小,在控件中構造了一個具有SBS_SIZEBOX樣式的特殊滾動條,并對WM_SIZE消息進行了處理。當父窗口尺寸大小改變時,也可調用控件的Size方法使控件窗口的大小作出相應變化。
通過有關標尺的屬性和nActiveChannel(當前通道)屬性以及對鼠標消息的處理,使標尺能對用戶動作作出正確反應。
采用對WM_SETCURSOR消息進行處理的方法,使得當拖動標尺、改變顯示區域大小、改變控件窗口大小時,鼠標形狀都會相應改變。
用戶還可以根據自己的喜好,改變有關顏色、字體和X -Y軸坐標顯示等屬性,調整控件的外觀顯示。
4.2數據曲線編輯的實現
在進行數據曲線的剪切、復制、粘貼時,使用了Windows的剪貼板。應注意如果位圖被選進設備環境中,那么它就不能再被送到剪貼板中。在此,我們使用了兩個位圖解決了這一問題。
我們對OnDraw()和OnPaint()函數都重新進行了設計,在控件的Print方法和OnPaint()函數中都調用了OnDraw()函數,使得數據曲線按當前的顯示比例打印出來。
5 應用實例
圖1 使用LabCurve控件的例子:神經網絡電生理信息采集與分析系統
我們使用VC++5,利用LabCurve.ocx完成了一個神經網絡電生理信息采集與分析系統。如圖1所示,窗口的中間即為LabCurve控件。此系統完成了神經網絡電生理信息的采集、保存、顯示和一系列的分析。由于使用了LabCurve控件,省去了一些繁瑣的工作,使整個結構顯得相當明了。我們所開發的細胞圖像分析系統、膜片鉗系統都采用了這個控件,有效提高了工作效率,縮短了整個的開發過程。
6 結束語
本文詳細介紹了基于ActiveX的多通道數據曲線編輯控件LabCurve.ocx的實現方法,并給出了其應用實例。ActiveX
控件作為可重用代碼組件,不僅應用廣泛,還可節約開發時間。ActiveX
控件將大量的細節隱藏起來,以簡明的接口與用戶交互,易于使用。對ActiveX技術的研究將成為新的熱點和潮流。
參考文獻:
1. Beck Zaratian . Microsoft Visual C++ 6.0程序員指南. 北京:希望電腦公司.
1998
2. Jerry Anderson. Visual C++5 Activex 編程指南.北京:清華大學出版社.
1998
3. Peter Norton, Rob McGregor. MFC開發 Window 95/NT 4 應用程序.
北京:清華大學出版社.1998