请教怎么实现MFC Dlg界面多语言界面,急等

来源:互联网 发布:搭建dns域名服务器 编辑:程序博客网 时间:2024/05/29 09:14

请教怎么实现MFC Dlg界面多语言界面,急等。。。。 [问题点数:80分,结帖人shen_wei]

 收藏
楼主发表于: 2011-03-28 12:01:55
对话框程序,怎么实现多语言界面的切换。。。

对话框上包含,Menu,Button,List,tooltip ,还有button 打开CFileDialog等等。。

1|网上介绍的多语言切换。。在rc文件中可以实现 menu的快速切换,,但是实现不了界面的完全切换。。

  这中就是建立连个语言菜单来切换

2 纯资源dll文件。。这个只能在加载时实现资源的切换,不能实现在界面中通过菜单切换。。。
 

请问大家要实现界面的全部语言切换,应该使用那种方法来解决??全界面的语言切换。。。

在线急等。。。谢谢!!
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
回复次数:30
#1 得分:10回复于: 2011-03-28 12:04:19
用资源动态库,菜单选择语言切换时,需重启应用程序生效!
专访黄钊吉:SQL Server现已经向云过渡
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#2 得分:10回复于: 2011-03-28 12:04:37
写到配置文件(ini)里面,点击菜单切换语言,然后重新读取对应的配置文件就可以了啊
公告:CSDN新版首页上线
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#3 得分:10回复于: 2011-03-28 12:07:58
http://www.vckbase.com/document/viewdoc/?id=1102 
http://www.vckbase.com/document/viewdoc/?id=663 
http://www.vckbase.com/document/viewdoc/?id=547

http://download.csdn.net/source/1287356
关注CSDN论坛微博 送积分大礼包
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#4 得分:10回复于: 2011-03-28 12:08:25
基本上SetWindowText,一个个重新设置一遍。
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#5 得分:10回复于: 2011-03-28 12:26:21
我做过一个小项目
是这么弄得
把所有的字符串都通过代码动态设置(包括按钮标题和菜单)
然后将字符串分语言整理到数组中
通过修改数组下表更新界面语言
有时需要调整一下控件大小
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#6 得分:0回复于: 2011-03-28 14:03:17
引用 5 楼 xianglitian 的回复:
我做过一个小项目
是这么弄得
把所有的字符串都通过代码动态设置(包括按钮标题和菜单)
然后将字符串分语言整理到数组中
通过修改数组下表更新界面语言
有时需要调整一下控件大小


那要是调用其它控件哪??打开文件对话框哪??
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#7 得分:0回复于: 2011-03-28 14:04:10
引用 1 楼 worcy_kiddy 的回复:
用资源动态库,菜单选择语言切换时,需重启应用程序生效!


这个要怎么不需要重启才能立马生效。。。
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#8 得分:10回复于: 2011-03-28 14:17:06
引用 7 楼 shen_wei 的回复:
引用 1 楼 worcy_kiddy 的回复:
用资源动态库,菜单选择语言切换时,需重启应用程序生效!


这个要怎么不需要重启才能立马生效。。。

你程序启动的时候把动态库都加载进去,然后根据选择菜单调用不同动态库函数
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#9 得分:0回复于: 2011-03-28 14:36:07
引用 8 楼 king_hhuang 的回复:
引用 7 楼 shen_wei 的回复:
引用 1 楼 worcy_kiddy 的回复:
用资源动态库,菜单选择语言切换时,需重启应用程序生效!


这个要怎么不需要重启才能立马生效。。。

你程序启动的时候把动态库都加载进去,然后根据选择菜单调用不同动态库函数


动态加载。。不是很明白。。你有这方面的例子没有??
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#10 得分:0回复于: 2011-03-28 14:38:34
C/C++ code
?
1
2
3
4
5
6
7
8
9
if (m_bChinese)
{
    m_hLangDLL=::LoadLibrary("chinese.dll");
}
else
{
    m_hLangDLL=::LoadLibrary("english.dll");
}
AfxSetResourceHandle(m_hLangDLL);


我的这个就是在dlg初始化时,动态加载的。。

