请教怎么实现MFC Dlg界面多语言界面,急等
  M9aMEIE19lAW 2023年11月02日 66 0


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



  • 不显示删除回复
  • 显示所有回复
  • 显示星级回复
  • 显示得分回复
  • 只显示楼主
  •        收藏




shen_wei

人类新纪元开始了 等级:






楼主 发表于: 2011-03-28 12:01:55



对话框程序,怎么实现多语言界面的切换。。。

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

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

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

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

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

在线急等。。。谢谢!!




对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理


回复次数:30




huangcheng90

Dreadnought 等级:

#2 得分:10 回复于: 2011-03-28 12:04:37



写到配置文件(ini)里面,点击菜单切换语言,然后重新读取对应的配置文件就可以了啊


公告:CSDN新版首页上线



对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



King_hhuang

King_hhuang 等级:





#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


关注CSDN论坛微博 送积分大礼包



对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



baihaipi

baihaipi 等级:

#4 得分:10 回复于: 2011-03-28 12:08:25



基本上SetWindowText,一个个重新设置一遍。





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



xianglitian 


向立天 等级:


3








9



更多勋章


#5 得分:10 回复于: 2011-03-28 12:26:21



我做过一个小项目
是这么弄得
把所有的字符串都通过代码动态设置(包括按钮标题和菜单)
然后将字符串分语言整理到数组中
通过修改数组下表更新界面语言
有时需要调整一下控件大小





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



shen_wei

人类新纪元开始了 等级:





#6 得分:0 回复于: 2011-03-28 14:03:17



引用 5 楼 xianglitian 的回复:

我做过一个小项目
是这么弄得
把所有的字符串都通过代码动态设置(包括按钮标题和菜单)
然后将字符串分语言整理到数组中
通过修改数组下表更新界面语言
有时需要调整一下控件大小



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







对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



shen_wei

人类新纪元开始了 等级:





#7 得分:0 回复于: 2011-03-28 14:04:10



引用 1 楼 worcy_kiddy 的回复:

用资源动态库,菜单选择语言切换时,需重启应用程序生效!



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







对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



King_hhuang

King_hhuang 等级:





#8 得分:10 回复于: 2011-03-28 14:17:06



引用 7 楼 shen_wei 的回复:

引用 1 楼 worcy_kiddy 的回复:
用资源动态库,菜单选择语言切换时,需重启应用程序生效!


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


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







对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



shen_wei

人类新纪元开始了 等级:





#9 得分:0 回复于: 2011-03-28 14:36:07



引用 8 楼 king_hhuang 的回复:

引用 7 楼 shen_wei 的回复:
引用 1 楼 worcy_kiddy 的回复:
用资源动态库,菜单选择语言切换时,需重启应用程序生效!


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

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



动态加载。。不是很明白。。你有这方面的例子没有??







对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



shen_wei

人类新纪元开始了 等级:





#10 得分:0 回复于: 2011-03-28 14:38:34






C/C++ code



?









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



但是在界面的菜单中,切换语言不行。。。







对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



if                (m_bChinese)              

               {              

                              m_hLangDLL=::LoadLibrary(               "chinese.dll"               );              

               }              

               else              

               {              

                              m_hLangDLL=::LoadLibrary(               "english.dll"               );              

               }              

               AfxSetResourceHandle(m_hLangDLL);



King_hhuang

King_hhuang 等级:





#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]  引用 |  举报 |  管理



King_hhuang

King_hhuang 等级:





#12 得分:0 回复于: 2011-03-28 14:45:12



if (m_bChinese)
   {
   AfxSetResourceHandle(m_hCHLangDLL);
   }
   else
   {
   AfxSetResourceHandle(m_hENLangDLL);
   }





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



wyjam

wyjam 等级:

#13 得分:0 回复于: 2011-03-28 14:48:07



这个都是通过创建资源DLL,通过动态加载的方式来搞定的.





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



shen_wei

