Pro/E二次开发中Edit Control控件中文输入问题的解决方案

2011-06-23 03:02黄海英穆立茂
装备制造技术 2011年12期
关键词:二次开发控件对话框

张 靖,黄海英,穆立茂

(解放军军械工程学院,河北 石家庄 050003)

Pro/TOOLKIT开发工具包,是Pro/ENGINEER(简称Pro/E)提供的实现参数化设计的应用程序接口(API)。其封装了许多针对Pro/E底层资源调用的库函数与头文件,借助第三方编译环境(如VC等)进行调试,可以开发出能够与Pro/E的无缝连接的应用程序[1]。

对话框是实现人机交互的重要通道。目前对话框的开发方式有两种:UI对话框和MFC对话框。虽然利用Pro/TOOLKIT提供的UI对话框与Pro/E界面风格相一致,但不足之处是用文本文件的形式定义对话框,不能直观地反映界面的布局。而MFC是VC++程序的一个重要软件资源,使用MFC可以充分利用VC++开发环境的先进技术的工具,实现程序界面的可视化设计,与UI对话框相比,使用MFC的对话框界面布局上更为容易,设计、修改和调试更为方便。

1 问题的提出

MFC对话框的显示方式分为两种:模态对话框和非模态对话框。

模态对话框(Mode):在模态对话框激活状态下,不允许用户再选择或激活其他窗口,只有在模态对话框关闭之后,用户才能对其他窗口进行操作。模态对话框的设计比较简单,但在Pro/E中使用有些不配套。

非模态对话框(Modeless):在非模态对话框激活状态下,用户可以激活其他窗口,激活其他窗口之后,非模态对话框处于非活动状态;只要用鼠标重新选中非模态对话框,就可以激活它。

非模态对话框使用更为灵活。模态对话框激活时,不能使用其他窗口,这与Pro/E的惯例不相符,从而使得有些功能无法实现,比如查询长度时需要和主界面交互数据。因此,一般情况下,我们使用MFC的非模态对话框。

编辑控件(Edit Control)是对话框实现键盘输入的重要的人机交互接口。通过编辑控件,用户可以输入文本信息,并将输入信息转换为各种类型的数据。然而由于Pro/E对中文的支持得不够完善,在使用Edit Control控件编程过程中,当此控件位于非模态对话框中时不能输入中文。

针对这个问题,在《Pro/ENGINEER二次开发技术基础》著作中提出了一种解决方案[3],就是建立模态对话框,然后在模态对话框中使用Edit Control控件,这样就可以接收中文输入了,也就是通过模态对话框进行中转。然而这种方案存在两方面不足:

一是与Pro/E软件的整体风格不一致,其软件的风格是绝大多数对话框使用非模态对话框。

二是此模态对话框不是纯粹的模态对话框。虽然采用的是模态对话框,但Pro/E主窗口仍然能接收到鼠标消息。比如:在打开模态对话框的环境下,如果不小心单击了Pro/E主窗口上的“新建”按钮,虽然“新建”功能不会立即执行,但是当退出模态对话框后,“新建”功能会马上实现,也就是会立刻弹出一个“新建”对话框。所以在Pro/E环境下基于MFC开发的模态对话框,不是真正意义上的模态对话框。因此这种方案还不够理想,下面提供另外一种解决方案。

2 解决方案

首先进行问题分析,出现在非模态对话框中Edit Control控件不能接收中文的这种情况的原因是:输入的文本先被Pro/E翻译,然后才传到对话框资源中,在这个转换过程中,就会出现乱码。

因为使用的是非模态对话框,而使用模态对话框就不会出现这个问题。因为非模态对话框和Pro/E的主对话框是同时进行工作的,这个时候如果响应一个消息,是Pro/E的主窗口首先响应这个消息,然后经过翻译,才传到开发者设计的对话框当中,所以是在这个转换过程中出现了BUG,造成显示结果是乱码。

下面就提供一种解决方案:

(1)第一步。为Edit Control控件的EN_SETFOCUS消息添加消息处理函数,代码如下:

(2)第二步。为Edit Control控件的EN_KILLFOCUS消息添加消息处理函数,代码如下:

当点击Edit Control控件时,也就是输入的焦点放到了Edit Control控件上面,这时就产生一次EN_SETFOCUS消息,在这个消息处理函数中,建立一个新的消息循环,这个消息循环是不经过Pro/E主程序的当前的消息循环,这时候输入的数据直接进入对话框当中,不经过再进行翻译。

当离开Edit Control控件结束了输入操作,这时就产生一次失去焦点EN_KILLFOCUS消息,在这个消息处理函数中,使用PosTQuiTMessage(0)命令,结束开发人员建立的消息循环。也就是当点击开始输入的时候和退出输入的时候,这之间建立了一个消息循环,使得输入的文字直接传递到对话框当中。图1是此解决方案在齿轮参数化设计程序中的应用实例(实例是使用Pro/E 4.0版本搭配Visual Studio 2008进行开发的)。

图1 Pro/E参数化设计生成内齿轮界面

3 结束语

Pro/TOOLKIT是Pro/E系统中功能强大的二次开发工具,使用Pro/TOOLKIT进行专业化应用程序设计、创建和调试是一种最佳的选择。此文针对Pro/E的一个BUG提出了一种有效的解决方法,为开发过程中遇到的Edit Control控件不能录入中文的问题提供了一种新思路。

[1]李世国.Pro/Toolkit程序设计[M].北京:机械工业出版社,2003.

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

[3]吴立军.Pro/ENGINEER二次开发技术基础[M].北京:电子工业出版社,2006.

猜你喜欢
二次开发控件对话框
基于.net的用户定义验证控件的应用分析
正常恢复虚拟机
西门子Operate高级编程的旋转坐标系二次开发
浅谈Mastercam后处理器的二次开发
Bootlace Worms’Secret etc.
What Is Beauty?
关于.net控件数组的探讨
西门子Easy Screen对倒棱机床界面二次开发
浅谈VB的通用对话框《CommonDialog》控件的使用
ANSYS Workbench二次开发在汽车稳定杆CAE分析中的应用