但是在界面的菜单中,切换语言不行。。。
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#11 得分:10回复于: 2011-03-28 14:43:27
引用 10 楼 shen_wei 的回复:
C/C++ code

    if (m_bChinese)
    {
        m_hLangDLL=::LoadLibrary("chinese.dll");
    }
    else
    {
        m_hLangDLL=::LoadLibrary("english.dll");
    }
    AfxSetResourceHandle(m_……

我是说,你把if else都去掉,两个都load进来,
m_hCHLangDLL=::LoadLibrary("chinese.dll");
m_hENLangDLL=::LoadLibrary("english.dll");
然后判断
if (m_bChinese)
    {
        处理chinese.dll
    }
    else
    {
        处理english.dll
    }
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#12 得分:0回复于: 2011-03-28 14:45:12
if (m_bChinese)
  {
  AfxSetResourceHandle(m_hCHLangDLL);
  }
  else
  {
  AfxSetResourceHandle(m_hENLangDLL);
  }
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#13 得分:0回复于: 2011-03-28 14:48:07
这个都是通过创建资源DLL,通过动态加载的方式来搞定的.
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#14 得分:0回复于: 2011-03-28 14:51:18
引用 12 楼 king_hhuang 的回复:
if (m_bChinese)
{
AfxSetResourceHandle(m_hCHLangDLL);
}
else
{
AfxSetResourceHandle(m_hENLangDLL);


不是啊,如果纯资源dll话的,主工程里面是没有资源文件的。。如果不加在的话。。界面都不能初始化的。。
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#15 得分:0回复于: 2011-03-28 14:57:44
引用 14 楼 shen_wei 的回复:
引用 12 楼 king_hhuang 的回复:
if (m_bChinese)
{
AfxSetResourceHandle(m_hCHLangDLL);
}
else
{
AfxSetResourceHandle(m_hENLangDLL);



不是啊,如果纯资源dll话的,主工程里面是没有资源文件的。。如果不加在的话。。界面都不能初始化的。。


前面有m_hCHLangDLL=::LoadLibrary("chinese.dll");
m_hENLangDLL=::LoadLibrary("english.dll");
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#16 得分:0回复于: 2011-03-28 15:04:35
引用 15 楼 king_hhuang 的回复:
引用 14 楼 shen_wei 的回复:
引用 12 楼 king_hhuang 的回复:
if (m_bChinese)
{
AfxSetResourceHandle(m_hCHLangDLL);
}
else
{
AfxSetResourceHandle(m_hENLangDLL);



不是啊,如果纯资源dll话的,主工程里面是没有资源文件的。。如果不加在的话。……


你有邮箱吗?我把代码给你。。你改变下看看!!看看怎么修改。。。。
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#17 得分:0回复于: 2011-03-28 15:10:48
引用 16 楼 shen_wei 的回复:
引用 15 楼 king_hhuang 的回复:
引用 14 楼 shen_wei 的回复:
引用 12 楼 king_hhuang 的回复:
if (m_bChinese)
{
AfxSetResourceHandle(m_hCHLangDLL);
}
else
{
AfxSetResourceHandle(m_hENLangDLL);



不是啊,如果纯资源dll……

我也没做过,只是看你的代码觉得可能可以,代码你发给我看看吧,King_hhuang@126.com,不一定帮得了你哦
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#18 得分:0回复于: 2011-03-28 15:22:27
通过ini实现多语言
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#19 得分:10回复于: 2011-03-28 15:46:41
多语言,我只用过两种方式,都是XP,VC6
1 资源DLL,需要重启程序,操作简单,代码改动少
2 语言配置文件,不需要重启程序,这个比较麻烦,点菜单时更新所有已经显示控件,未创建显示的根据当前选择语言创建(如:文件保存对话框,class CMyFileDlg : public CFileDialog,在CMyFileDlg中设置所有文字,包括TOOLTIP)
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#20 得分:0回复于: 2011-03-28 15:53:33
引用 19 楼 hpf976149 的回复:
多语言,我只用过两种方式,都是XP,VC6
1 资源DLL,需要重启程序,操作简单,代码改动少
2 语言配置文件,不需要重启程序,这个比较麻烦,点菜单时更新所有已经显示控件,未创建显示的根据当前选择语言创建(如:文件保存对话框,class CMyFileDlg : public CFileDialog,在CMyFileDlg中设置所有文字,包括TOOLTIP)


2 语言配置文件 你指的是通过INI文件来实现的吗???
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#21 得分:0回复于: 2011-03-28 15:56:43
http://download.csdn.net/source/3125767
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#22 得分:0回复于: 2011-03-28 15:57:17
上面的例子是
用dll 中的string table实现。
电驴等软件都是这样实现的
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#23 得分:0回复于: 2011-03-28 16:29:19
C/C++ code
?
1
 
TCHAR str1[MAX_PATH];
TCHAR str2[MAX_PATH];
TCHAR str3[MAX_PATH];
LoadString(hDll,IDS_STRING10003,str1,MAX_PATH);
LoadString(hDll,IDS_STRING10004,str2,MAX_PATH);
LoadString(hDll,IDS_STRING10005,str3,MAX_PATH);

SetDlgItemText(IDOK,str1);
SetDlgItemText(IDCANCEL,str2);
SetDlgItemText(IDC_BTN_TEST,str3);

FreeLibrary(hDll);
hDll = NULL;
引用 22 楼 arpnet99 的回复:
上面的例子是
用dll 中的string table实现。
电驴等软件都是这样实现的


每一个界面都要这样使用吗??如过很多这样是不是很麻烦??
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#24 得分:0回复于: 2011-03-28 19:17:00
引用 6 楼 shen_wei 的回复:
引用 5 楼 xianglitian 的回复:
我做过一个小项目
是这么弄得
把所有的字符串都通过代码动态设置(包括按钮标题和菜单)
然后将字符串分语言整理到数组中
通过修改数组下表更新界面语言
有时需要调整一下控件大小


那要是调用其它控件哪??打开文件对话框哪??

那就比较麻烦了
如果只是英文的倒还好办
如果还有其他语言恐怕你要自己重写这些控件了
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#25 得分:0回复于: 2011-03-28 22:20:43
引用 5 楼 xianglitian 的回复:
我做过一个小项目
是这么弄得
把所有的字符串都通过代码动态设置(包括按钮标题和菜单)
然后将字符串分语言整理到数组中
通过修改数组下表更新界面语言
有时需要调整一下控件大小


嗯,这个可以,我都实现过,多国语言动态切换是没问题的。
不过设置很多细节,具体我也记不起来了。
很后悔离开公司,源代码没给自己留一份。
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#26 得分:0回复于: 2011-03-28 22:22:23
因为该代码还没真正用到市场去的,其实给自己留一份也不为过。

韩语是最麻烦的。God bless you!
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#27 得分:0回复于: 2011-03-28 22:23:42
点击菜单式加载其他语言的资源,必要时可以重绘一下窗口
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#28 得分:0回复于: 2011-03-29 23:23:37
写配置文件
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#29 得分:0回复于: 2011-03-30 19:24:57
建议参考下,notpad++这些著名的开源项目。
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
#30 得分:0回复于: 2011-05-18 16:31:53
请问哪种方法实现多语言可以达到程序最小化。
原创粉丝点击