zoukankan      html  css  js  c++  java
  • 界面的多语言切换/通过读取xml文件实现

    利用窗口遍历函数:

    基本信息  函数功能:枚举一个父窗口的所有子窗口。

      函数原型:

      BOOL EnumChildWindows(HWND hWndParent,WNDENUMPROC lpEnumFunc, LPARAM lParam);

      各个参数如下:

      HWND hWndParent 父窗口句柄

      WNDENUMPROC lpEnumFunc 回调函数的地址

      LPARAM lParam 自定义的参数

      注意:回调函数的返回值将会影响到这个API函数的行为。如果回调函数返回true,则枚举继续直到枚举完成;如果返回false,则将会中止枚举。BOOL

    其中回调函数实现如下:

    int g_iEngChinese = 1; //为1则切换成中文
    CXML pXml; //定义为全局对象,非指针变量,避免内存泄露

    BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lparam)
    {
     pXml.Load("./Debug/Caption.xml");
     int lID = GetDlgCtrlID(hwnd); //根据窗口句柄获取它的id,生成在xml文件中用于查找的节点标石
     int iCount = 0;

    //特殊id,先行处理,不做替换,直接return

     if (IDC_BUTTON_SWITCH == lID)
     {
      return TRUE;
     }

     if (lID >= 100000)
     {
      iCount = 6;
     }
     else if (lID >= 10000)
     {
      iCount = 5;
     }
     else if (lID >= 1000)
     {
      iCount = 4;
     }
     else if (lID >= 100)
     {
      iCount = 3;
     }
     else if (lID >= 10)
     {
      iCount = 2;
     }
     else
     {
      iCount = 1;
     }
     
     char strID[10] = {0};
     itoa(lID, strID, 10);


     for (; iCount >= 1; --iCount)
     {
      strID[iCount] = strID[iCount - 1];
     }
     strID[0] = 'A';


     //读取xml文件的公共操作,放在分支之前,代码复用
     pXml.RestPos();
     pXml.FineElem("id");

     if (1 == g_iEngChinese) //两个分支必走一支
     {
      pXml.FineChildElem("Chinese");
      pXml.intoElem();
      pXml.FindChildElem(strID);

      CWND::FromHandle(hwnd)->SetWindowText((LPCSTR)(pXml.GetChildData().c_str())); //根据窗口句柄设置空间的caption


      return TRUE; //返回TRUE,继续遍历其他子窗口,否则遍历将结束
     }
     else
     {
      pXml.FineChildElem("English");
      pXml.intoElem();
      pXml.FindChildElem(strID);

      CWND::FromHandle(hwnd)->SetWindowText((LPCSTR)(pXml.GetChildData().c_str()));


      return TRUE;

     }

    }

    调用窗口遍历函数形式:

     EnumChildWindows(HWND hWndParent,WNDENUMPROC lpEnumFunc, LPARAM lParam);

     EnumChildWindows(AfxGetApp()->m_pMainWnd, EnumChildProc, 0);

    xml文件的使用和xml文件的创建:

    <id> //必须有这个节点,

        <Chinese> //这个已经id的子节点

        <A1003 name = "IDC_BUTTON"> </A1003> //首字母必须为大写,是Chinese的子节点

      </Chinese>

      <English>

        </A1003 name = "IDC_BUTTON">HandeBook</A1003>

      </English>

    </id>

  • 相关阅读:
    iOS汇编系列-汇编入门
    C开发系列-指针
    iOS开发系列-LLVM、Clang
    java开发系列-Http协议
    iOS开发系列-SQLite
    iOS逆向系列-theos
    <Java><类加载机制><反射>
    <Java><!!!><面试题>
    <Java><修饰符>
    <Java><类与对象><OOP>
  • 原文地址:https://www.cnblogs.com/laorenjia/p/2149359.html
Copyright © 2011-2022 走看看