VC6下怎样实现中英文按钮?中英文菜单已经实现,我想同时将程序里面的按钮也随菜单变成英文,要怎样做?请各位高手

解决方案 »

  1.   

    显示语言是在进入程序界面前定,还是需要在运行中选择显示语言动态改变?把各显示字串作为资源或者变量存储,使用DLL或者其他方式载入。你自己的要求是什么?
      

  2.   

    可以做成ini文件在更换语言时直接读入到变量中来完成多语言
      

  3.   

    显示字串作为资源或者变量存储,这个不用说了吧。显示语言要动态改变,GetDlgItem(IDC_BTN_CHANGECAP)->SetWindowText("changing_caption");
    IDC_BTN_CHANGECAP需要改变的对象ID,
    changing_caption改变后的文字。办法笨拙了点,我再想想
      

  4.   


    这个你到网上看看,相关链接很多,不过我还是喜欢DLL,好扩展。
    (欧去趟学校=》被抓了@.@,回来继续)MARK
      

  5.   

    ini文件中可以这样写:
    language=English
    edit1=list
    edit2=process
    edit3=...
    然后读到变量中再利用5楼的方法使用就可以了ini文件相关的一些api:  UINT   GetProfileInt(   
          LPCTSTR   lpAppName,     //   section   name   
          LPCTSTR   lpKeyName,     //   key   name   
          INT   nDefault                 //   default   value   if   key   name   not   found   
      );   
      UINT   GetPrivateProfileInt(   
          LPCTSTR   lpAppName,     //   section   name   
          LPCTSTR   lpKeyName,     //   key   name   
          INT   nDefault,               //   return   value   if   key   name   not   found   
          LPCTSTR   lpFileName     //   initialization   file   name   
      );   
        
      DWORD   GetPrivateProfileString(   
          LPCTSTR   lpAppName,                 //   section   name   
          LPCTSTR   lpKeyName,                 //   key   name   
          LPCTSTR   lpDefault,                 //   default   string   
          LPTSTR   lpReturnedString,     //   destination   buffer   
          DWORD   nSize,                             //   size   of   destination   buffer   
          LPCTSTR   lpFileName                 //   initialization   file   name   
      );   
        
      BOOL   WritePrivateProfileString(   
          LPCTSTR   lpAppName,     //   section   name   
          LPCTSTR   lpKeyName,     //   key   name   
          LPCTSTR   lpString,       //   string   to   add   
          LPCTSTR   lpFileName     //   initialization   file   
      );   
        
      

  6.   

    顶8楼。楼主,你要做多语言版,添加修改都在INI中了。
      

  7.   

    正解,笨办法往往是好办法,按钮类是CWnd的派生类,使用SetWindowText很方便的。
      

  8.   

    再部下,SDI下创建的一个工具栏.点击工具栏的一个按钮,弹出一个菜单,怎样来将这个弹出的菜单可以实现中英文动态切换?
      

  9.   

    再问下,SDI下创建的一个工具栏.点击工具栏的一个按钮,弹出一个菜单,怎样来将这个弹出的菜单可以实现中英文动态切换?
      

  10.   

    以前我做xp下开发的时候dll和ini方法做中英文我都用过 
    dll不太好,因为涉及到动态加载,改变语言的时候看着不爽,明显能看出刷屏的痕迹。
    ini文件的方式没有这个问题,但是扩展不好扩,主要是需要维护段名和关键字这些东西,维护起来很麻烦,有些时候还容易弄乱
    ======================================================================================================================
    现在做wince了,ini文件不支持了,网上虽然有wince下读ini的源程序,但是这个方式也的确有点古老,放弃了
    dll我知道它刷屏的缺点,所以也没用
    于是我用了最简单的方法就是7楼说的SetWindowText
    将所有字符串都写到程序里,在框架一级做一个通用接口,所有的显示窗体类都有这个接口,之后改变语言的时候调用该接口
    用SetWindowText显示出来就可以了,维护起来只需要维护某一个窗体的接口就可以了
    既简单速度又快,不好的地方占用程序内存大概是十几k
    ================================================================================================================
    另外可以用xml做,但是wince下,dom那个东西我实在不想用,而且个人认为xml和ini的原理也差不多,也麻烦只有写死的方法最简单省事
      

  11.   

    再问下,SDI下创建的一个工具栏.点击工具栏的一个按钮,弹出一个菜单,怎样来将这个弹出的菜单可以实现中英文动态切换?
      

  12.   

    CreatePopupMenu、AppendMenu、TrackPopupMenu。
      

  13.   

    方法1:重载CMenu类 实现同样的接口 启动的时候自动调用
    方法2:动态改变菜单的文字
    方法3:做两个菜单一个中文一个英文 id相同根据语言设置加载不同的菜单
      

  14.   

    里边控件的id相同,不是菜单id相同呵呵
      

  15.   

    啊这还不详细啊
    最好的方法就是方法三,省事就是美呵呵
    方法三不用什么吧
    switch(语言)
    case 中文:
       LoadMenu(中文菜单);
    case 英文:
       LoadMenu(英文菜单);
    只是菜单不同,里边的控件id一样就可以,响应函数就是相同的了
    这多省事啊