你可以在VC ++的Dialog
Editor(对话编辑器)环境下导入VB 窗体。VB
设计的窗体类似于一个对话框和一个放置控件的包容器(container)。当你在导入VB
窗体时,一些放置在窗体上的控件也会随之被导入:对于窗体上的ActiveX
控件,只有当它已经被插入VC ++项目中之后,才会随着VB
窗体一齐导入;对于VB 开发环境中提供的一些本地控件(如Drive List
Box、File List Box
等),则可能遇到一些麻烦;而那些嵌套在控件内的控件也要受到一些制约。大多数限制来自于VB
运行时对话框与Windows
运行时对话框的不同表现,本文后面将详细说明有关限制。步骤如下:
1、启动VC ++编程环境。
2、从Insert(插入)窗体上,单击Resource(资源)。
3、在Insert Resource(插入资源)对话框中单击Import(导入)按钮。
4、在Import Resource(导入资源)对话框中将File Type(文件类型)设置为VB
Form 并选择所需导入的窗体,单击Import 按钮。
当然,如前所述,当导入一些较为特别的VB
窗体时,可能出现一些错误信息。比如笔者在VB 6.0
下建立了一个窗体,窗体上分别放置了Picture Box、Frame、Label、Microsoft
FlexGrid Control 以及Drive List Box 五个控件,并在Label 控件的DblClick
事件上编写了一些代码,窗体如下图所示:
在VC ++环境下运行AppWizard
建立一个项目,接受默认设置,并按照前面提到的方法插入该窗体,则会出现如下警告:
*The ActiveX control "MSFlexGridLib.MSFlex-Grid" is not installed in the
project and will be ignored.
该警告表明在项目中没有插入Microsoft FlexGrid Control 6.0 控件。
*Syntax error in VB form description.
该警告出现是因为在对控件(Label)相关事件(DblClick)编写了VB
代码,以及VB 在调用控件时与VC ++语法不一致而造成的。
另外,当导入包含.FRX 文件的VB
窗体时,还可能出现如下错误信息:
The form's binary data file "Form1.FRX" can't be opened.
在导入窗体之后,还会出现一些奇怪的现象,比如Drive List Box
已经转变为Windows 标准的List Box 等等。
由此可见,对于将VB 窗体导入到VC
++中存在着诸多限制,它们主要可以分为对VB
本地控件和对象的限制、对VB 控件属性的限制以及对VB
窗体中嵌套控件的限制。
1. 对VB 本地控件和对象的限制
下面列出的控件在导入到VC
++项目中时性能可能会削减甚至被忽略:
* Drive List Box 以及Dirctory List Box:导入之后将会被转换成Windows
List Box。
* MDI
窗体:导入之后将会转换成普通的对话框,并且菜单会被忽略。
* Line 和Shape 控件
* 水平和垂直滚动条。
* Timer 控件。
* Printer、Screen、Clipboard、App 等对象会被忽略。
2. 对VB 控件属性的限制
VB 窗体上大多数控件的属性能够被成功导入到VC
++中,而对于个别的属性仅被VB 控件支持,在标准的Windows
对话框中没有与之相等的属性。比如个别控件的Font 和Color
等属性,对此也要予以注意。
3. 对VB 窗体中嵌套控件的限制
嵌套控件被VB 所支持,而不能够导入到VC ++环境。在VB
环境中,控件能够被嵌套到其他控件之中(如Picture、Frame
等),用户可以通过设置最外层的控件的Visible
属性来决定所有嵌入的控件的Visible 属性,而在VC
++环境中,控件是否可见是一个运行时特征。
对于此类问题,一个解决的办法是将交叠的控件移入独立的对话框中,通过编写需要的代码来创建相关对话框,达到显示控件的目的,最后将主对话框设置为Parent
Window(父窗体)。
因此,为了避免麻烦,建议在向VC ++项目中导入VB
窗口时能够做到以下几点:
* 在导入窗体之前检查窗体中涉及的ActiveX 控件,并在VC
++项目中插入相应控件。
* 不要使用文中提到的VB 本地控件。
* 不要设计过于复杂的窗体,不要在设计时设置Picture Box
等控件的Picture 属性,以免生成.FRX 文件。
* 不要在VB 环境下编写任何代码,以免出现错误。
* 不要使用嵌套控件。
文章来源于领测软件测试网 https://www.ltesting.net/