国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Pro/E二次開發(fā)中Edit Control控件中文輸入問題的解決方案

2011-06-23 03:02黃海英穆立茂
裝備制造技術(shù) 2011年12期
關(guān)鍵詞:二次開發(fā)控件對話框

張 靖,黃海英,穆立茂

(解放軍軍械工程學(xué)院,河北 石家莊 050003)

Pro/TOOLKIT開發(fā)工具包,是Pro/ENGINEER(簡稱Pro/E)提供的實現(xiàn)參數(shù)化設(shè)計的應(yīng)用程序接口(API)。其封裝了許多針對Pro/E底層資源調(diào)用的庫函數(shù)與頭文件,借助第三方編譯環(huán)境(如VC等)進行調(diào)試,可以開發(fā)出能夠與Pro/E的無縫連接的應(yīng)用程序[1]。

對話框是實現(xiàn)人機交互的重要通道。目前對話框的開發(fā)方式有兩種:UI對話框和MFC對話框。雖然利用Pro/TOOLKIT提供的UI對話框與Pro/E界面風(fēng)格相一致,但不足之處是用文本文件的形式定義對話框,不能直觀地反映界面的布局。而MFC是VC++程序的一個重要軟件資源,使用MFC可以充分利用VC++開發(fā)環(huán)境的先進技術(shù)的工具,實現(xiàn)程序界面的可視化設(shè)計,與UI對話框相比,使用MFC的對話框界面布局上更為容易,設(shè)計、修改和調(diào)試更為方便。

1 問題的提出

MFC對話框的顯示方式分為兩種:模態(tài)對話框和非模態(tài)對話框。

模態(tài)對話框(Mode):在模態(tài)對話框激活狀態(tài)下,不允許用戶再選擇或激活其他窗口,只有在模態(tài)對話框關(guān)閉之后,用戶才能對其他窗口進行操作。模態(tài)對話框的設(shè)計比較簡單,但在Pro/E中使用有些不配套。

非模態(tài)對話框(Modeless):在非模態(tài)對話框激活狀態(tài)下,用戶可以激活其他窗口,激活其他窗口之后,非模態(tài)對話框處于非活動狀態(tài);只要用鼠標重新選中非模態(tài)對話框,就可以激活它。

非模態(tài)對話框使用更為靈活。模態(tài)對話框激活時,不能使用其他窗口,這與Pro/E的慣例不相符,從而使得有些功能無法實現(xiàn),比如查詢長度時需要和主界面交互數(shù)據(jù)。因此,一般情況下,我們使用MFC的非模態(tài)對話框。

編輯控件(Edit Control)是對話框?qū)崿F(xiàn)鍵盤輸入的重要的人機交互接口。通過編輯控件,用戶可以輸入文本信息,并將輸入信息轉(zhuǎn)換為各種類型的數(shù)據(jù)。然而由于Pro/E對中文的支持得不夠完善,在使用Edit Control控件編程過程中,當(dāng)此控件位于非模態(tài)對話框中時不能輸入中文。

針對這個問題,在《Pro/ENGINEER二次開發(fā)技術(shù)基礎(chǔ)》著作中提出了一種解決方案[3],就是建立模態(tài)對話框,然后在模態(tài)對話框中使用Edit Control控件,這樣就可以接收中文輸入了,也就是通過模態(tài)對話框進行中轉(zhuǎn)。然而這種方案存在兩方面不足:

一是與Pro/E軟件的整體風(fēng)格不一致,其軟件的風(fēng)格是絕大多數(shù)對話框使用非模態(tài)對話框。

二是此模態(tài)對話框不是純粹的模態(tài)對話框。雖然采用的是模態(tài)對話框,但Pro/E主窗口仍然能接收到鼠標消息。比如:在打開模態(tài)對話框的環(huán)境下,如果不小心單擊了Pro/E主窗口上的“新建”按鈕,雖然“新建”功能不會立即執(zhí)行,但是當(dāng)退出模態(tài)對話框后,“新建”功能會馬上實現(xiàn),也就是會立刻彈出一個“新建”對話框。所以在Pro/E環(huán)境下基于MFC開發(fā)的模態(tài)對話框,不是真正意義上的模態(tài)對話框。因此這種方案還不夠理想,下面提供另外一種解決方案。

