李華君,楊 震,張曉峰
(中國船舶重工集團公司第七二四研究所,南京 211153)
基于MFC消息機制與Direct3D的雷達目標顯示實現
李華君,楊 震,張曉峰
(中國船舶重工集團公司第七二四研究所,南京 211153)
針對現代雷達綜合化和信息化的發展趨勢,為滿足對雷達目標的多功能處理以及顯示容量提升的需求,提出了一種在MFC構架下結合DirectX圖形技術實現較大數量目標顯示控制的方法。該方法使用Window控件來封裝雷達目標類,利用控件的實現及其消息映射機制簡化目標在終端顯示時的生成、選取、更新、刪除及疊加等功能處理中的計算和消息響應過程,同時采用Direct3D技術降低目標的繪制和刷新時間,提高了目標的顯示批數。
MFC;消息映射機制;Direct3D;雷達目標顯示
雷達終端用來顯示雷達所獲取的目標信息和情報,顯示內容包括目標的位置、坐標及其運動情況,以及目標的特征參數等。早期的雷達終端主要采用模擬技術來顯示雷達的原始圖像。隨著數字技術的飛速發展、雷達功能的擴展及信息化程度的提高,現代雷達的終端顯示也發生了較大的變化。除了顯示雷達原始視頻外,還要顯示處理后的雷達數據,生成直觀可見的界面目標圖示,同時對其進行各種功能的處理和操作。智能化及綜合一體化的武器裝備發展趨勢進一步要求雷達終端不僅需要顯示本雷達探測的信息情報,還需要顯示信息化組網后多源提供的各種信息。雷達終端顯示日趨復雜,對目標顯示的實時性和可操作性提出了更高的要求。在同等硬件資源支撐下,如何便捷地對目標進行管理、對目標顯示進行優化,提升顯示的目標數量,成為需要解決的一項課題。隨著軟件開發技術的發展,為設計者在Windows系統下使用軟件實現終端顯示提供了更多的技術手段和設計自由度,用以解決雷達終端顯示設計中所面臨的挑戰[1]。
著眼于雷達終端顯示中雷達目標的實現,通過對比以往設計中的軟件技術方法,改進設計思路,本文提出了一種在MFC構架下結合DirectX圖形技術將界面目標管理功能實現簡化和提升目標顯示數量的方法。
1.1 MFC概述
MFC是一個架構在Windows API之上的C++類庫,意圖使Windows程序設計更加高效簡便,其實現基于程序的自動初始化、執行時類型識別、動態生成、消息映射及命令繞行等關鍵技術。盡管Windows下的代碼實現被逐步向.NET框架下引導,其對編程語言、代碼通用性、體系架構、內存管理等諸多方面拓展了相關概念和技術,對原有的架構進行重組和優化,但對于面向對象API的封裝、動態生成及消息映射等技術和思想卻依然沿襲[3]。
Windows程序基于事件驅動,靠消息的流動而維護生命。在MFC之中只要是CCmdTarget類的繼承類,都納入其消息傳遞的機制中,為每個類型的消息建立相應的消息映射表,并且將基礎類別和衍生類別的消息映射表串接起來。在此基礎上,MFC通過一系列的宏定義將消息縱向或橫向的傳遞映射到不同類的成員函數進行處理,如圖1所示。

圖1 MFC消息映射機制示意圖
同時,MFC封裝了大量的類和控件可供設計者使用,如CWnd類以及其繼承類CStatic等。CStatic類的資源實體以控件的形式存在,其類實現和對消息機制的響應可為雷達目標類的封裝和實現使用。
1.2 DirectX簡介
DirectX是Microsoft公司開發的運行于計算機平臺的多媒體控制處理引擎。基于DirectX API 設計開發的多媒體軟件運行于硬件抽象層上,即充分利用了系統硬件的加速功能,又隱藏了硬件相關的設備特性,通過編寫可兼容不同設備特性的高效代碼,提高運行效率。
Direct3D是DirectX 技術的重要組成部分,是一種軟件接口。它通過提供對顯示存儲的直接訪問, 以及快速實現硬件的位塊轉移和緩存翻轉性能, 從而加速硬件和軟件圖形的實時處理。除了能直接對顯示設備存取外, Direct3D還保持同Windows 圖形設備接口GDI、基于Windows環境的應用程序和設備驅動程序兼容的特性,并提供了一種與設備無關的方法以獲得訪問特定的顯示設備、 高級特性的能力[2]。
GDI+ 是一個Windows系統組件, 在GDI的基礎上實現的一個抽象層, 允許標準的Windows應用程序向屏幕繪畫。GDI+的缺點是其提供的是對內存而不是對視頻存儲器中的一個視頻緩存的訪問, 因此不能利用某些視頻卡所提供的特殊性能。由于GDI+建立在Windows的一個較高層面上,系統調用的開銷難免增加。另一方面, Direct3D可以提供代表實際視頻存儲器的繪畫圖面。 這就意味著當使用Direct3D時可以直接寫到視頻卡上的存儲器中, 使用圖形例程極快。 這些圖面被表示為存儲器中相鄰的存儲塊, 從而可以很容易地對存儲器執行尋址操作。
Direct3D、GDI+、硬件抽象層HAL 、硬件仿真層HEL 和硬件之間的關系如圖2所示。

