• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 通過ini實現多語言菜單

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    下載本文的演示及源代碼(26K) http://263.csdn.net/FileBBS/files/2001_9/T_572_1.zip 從前看過vc知識庫上一篇《實現多語言菜單》的文章。那篇文章里采用的方法是在資源里定義兩個菜單,一個英文,一個中文... 要是程序要作成100國語言的用那種方法就十分不
    下載本文的演示及源代碼(26K)  
    http://263.csdn.net/FileBBS/files/2001_9/T_572_1.zip

        從前看過vc知識庫上一篇《實現多語言菜單》的文章。那篇文章里采用的方法是在資源里定義兩個菜單,一個英文,一個中文...

        要是程序要作成100國語言的用那種方法就十分不妥了。原因是軟件作者不可能會100國語言....最主要的是那樣十分不方便!

        最好的辦法就是把菜單存到ini文件里,由用戶自行定義菜單(要改成什么就改成什么)。


        下面111222嘗試用ini儲存菜單做了一個演示工程。實現了通過ini修改菜單項,通過這個你可以輕松的修改菜單的語言,內容,更主要的是你可以把這些工作交給熱心的用戶....當然,這只是簡單的實現,還存在兩個問題,希望你能夠幫我完善它。


        首先,要修改菜單項,你要熟悉CMenu的幾個函數。

        
        GetMenuItemCount();
        //獲取菜單項數目

        GetMenuItemID(UNIT i);  
        //獲取菜單項i的ID,這里ID為0代表分割線,-1為POPUP菜單項。

        GetMenuString( UINT nIDItem, CString& rString, UINT nFlags );
        //獲取菜單項的字符串

        ModifyMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );
        //修改菜單項,這里我們主要是修改第4個參數,改變菜單的文字。


    接下來我寫了一個函數,利用遞歸遍歷所有的菜單項按照ini文件的設置修改菜單項:


    //函數聲明 MainFrm.h
    void InitMenu(CMenu* menu);


    /////////////////////////////////////////////////
    //功能:多語言菜單 MainFrm.cpp
    //原理:遍歷菜單項,替換菜單項文字為ini文件中的對應值
    //// by 111222 9月13日
    /////////////////////////////////////////////////
    void CMainFrame::InitMenu(CMenu* menu)
    {
    if(menu==NULL)
      return;
    int nCount = menu->GetMenuItemCount();//獲取該層菜單數
    for(int i=0;i<nCount;i++)//遍歷所有菜單項
    {
      int id = menu->GetMenuItemID(i);//查看菜單屬性,id=0為分割線,-1為popup菜單
      if(id==0)
      {}
      else if(id==-1)
      {
       CString strText;
       menu->GetMenuString (i, strText, MF_BYPOSITION);//獲取菜單文字
       CString cs = AfxGetApp()->GetProfileString("menu",strText,strText);//讀取菜單項在ini里的文字
       menu->ModifyMenu(i,MF_STRING|MF_BYPOSITION,id,cs);
       
       
       //   下面這行可有可無,用這個免得我們手工編輯ini,發布的版本里注釋掉
       AfxGetApp()->WriteProfileString("menu",strText,cs);
       
       CMenu* pSub = menu->GetSubMenu(i);
       InitMenu(pSub);//遞歸,遍歷popup菜單
      }
      else
      {
       CString strText;
       menu->GetMenuString (i, strText, MF_BYPOSITION);
       CString cs = AfxGetApp()->GetProfileString("menu",strText,strText);
       menu->ModifyMenu(i,MF_STRING|MF_BYPOSITION,id,cs);
       
       
       //   下面這行可有可無,用這個免得我們手工編輯ini,發布的版本里注釋掉
          AfxGetApp()->WriteProfileString("menu",strText,cs);
      }
    }
    }


    函數的調用:

    在CMainFrame::OnCreate的中填加上


        //multi language menu
        CMenu* pMenu = GetMenu();
        InitMenu(pMenu);


    至此通過ini實現多語言菜單結束了。
    具體可以看演示程序。

    menu.ini中儲存著每個菜單項的文字,你只需要修改值就可以改換菜單語言。

    上面程序的不足:

    沒能修改Prompt的文字(就是在狀態欄上顯示的提示)
    沒能顯示快捷鍵(菜單的為new Ctrl N的話將不正常)

    這兩個不足我還沒有著手解決,希望能解決的也給我些提示   111222@0451.com

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>