2 解決方案

首先進行問題分析,出現(xiàn)在非模態(tài)對話框中Edit Control控件不能接收中文的這種情況的原因是:輸入的文本先被Pro/E翻譯,然后才傳到對話框資源中,在這個轉(zhuǎn)換過程中,就會出現(xiàn)亂碼。

因為使用的是非模態(tài)對話框,而使用模態(tài)對話框就不會出現(xiàn)這個問題。因為非模態(tài)對話框和Pro/E的主對話框是同時進行工作的,這個時候如果響應(yīng)一個消息,是Pro/E的主窗口首先響應(yīng)這個消息,然后經(jīng)過翻譯,才傳到開發(fā)者設(shè)計的對話框當(dāng)中,所以是在這個轉(zhuǎn)換過程中出現(xiàn)了BUG,造成顯示結(jié)果是亂碼。

下面就提供一種解決方案:

(1)第一步。為Edit Control控件的EN_SETFOCUS消息添加消息處理函數(shù),代碼如下:

(2)第二步。為Edit Control控件的EN_KILLFOCUS消息添加消息處理函數(shù),代碼如下:

當(dāng)點擊Edit Control控件時,也就是輸入的焦點放到了Edit Control控件上面,這時就產(chǎn)生一次EN_SETFOCUS消息,在這個消息處理函數(shù)中,建立一個新的消息循環(huán),這個消息循環(huán)是不經(jīng)過Pro/E主程序的當(dāng)前的消息循環(huán),這時候輸入的數(shù)據(jù)直接進入對話框當(dāng)中,不經(jīng)過再進行翻譯。

當(dāng)離開Edit Control控件結(jié)束了輸入操作,這時就產(chǎn)生一次失去焦點EN_KILLFOCUS消息,在這個消息處理函數(shù)中,使用PosTQuiTMessage(0)命令,結(jié)束開發(fā)人員建立的消息循環(huán)。也就是當(dāng)點擊開始輸入的時候和退出輸入的時候,這之間建立了一個消息循環(huán),使得輸入的文字直接傳遞到對話框當(dāng)中。圖1是此解決方案在齒輪參數(shù)化設(shè)計程序中的應(yīng)用實例(實例是使用Pro/E 4.0版本搭配Visual Studio 2008進行開發(fā)的)。

圖1 Pro/E參數(shù)化設(shè)計生成內(nèi)齒輪界面

3 結(jié)束語

Pro/TOOLKIT是Pro/E系統(tǒng)中功能強大的二次開發(fā)工具,使用Pro/TOOLKIT進行專業(yè)化應(yīng)用程序設(shè)計、創(chuàng)建和調(diào)試是一種最佳的選擇。此文針對Pro/E的一個BUG提出了一種有效的解決方法,為開發(fā)過程中遇到的Edit Control控件不能錄入中文的問題提供了一種新思路。

[1]李世國.Pro/Toolkit程序設(shè)計[M].北京:機械工業(yè)出版社,2003.

[2]Parametric Technology Corporation.Prop ToolkiTUser’s Guide[M].USA:Parametric Technology Corporation,2004.

[3]吳立軍.Pro/ENGINEER二次開發(fā)技術(shù)基礎(chǔ)[M].北京:電子工業(yè)出版社,2006.

猜你喜歡
二次開發(fā)控件對話框
基于.net的用戶定義驗證控件的應(yīng)用分析
正?;謴?fù)虛擬機
西門子Operate高級編程的旋轉(zhuǎn)坐標系二次開發(fā)
淺談Mastercam后處理器的二次開發(fā)
Bootlace Worms’Secret etc.
What Is Beauty?
關(guān)于.net控件數(shù)組的探討
西門子Easy Screen對倒棱機床界面二次開發(fā)
淺談VB的通用對話框《CommonDialog》控件的使用
ANSYS Workbench二次開發(fā)在汽車穩(wěn)定桿CAE分析中的應(yīng)用