圖2 Direct3D、GDI+和硬件關系示意圖
目前,相當數量應用軟件轉到了Windows 平臺上。在Windows 平臺上,開發網絡、數據庫集成的多功能圖形顯示處理程序,對合理分配系統資源、維持程序高效運行并提高程序的復用性、節約開發時間提出了較高的要求。另一方面,隨著信息化武器裝備的發展,雷達終端不僅需要處理自身探測的目標,還需要和各種信息源傳遞大量數據。信息內容的增加、信息交互的密集體現在雷達終端需處理的目標批次的提升,加快了目標的生成、分裂、合批、刪除及上報等操作和處理的頻率。
由于Windows系統的特殊性,接管了所有的系統資源,對設備的操作實際上是對Windows 功能的調用,雖提高了代碼設備無關性、可移植性和可復用性,但調用Windows 的API函數比直接操作硬件耗時增加。對于某些應用程序來說,這種影響可能不太明顯,特別是在目前機器性能飛速提高的情況下更是如此。但是,對于目前部分裝備中對實時性較高的終端顯示處理來說,在對大量的目標顯示和數據處理時,若每次都去調用API 函數,耗時將會影響軟件的實際應用。
針對上述面臨的需求和問題,通過結合MFC構架中控件的消息響應機制和DirectX繪圖方法封裝構造目標類,利用控件實現目標生命周期中的管理、目標操作和處理中的輸入響應,而將目標的繪制和顯示交由Direct3D來完成,以達到簡化目標設計,提高目標處理容量的目的。
2.1 Direct3D與GDI+的使用
基于MFC構建應用程序主體框架,在其文檔/視圖構架下,終端顯示畫面及目標的顯示在P顯視圖中完成。和以往不同的是,考慮到Direct3D在二維曲線繪制和文字處理方面的欠缺,對雷達終端畫面中除目標外的靜態顯示內容依然采用GDI+進行繪制,處理方式如下:
(1) 在GDI+的原生模式下,在MFC應用程序中加載GDI+動態鏈接庫,在P顯視圖窗口中完成GDI+的初始化;
(2) 在P顯視圖窗口刷新函數OnDraw()中使用GDI+接口完成所需顯示內容的繪制;
(3) 將繪制的窗口以位圖或其他文件形式加以存儲;
(4) 創建Direct3D紋理對象,將GDI+繪制的圖像文件作為紋理加以載入。
一般情況下,P顯視圖窗口函數OnDraw()作為視圖的刷新接口,而在上述實現方式中僅作為利用GDI+繪制優勢形成所需靜態位圖的生成接口,用以提供Direct3D顯示的底圖紋理,當位圖文件生成后阻斷其常規刷新功能。P顯視圖窗口的刷新將由Direct3D函數OnRender()完成。
下面介紹在P顯視圖的實現中如何引入Direct3D。
(1) 創建Direct3D對象并得到Direct3D接口,對相關參數進行配置和初始化;
(2) 創建Direct3D設備對象并得到設備接口,將P顯視圖窗口的句柄綁定為Direct3D窗口句柄;
(3) 創建一個單獨的顯示線程用以處理Direct3D窗口的顯示和刷新函數OnRender()。
采用上述實現,將P顯視圖窗口的句柄綁定為Direct3D窗口句柄,將其OnRender()函數作為P顯的刷新接口,解決了GDI+和Direct3D繪制同步問題。進一步采用單獨的線程處理顯示畫面的繪制和刷新,將刷新率較高的目標顯示畫面從程序主線程中分離出來,將合理分配和調度計算機的系統資源,利于在系統空閑時對畫面進行渲染和刷新。通過MFC視圖和Direct3D的結合使用,為目標提供了作為運行環境的父窗口,目標的生成、刪除、繪制及顯示均由此P顯父窗口負責。
2.2 雷達目標類的實現
目標的實現是雷達終端顯示畫面中的一個主體部分。在面向對象的設計中,通過構造和封裝目標類,將其添加于父視圖中,通過父窗口的繪制刷新和消息響應機制對目標進行管理和操作。可能遇到的問題是,目標的生命周期是一個動態過程,對目標的處理是相對復雜的。如果設計為將目標的產生、繪制、定位、更新、撤銷及疊加等所有管理都交由其父窗口處理,那么在進行目標選取時處理諸如如何識別目標和背景、目標疊加時如何進行識別和分離等問題時都需要進行檢索和大量的計算,在目標批次增加的情況下,程序的運行效率會受到一定影響。通過目標檢索算法的優化和目標封裝的改進,可以對此類問題加以改善,但對設計者提出了更高的要求。而利用Windows控件的消息響應機制,可以簡化在目標實現時的此類問題。
在Windows MFC的類別階層架構中,封裝了大量的用于圖形顯示的控件類。從其父類CWnd開始,通過類繼承以及類擴展,構造出圖形顯示所需要的各界面元素,同時為這些類的各種消息響應提供了相應的處理函數。在控件的使用中,可通過消息處理函數的重載以及改變消息傳遞的次序和線路來完成所需的功能。如圖3所示,通過控件類CStatic構造所需目標子類CMytarget,而將CMyView類作為CMytarget的父窗口。目標類CMytarget的實現方式主要分為如下幾步:
(1) 從Windows MFC類庫中的CWnd類或CStatic控件類派生出雷達目標類;
(2) 根據雷達目標的特性聲明和實現雷達目標類的相關變量以及創建、銷毀等接口函數;
(3) 重載從父類繼承的鼠標和鍵盤消息響應函數,使雷達目標類具有選取等操作的自處理響應功能;

