你可以在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
建立一個項目,接受默認設置,并按照前面提到的方法插入該窗體,則會出現如下警告:
?。猅he ActiveX control "MSFlexGridLib.MSFlex-Grid" is not installed in the
project and will be ignored.
該警告表明在項目中沒有插入Microsoft FlexGrid Control 6.0 控件。
?。猄yntax 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 環境下編寫任何代碼,以免出現錯誤。
?。?不要使用嵌套控件。