DLL 实现多语言

作者在 2007-04-28 23:31:00 发布以下内容

cpp 中定义
int g_currentLanguage = LG_ENGLISH; // 定义一个全局变量,用来标示当前使用的语言
HINSTANCE hinsDll; // 定义一个全局实例句柄,用来存储 DLL 的实例句柄
.h 中声明
extern int g_currentLanguage;
extern HINSTANCE hinsDll;
enum{ // 定义语言的枚举值
LG_ENGLISH = 0,
LG_CHINESE = 1
};
切换使用的语言
void CMainFrame::OnMenuitemChinese() // 中文
{
g_currentLanguage = LG_CHINESE;
FreeLibrary(hinsDll);
hinsDll = LoadLibrary("LG_CHINESE.DLL");
if (hinsDll){
    AfxSetResourceHandle(hinsDll);
    HMENU hMenu = ::LoadMenu(hinsDll,    MAKEINTRESOURCE(IDR_MAINFRAME));
    m_menu.Detach();
    m_menu.Attach(hMenu);
    SetMenu(&m_menu);
}else{ // Error
//    MessageBox("Error");
}
}

在使用vc写简繁体通用程序时,对实现菜单、界面、Tooltips等的文字时无法实现通用。如果写简体和繁体各一套程序,那肯定不现实。查找所有资料和文章都只能实现菜单的多语言,且使用起来也不方便;并且无法实现界面、Tooltips等的多语言。因而,采用纯资源的DLL文件来实现多语言。
        纯资源DLL文件实现步骤如下:
        (1)创建简繁体MDI或SDI程序后,把VC框架自动创建的.rc,.rc2,.ico,.bmp等文件从程序框架中删除;
        (2)使用Projects的Win32 Dynamic-Link Library分别创建简繁体纯资源dll文件,把由MDI或SDI程序创建的.rc,.rc2,.ico,.bmp等文件加入到该工程文件中;
        (3)在Project菜单项选择Settings然后选择Project Settings的Link标签;然后在Project Options框内输入/NOENTRY。编译后就产生纯资源DLL文件;
       纯资源DLL文件加入没有任何资源的MDI或SDI程序,其步骤如下:
        (1)在主应用程序类的.h文件中定义protected 的 HINSTANCE 类型变量(如:mhInstMenu);     
        (2)在主应用程序类的.cpp文件::InitInstance()函数过程中添加下面代码:
        mhInstMenu = ::LoadLibrary("Menu.dll");    // Menu.dll为多语言纯资源的dll文件
      if (mhInstMenu == NULL)  
      {  
          return FALSE; // failed to load the localized resources  
      }  
      else {  
          AfxSetResourceHandle(m_hInstMenu); // get resources from the DLL  
      }
       (3)在主应用程序类的.cpp文件::ExitInstance()函数过程中添加下面代码:
        FreeLibrary(mhInstMenu);

 

(编程)Work | 阅读 1820 次
文章评论,共0条
游客请输入验证码
浏览318093次