圖3 目標類的消息映射示意圖
(4) 在目標類中聲明目標繪制的Direct3D位圖矩形頂點緩沖區,同時引入其父窗口P顯視圖中創建的Direct3D設備接口,進行目標繪制的頂點數據填充。在視P顯圖刷新接口OnRender()中,調用目標的D3D繪制接口,完成目標和父窗口的疊加繪制和刷新。
目標類完成實現后,目標的管理基于控件類的消息響應機制,而繪制和刷新將結合Direct3D技術。目標在作為運行環境的P顯父窗口中加以聲明,父窗口調用目標的相應成員函數,基于對控件的動態管理來實現目標的生成和銷毀等功能。同時,通過重載父窗口的PreTranslateMessage虛函數,使父窗口中的鼠標和鍵盤消息先由目標類自動截獲,從而將目標類的定位、更新及疊加等操作轉變為對控件的檢索、移動等處理。通過改變消息映射的流動線路,完成了對目標的自選取和自處理。消息處理完畢后再交還給父窗口,而目標的繪制通過父窗口的渲染函數處理完成。
為了對上述方法的有效性進行驗證,選用配置為Intel Pentium Dual 2.20GHz、內存為2GB的計算機進行了相關測試。分別使用GDI+、雙緩沖結合GDI+及Direct3D 三種方法對雷達目標進行實現。在不同目標批數下,每種方法的平均刷新時間如圖 4所示。

圖4 三種繪制方法刷新時間比較圖
從圖表數據分析不難得出, 在目標數量小于300批時,三種方法的刷新時間雖小有差異,但均可滿足刷新的實時性要求;目標數量達到500批時,使用GDI+繪制方法的時間斜率明顯增大,從現象上看目標刷新線程和UI主線程的時間沖突開始體現,程序的實時響應受到一定影響;當目標數量達到1000批時,用雙緩沖優化的GDI+繪制方法將無法達到要求,而采用Direct3D繪制方法的時間斜率較為平滑,可以處理近2000批目標。
基于MFC和DirectX結合的雷達目標實現方法,用Windows控件及其消息映射機制封裝出雷達目標類,簡化了目標的處理設計。可以通過進一步的優化,將此控件類實現為動態鏈接庫或是COM組件,提高目標類的可復用性和可擴展性。采用Direct3D實現目標類的繪制和刷新,有效地提升了目標處理的容量。而利用Direct3D的多層顯示、多緩沖及頁面切換等技術,也有利于將Direct3D實現的雷達一次視頻和目標顯示進行疊加實現。當然,在使用Windows控件的自處理優勢時目標類也變得較“大而重”,從圖4中也可看出,當目標批數進一步增加后,如何提高此方法的目標刷新率需進行進一步的探討。
[1] 丁鷺飛,耿富錄.雷達原理[M].3版.西安:西安電子科技大學出版社,2002.6.
[2] 陳卡,等.DirectX9 3D圖形程序設計[M].上海:上海科技出版社,2003.7.
[3] 侯俊杰.深入淺出MFC[M].2版.臺灣:松崗電腦圖資料股份有限公司,2002.10.
Implementation of radar target display based on MFC message mechanism and Direct3D
LI Hua-jun, YANG Zhen, ZHANG Xiao-feng
(No. 724 Research Institute of CSIC, Nanjing 211153)
In view of the integrated and information development trends of modern radars, a method of displaying and controlling large quantities of targets is presented based on the MFC and the DirectX graphic technology to satisfy the requirements of multi-function processing and display capacity upgrade of radar targets. The Window controls are used to encapsulate radar target class, and the realization of controls and the message mapping mechanism are utilized to simplify the calculation and message response process in the function processing such as generate, select, update, delete and overlap when targets are displayed on the terminal display. At the same time, the adoption of Direct3D technology decreases the refresh and plotting time of targets and increases the number of targets.
MFC; message mapping mechanism; Direct3D; radar target display
2014-05-28;
2014-06-12
李華君(1979-),工程師,碩士,研究方向:軟件應用;楊震(1979-),男,工程師,研究方向:系統集成;張曉峰(1979-),男,高級工程師,碩士,研究方向:軟件應用。
TN957.52
A
1009-0401(2014)03-0052-04