人类新纪元开始了 等级:





#14 得分:0 回复于: 2011-03-28 14:51:18



引用 12 楼 king_hhuang 的回复:

if (m_bChinese)         
 {         
 AfxSetResourceHandle(m_hCHLangDLL);         
 }         
 else         
 {         
 AfxSetResourceHandle(m_hENLangDLL);         
 }



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







对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



King_hhuang

King_hhuang 等级:





#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]  引用 |  举报 |  管理



shen_wei

人类新纪元开始了 等级:





#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]  引用 |  举报 |  管理



King_hhuang

King_huang 等级:





#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]  引用 |  举报 |  管理



abc3240666

abc3240666 等级:

#18 得分:0 回复于: 2011-03-28 15:22:27



通过ini实现多语言





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



hpf976149

Cppoder 等级:

#19 得分:10 回复于: 2011-03-28 15:46:41



多语言,我只用过两种方式,都是XP,VC6
1 资源DLL,需要重启程序,操作简单,代码改动少
2 语言配置文件,不需要重启程序,这个比较麻烦,点菜单时更新所有已经显示控件,未创建显示的根据当前选择语言创建(如:文件保存对话框,class CMyFileDlg : public CFileDialog,在CMyFileDlg中设置所有文字,包括TOOLTIP)





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



shen_wei

人类新纪元开始了 等级:





#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]  引用 |  举报 |  管理



arpnet99 


熊猫党团委副书记 等级:

#21 得分:0 回复于: 2011-03-28 15:56:43








对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



arpnet99 


熊猫党团委副书记 等级:

#22 得分:0 回复于: 2011-03-28 15:57:17



上面的例子是
用dll 中的string table实现。
电驴等软件都是这样实现的





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



shen_wei

人类新纪元开始了 等级:





#23 得分:0 回复于: 2011-03-28 16:29:19






C/C++ code








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]  引用 |  举报 |  管理


1


 



xianglitian 


向立天 等级:


3








9



更多勋章


#24 得分:0 回复于: 2011-03-28 19:17:00



引用 6 楼 shen_wei 的回复:

引用 5 楼 xianglitian 的回复:
我做过一个小项目
是这么弄得
把所有的字符串都通过代码动态设置(包括按钮标题和菜单)
然后将字符串分语言整理到数组中
通过修改数组下表更新界面语言
有时需要调整一下控件大小


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


那就比较麻烦了


如果只是英文的倒还好办


如果还有其他语言恐怕你要自己重写这些控件了







对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



tajon1226

tajon1226 等级:

#25 得分:0 回复于: 2011-03-28 22:20:43



引用 5 楼 xianglitian 的回复:

我做过一个小项目
是这么弄得
把所有的字符串都通过代码动态设置(包括按钮标题和菜单)
然后将字符串分语言整理到数组中
通过修改数组下表更新界面语言
有时需要调整一下控件大小



嗯,这个可以,我都实现过,多国语言动态切换是没问题的。


不过设置很多细节,具体我也记不起来了。


很后悔离开公司,源代码没给自己留一份。







对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



tajon1226

tajon1226 等级:

#26 得分:0 回复于: 2011-03-28 22:22:23



因为该代码还没真正用到市场去的,其实给自己留一份也不为过。

韩语是最麻烦的。God bless you!





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



syq13

syq13 等级:

#27 得分:0 回复于: 2011-03-28 22:23:42



点击菜单式加载其他语言的资源,必要时可以重绘一下窗口





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



hideforever

hideforever 等级:

#28 得分:0 回复于: 2011-03-29 23:23:37



写配置文件





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



uieasy

uieasy 等级:

#29 得分:0 回复于: 2011-03-30 19:24:57



建议参考下,notpad++这些著名的开源项目。





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



na2650945

na2650945 等级:

#30 得分:0 回复于: 2011-05-18 16:31:53



请问哪种方法实现多语言可以达到程序最小化。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论