如何设置多语言版本

 
如何设置单文档程序多语言版本
设置一个应用程序多语言版本,一般有两种方法,一种是使用动态链接库,将两种语言包放到动态链接库中,再根据选择调用相应的动态链接库就可以了.一种是使用文本编辑器编辑资源文件的方法,将资源文件的内容设置成两个不同版本的资源.程序运行时,根据用户的选择而调用不同的资源来实现.现介绍第二种方法.
1.       新建一单文档应用程序.命名为ChineseAndEnglish.
2.       在资源文件菜单的试图下添加一项,Caption为英文,ID为ID_MENU_CHANGE.右键点击新增加的Add Event Handler,在MessageType中选择COMMAND,在Class List中选择CMainFrame,Add and Edit,就会添加一个OnMenuChange()事件;
这与VC6.0有点不一样.
3.       在单文档应用程序的目录下找到ChineseAndEnglish.rc文件.用文本形式打开,可见到如下的文件内容,这里可以看到图标,位图,工具栏,对话框,菜单,字符串表等相关文件.我们要改动的主要是想让菜单有两个版本(中,英),,所以只需要改动菜单部分的资源,其他的省略.
//ChineseAndEnglish.rc文件内容
// 图标
// 位图
// 工具栏
// 菜单
IDR_MAINFRAME MENU   
BEGIN
POPUP "文件(&F)"
BEGIN
       MENUITEM "新建/tCtrl+N(&N)",                 ID_FILE_NEW
              MENUITEM "打开.../tCtrl+O(&O)",             ID_FILE_OPEN
              MENUITEM "保存/tCtrl+S(&S)",                ID_FILE_SAVE
              MENUITEM "另存为(&A)...",                  ID_FILE_SAVE_AS
              MENUITEM SEPARATOR
              MENUITEM "打印.../tCtrl+P(&P)",            ID_FILE_PRINT
              MENUITEM "打印预览(&V)",               ID_FILE_PRINT_PREVIEW
              MENUITEM "打印设置(&R)...",              ID_FILE_PRINT_SETUP
              MENUITEM SEPARATOR
              MENUITEM "最近的文件",                  ID_FILE_MRU_FILE1,GRAYED
              MENUITEM SEPARATOR
              MENUITEM "退出(&X)",                        ID_APP_EXIT
END
POPUP "编辑(&E)"
BEGIN
              MENUITEM "撤消/tCtrl+Z(&U)",                ID_EDIT_UNDO
              MENUITEM SEPARATOR
              MENUITEM "剪切/tCtrl+X(&T)",                 ID_EDIT_CUT
              MENUITEM "复制/tCtrl+C(&C)",                ID_EDIT_COPY
              MENUITEM "粘贴/tCtrl+V(&P)",               ID_EDIT_PASTE
       END
       POPUP "视图(&V)"
       BEGIN
              MENUITEM "工具栏(&T)",                     ID_VIEW_TOOLBAR
              MENUITEM "状态栏(&S)",                  ID_VIEW_STATUS_BAR
    MENUITEM " 英文版 (&S)",                 ID_MENU_CHANG
 
       END
       POPUP "帮助(&H)"
       BEGIN
              MENUITEM "关于 ChineseAndEnglish(&A)...",           ID_APP_ABOUT
       END
END
// 在此后加入英文菜单资源复制上述文本,把其中的中文改成英文,并作些改动
IDR_MAINFRAME_ENGLISH MENU PRELOAD DISCARDABLE
BEGIN
    POPUP "File(&F)"
    BEGIN
        MENUITEM "New(&N)/tCtrl+N",             ID_FILE_NEW
        MENUITEM "Open(&O).../tCtrl+O",         ID_FILE_OPEN
        MENUITEM "Save(&S)/tCtrl+S",            ID_FILE_SAVE
        MENUITEM "Save as(&A)...",              ID_FILE_SAVE_AS
        MENUITEM SEPARATOR
        MENUITEM "Print(&P).../tCtrl+P",        ID_FILE_PRINT
        MENUITEM "Print Preview(&V)",           ID_FILE_PRINT_PREVIEW
        MENUITEM "Print Setting(&R)...",        ID_FILE_PRINT_SETUP
        MENUITEM SEPARATOR
        MENUITEM "Recent Files",                ID_FILE_MRU_FILE1, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "Exit(&X)",                    ID_APP_EXIT
    END
    POPUP "Edit(&E)"
    BEGIN
        MENUITEM "Undo(&U)/tCtrl+Z",            ID_EDIT_UNDO
        MENUITEM SEPARATOR
        MENUITEM "Cut(&T)/tCtrl+X",             ID_EDIT_CUT
        MENUITEM "Copy(&C)/tCtrl+C",            ID_EDIT_COPY
        MENUITEM "Paste(&P)/tCtrl+V",           ID_EDIT_PASTE
    END
    POPUP "View(&V)"
    BEGIN
        MENUITEM "ToolBar(&T)",                 ID_VIEW_TOOLBAR
        MENUITEM "StatusBar(&S)",                ID_VIEW_FULLSCREEN
        MENUITEM "Chinese",                     ID_MENU_CHANGE
    END
    POPUP "Help(&H)"
    BEGIN
        MENUITEM "About FullScreen(&A)...",     ID_APP_ABOUT
    END
END
// 快捷键
// 对话框
// 版本
// 字符串表
改动后保存.再次打开资源项的时候会显示Opened in another editor,这时候只需要重新编译下,这些资源才能在.NET2003下看的到,改动后你可以看到新增加了个英文菜单.
下面解决的问题就是如何切换.
首先在 CMainFrame类中加入变量CMenu m_englistmenu m_chinesemenu用来保存中英文菜单资源,且加入变量enum Enum{e,c}m_current 保存当前菜单,也就是在MainFram.h头文件中添加如下代码
public:
       enum Enum{e,c}m_current;/ / 用来保存当前菜单
       CMenu m_englistmenu;// 用来保存英文菜单资源
       CMenu m_chinesemenu;// 用来保存中文菜单资源
其次 由于默认为中文菜单 , 所以在 CMainFrame::CMainFrame() 中设置 m_current=c; 表示当前为中文菜单
CMainFrame::CMainFrame()
{
          m_current=c;
}
接着 CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 中装入英文菜单资源,即在OnCreate中return 0之前加入如下代码
m_englistmenu.LoadMenu("IDR_MAINFRAME_ENGLISH");
     HMENU m_hMenu=::GetMenu(this->m_hWnd); // 保存中文菜单
m_chinesemenu.Attach(m_hMenu);
   最后加入菜单改变函数 , 即为开始的 OnMenuChange 事件添加如下代码 :
void CMainFrame::OnMenuChange()
{
       if(m_current==e)
         {
              SetMenu(&m_chinesemenu);
              m_current=c;
         }
         else
         {
              SetMenu(&m_englistmenu);
              m_current=e;
         }
}
如果新的菜单出现中文乱码的问题,可以通过在左侧资源列表中右击你要编辑的那个资源,打开属性,然后把语言改成 Chinese(P.R.C)就行了.
未完待续……
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值