BCGControlBar Pro是優秀的MFC的一個擴充類庫,可以用來構建類似於Microsoft Office、Microsoft Visual Studio和其他一些知名產品的進階使用者介面。可是建立應用程式的嚮導僅提供支援英語語言的資源,不能產生中文資源菜單的應用程式。好在安裝BCGControlBar Pro 7.31後有製作建立應用程式嚮導的工程檔案,可以以此為基礎製作支援中文語言、英語語言資源的建立工程嚮導。經過兩天的摸索,已解決了製作建立工程嚮導中的問題,將整個製作嚮導的過程作一完整的敘述,以能完整的再現解決問題的過程。
一、BCGControlBar Pro 7.31支援中文資源建立應用程式嚮導製作的已有資料及存在問題
網上有BCGControlBar7.3.1中文嚮導製作文章,該文的方法如下:
1、將SetSupportedLanguages(_T(English[UnitedStates](APPWZENU.DLL);
0x40904b0/nDeutsch[Deutschland](APPWZDEU.DLL);0x40704b0 "))語句修改為SetSupportedLanguages(_T( "中文 [中國](APPWZEDU.DLL);0x80404b0 "));
2、漢化資源檔及其它資源。在工程BCGPAppWizard的Template檔案夾下,找到DlgLoc_enu.rc和Loc_enu.rc檔案檔案,用文字編輯器將其開啟,將其中的英文字元改為相應的中文,編輯完畢後儲存即可,將在其他檔案(如Root.cpp等)中出現的英文文本顯示的字元翻譯成中文。
3、消除庫的開發人員在應用嚮導自訂的第一頁中添加了一個“無用”控制項,其ID為IDC_MDI_TAB_GROUPS,與之相關的變數名為BOOL m_bMDITabGroups。工程中與IDC_MDI_TAB_GROUPS及m_bMDITabGroups相關的行注釋掉(文中對OnMdiTabs()中的IDC_MDI_TAB_GROUPS更改為IDC_MDI_TAB)。
採用該文的方法確實可以製作支援中文資源的工程建立嚮導,但沒有資源語言的選擇餘地,同時,在SetSupportedLanguages中使用APPWZEDU.DLL,而非使用APPWZCHS.DLL,僅把轉換標識符改為中文的0x80404b0,其實只要按該文進行第2、3步就可以了,原因是第2步已對使用的所有資源檔進行了漢化。該作者這樣處理後,將失掉原有的一些功能,原因是作者認為開發人員在應用嚮導自訂的第一頁對話方塊中添加了一個“無用”控制項,其ID為IDC_MDI_TAB_GROUPS。其實,不是多了一個“無用”控制項,而正是缺失了一個與IDC_MDI_TAB_GROUPS相關聯的選擇框控制項,嚮導使用與該選擇框控制項相關聯的m_bMDITabGroups成員變數來控制MDI文檔TAB標籤是否分組。
二、製作BCGControlBar Pro 7.31支援多語言資源建立工程嚮導的方法及解決問題的過程
有沒有製作既支援英語又支援中文資源的BCGControlBar Pro 7.31建立工程嚮導的可能?經曆了以下過程,最終解決了問題。
首先是在嚮導自訂的第一頁對話方塊中添加一個“Check Box”的控制項,選擇標識符為IDC_MDI_TAB_GROUPS。否則在用嚮導建立工程進入嚮導自訂的第一頁對話方塊時將會彈出“試圖執行系統不支援的操作”錯誤對話方塊,建立工程嚮導不能向下進行。
(一)、僅在語言支援中增加中文語言支援,而不漢化BCGPAppWizard的Template檔案夾下下的任何資源檔。
1、安裝BCGControlBarPro後的目錄下有嚮導工程BCGPAppWizard,用VC開啟BCGCBProAppWizard.dsw,瀏覽BCGBAppWizardaw.cpp檔案,在InitCustomAppWiz()函數找到SetSupportedLanguages(_T( "English [United States] (APPWZENU.DLL);0x40904b0 ")),把該語句修改為 SetSupportedLanguages(_T( "中文[中國] (APPWZCHS.DLL);0x80404b0\n英語[美國]
(APPWZENU.DLL);0x40904b0 "));,重新編譯形成建立工程嚮導的awx檔案。
2、用該建立工程嚮導建立一新工程,選用中文語言。編譯後執行,debug版會彈出一錯誤對話方塊,選擇“忽略”,程式可繼續執行,程式菜單已為中文,但為MFC標準資源菜單,無BCGControlBar Pro 7.31擴充菜單,同時,按“關於”菜單會彈出“試圖執行系統不支援的操作”錯誤對話方塊。對於Release版唯一不同是開始不會出現錯誤對話方塊,其餘與debug相同。
3、用該建立工程嚮導再建立一新工程,選用英文語言。編譯後執行,一切正常,具有英文菜單,並有BCGControlBar Pro 7.31擴充菜單。
(二)、自己用“custom AppWizad”建立一定製嚮導工程。在選擇支援語言時,選擇所有語言。
用文字編輯器開啟該工程目錄下的資源檔(.rc,),在TEMPLATE節,對應每一語言均有以下檔案組:
LOC_xxx.RC TEMPLATE DISCARDABLE "template\\loc_xxx.rc "
DLGLOC_xxx.RC TEMPLATE DISCARDABLE "template\\dlgloc_xxx.rc "
DOC_xxx.ICO TEMPLATE DISCARDABLE "template\\doc_xxx.ico "
ROOT_xxx.CNT TEMPLATE DISCARDABLE "template\\root_xxx.cnt "
ROOT_xxx.HPJ TEMPLATE DISCARDABLE "template\\root_xxx.hpj "
AFXDLG_xxx.RTF TEMPLATE DISCARDABLE "template\\afxdlg_xxx.rtf "
AFXCORE_xxx.RTF TEMPLATE DISCARDABLE "template\\afxcore_xxx.rtf "
AFXPRINT_xxx.RTF TEMPLATE DISCARDABLE "template\\afxprint_xxx.rtf "
AFXOLECL_xxx.RTF TEMPLATE DISCARDABLE "template\\afxolecl_xxx.rtf "
AFXOLESV_xxx.RTF TEMPLATE DISCARDABLE "template\\afxolesv_xxx.rtf "
AFXDB_xxx.RTF TEMPLATE DISCARDABLE "template\\afxdb_xxx.rtf "
SCMENU_xxx.BMP TEMPLATE DISCARDABLE "template\\scmenu_xxx.bmp "
APPEXIT_xxx.BMP TEMPLATE DISCARDABLE "template\\appexit_xxx.bmp "
HLPSBAR_xxx.BMP TEMPLATE DISCARDABLE "template\\hlpsbar_xxx.bmp "
XXX為語言識別項,chs-中文、enu-英語、……。
並列出了在子目錄TEMPLATE中的檔案名稱,子目錄TEMPLATE下每一語言也有對應的一組檔案。
再用文字編輯器開啟BCGPAppWizard\BCGCBProAppWizard.rc,在TEMPLATE節,只有英語語言對應的一組檔案。而該工程對應的子目錄TEMPLATE下也只有英語語言對應的一組檔案。
經過以上過程,根據在(一)中製作的awx用來建立支援中文資源的程式會出錯,而建立英語資源的程式一切正常,可以判斷原因是與無中文資源相關的檔案組有關。至此,基本找到瞭解決的方法。
(三)、製作BCGControlBar Pro 7.31支援多語言資源建立工程嚮導的方法
使用工具:檔案比較子,使用UltraCompare。
1、經比較自己用“custom AppWizad”建立定製嚮導工程的LOC_chs.rc、DLGLOC_chs.rc和LOC_enu.rc、DLGLOC_enu.rc,中文資源檔是英語資源檔一對一的翻譯。因此,可用自己用“custom AppWizad”建立定製嚮導工程的LOC_chs.rc、DLGLOC_chs.rc作為BCGControlBar Pro 7.31建立工程嚮導TEMPLATE的中文資源檔的基礎,將其複製到BCGPAppWizard\Template目錄。
2、使用UltraCompare同時開啟3個檔案的文本比較模式,將“custom AppWizad”建立定製嚮導工程的LOC_enu.rc作為第一開啟檔案,將BCGPAppWizard\Template目錄下的LOC_enu.rc作為第二開啟檔案,將BCGPAppWizard\Template目錄下的LOC_chs.rc作為第三開啟檔案,比較三個檔案,第二檔案有的而第一檔案無的部分資源是BCGControlBar Pro 7.31特有的資源,將該部分特有資源插入第三個中文資源檔相應位置,至此大部分為中文的資源檔已形成,需翻譯的只是BCGControlBar
Pro 7.31特有部分資源,對另一資源檔作相應處理(其實對於DLGLOC_chs.rc僅是增加了幾行注釋而已),所需中文資源檔已形成。
3、用文字編輯器開啟BCGPAppWizard\BCGCBProAppWizard.rc,在TEMPLATE節增加支援中文資源的一組檔案清單,即(二)中的一組檔案。同時在BCGPAppWizard\Template目錄下增加該組中除兩個rc資源檔外的其它檔案、可採用複製BCGPAppWizard\Template目錄下對應的英語語言檔案組,將_enu改為_chs。
4、重新編譯,經建立程式證實功能一切正常。
把編譯產生的BCGCBProAppWizard.awx檔案拷貝到C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Template目錄下即可。
從這一過程可看出,工程嚮導建立程式架構時,根據使用的語言在BCGCBProAppWizard.awx中尋找對應的語言識別項對應的資源,如果BCGCBProAppWizard.awx中無對應的資源,就使用MFC中相應語言的標準資源。瞭解了尋找資源的次序,再來製作支援多語言的建立工程嚮導就容易了。本文雖是針對BCGControlBar Pro,對其它建立工程嚮導增加語言支援的製作也可採用以上4個步驟實踐。