亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

新設想——VC開發多語言界面支持的新招

2019-11-17 05:00:12
字體:
來源:轉載
供稿:網友
  最近在做一個小程序,要求實現對多語言界面顯示支持功能,并且,界面顯示內容用戶能夠自己設置?! 〕醪皆O計用INI文件來配置顯示內容,換一種語言的配置文件,就能夠更換整個系統的顯示語言??紤]到系統規模很小,周期又短,不想用太復雜的方案來解決這個問題,當參考了很多網上類似的設計和代碼,發現都不是很滿足?! ≈饕獑栴}在于:絕大多數基于INI文件配置這種簡單應有實現的代碼,都是針對組件ID固定加載,寫死了組件的ID號,比如:  以下是引用片段:  strCaption = fileManager.GetString(section,"IDC_Stc_ListStudent","");  SetDlgItemText(IDC_Stc_ListStudent,strCaption);  strCaption = fileManager.GetString(section,"IDC_Stc_AllContent","");  SetDlgItemText(IDC_Stc_AllContent,strCaption);  這樣:界面組件越多,加載代碼越長;每新增一個顯示窗口,又必須復制、粘貼類似的代碼,根據組件ID常量值來修改相關的加載項,很是不爽!  初步設想是:設計統一、通用的窗口組件Caption設置方法,對給定的Frame或Dialog等Window容器組件內的所以組件進行遍歷,當增、減顯示組件不對語言包加載代碼產生影響,達到自適應界面組件語言包加載效果?! ∵@樣就產生一個新問題:語言包配置文件中的Caption值如何跟相關的組件正確地一一對應?  好友文國慶建議:用xml文件來定義這種對應關系。這個想法觸動了我:反正就是一個[Key,Value]的數據,就用已經實現的INI配置文件也可以啊。于是所有問題解決!  具體設計是:語言包配置文件就直接設置成組件ID與組件顯示信息的Hash表,Key = Value的形式,比如:BTnOK組件的ControlID為“1003”,中文顯示Caption為“登錄”,語言包配置內容就是“1003=登錄”。  語言包的加載過程為2步實現:  首先,從語言包配置文件中,讀取所有配置的ID、Caption條目到Vector或者Array中?! ∑浯?,在遍歷指定窗口中所有組件時,每發現一個組件,就用其ID在已經加載的語言包數組中查找,找到就用配置的值修改組件Caption屬性;找不到,就認為是不需要動態配置,不做處理?! ∨渲梦募嵗骸 ∨渲庙椊忉專篠ection:[Login Dialog]:界面窗口;等號左邊:窗口中需要設置其Caption屬性的組件ID;等號左邊:窗口中需要設置其Caption屬性的組件Caption值;  [Login Dialog]  1001 = 用戶帳號  1002 = 用戶密碼  1017 = 登 錄  1018 = 退 出  語言包配置信息加載代碼:
以下是引用片段:
  BOOL CLanguageManager::loadFromFile()
  ...{
  BOOL bRead=FALSE;
  int i;
  ItemContext temp;
  CStringArray itemBuf,valueBuf;
  bRead = fileManager.GetSectionValues("Main Window",itemBuf,valueBuf);
  if(bRead)
  ...{
  for(i=0;i 
  ...{
  temp.UCtrlID = atoi(itemBuf.GetAt(i));
  temp.strContext = valueBuf.GetAt(i);
  m_vtContexts.push_back(temp);
  }
  }
  itemBuf.RemoveAll();
  valueBuf.RemoveAll();
  bRead = fileManager.GetSectionValues("Login Dialog",itemBuf,valueBuf);
  if(bRead)
  ...{
  for(i=0;i 
  ...{
  temp.uCtrlID = atoi(itemBuf.GetAt(i));
  temp.strContext = valueBuf.GetAt(i);
  m_vtContexts.push_back(temp);
  }
  }
  return bRead;
  }
  讀取語言包配置信息: 
以下是引用片段:
 BOOL CIniFile::GetSectionValues(CString Section, CStringArray &strItemBuf, CStringArray &strValueBuf)
  ...{
  BOOL bRead = FALSE;
  ReadIniFile();//打開文件
  if(bFileExist == FALSE  FileContainer.GetSize() < 0)
  return bRead;//文件打開出錯或文件為空,返回默認值
  int i = 0;
  int iFileLines = FileContainer.GetSize();
  CString strline,str;
  while(i 
  ...{
  strline = FileContainer.GetAt(i++);
  strline.TrimLeft();
  if(strline.GetLength()<=0)
  continue; //跳過空行
  if(strline.Left(2)=="http://")
  continue; //跳過注釋行
  if(strline.GetAt(0)=='[')//查找Section,第一個必須為[
  ...{
  str=strline.Left(strline.Find("]"));//去掉]右邊
  str=str.Right(str.GetLength()-str.Find("[")-1);//去掉[左邊
  str.TrimLeft();
  str.TrimRight();
  if(Section == str)//找到Section
  ...{
  while(i 
  ...{
  strline = FileContainer.GetAt(i++);
  strline.TrimLeft();
  if(strline.GetLength()<=0)
  continue; //跳過空行
  if(strline.GetAt(0)=='[')
  return bRead;//假如到達下一個[],即找不到,返回默認值
  if(strline.Left(2)=="http://")
  continue; //跳過注釋行
  str = strline.Left(strline.Find("="));//去掉=右邊
  str.TrimLeft();
  str.TrimRight();
  //保存等號左邊項
  strItemBuf.Add(str);
  str=strline.Right(strline.GetLength()-strline.Find("=")-1);//去掉=左邊
  str.TrimLeft();
  str.TrimRight();
  //保存等號右邊項
  strValueBuf.Add(str);
  bRead = TRUE;
  }
  //當前Section遍歷結束
  }
  //沒有找到Section
  }
  //當前行遍歷結束
  }
  return bRead;
  }
  修改指定組件Caption屬性代碼:
以下是引用片段:
  BOOL CLanguageManager::setControlCaption(CWnd * pCtrl, UINT ctrlID)
  ...{
  BOOL isOK=FALSE;
  for(int i=0;i
  ...{
  isOK = (m_vtContexts[i].uCtrlID==ctrlID);
  if(isOK)
  ...{
  pCtrl->SetWindowText(m_vtContexts[i].strContext);
  break;
  }
  }
  return isOK;
  }
  遍歷設置指定窗口所有組件Caption屬性代碼:  
以下是引用片段:
  void CLanguageManager::setCaptionForWindow(CWnd * pWnd)
  ...{
  //枚舉對話框中所有組件
  CWnd *pCtrl = pWnd->GetWindow(GW_CHILD);
  while(pCtrl!=NULL)
  ...{
  UINT ctrlID = pCtrl->GetDlgCtrlID();
  setControlCaption(pCtrl,ctrlID);
  pCtrl = pCtrl->GetNextWindow();
  }
  }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
上原亚衣av一区二区三区| 亚洲第一av网站| 欧美激情性做爰免费视频| 亚洲国产91精品在线观看| 日韩在线观看免费全| 国产精品jizz在线观看麻豆| 最新亚洲国产精品| 中文字幕亚洲综合久久| 91精品国产乱码久久久久久蜜臀| 亚洲电影免费观看高清完整版| 亚洲第一视频网站| 亚洲自拍欧美色图| 国产mv久久久| 精品色蜜蜜精品视频在线观看| 中文字幕亚洲情99在线| 久久精品国产一区二区电影| 久久影院中文字幕| 亚洲国产精品va| 欧美国产日韩二区| 日本一区二区三区四区视频| 精品一区二区亚洲| 日韩高清人体午夜| 成人av资源在线播放| 伊人伊人伊人久久| 欧美电影在线观看| 久久成人在线视频| 欧美丰满少妇xxxxx做受| 色与欲影视天天看综合网| 久久伊人91精品综合网站| 日韩av一卡二卡| www.日韩不卡电影av| 久久av中文字幕| 国产精品免费久久久久久| 亚洲欧美日韩中文在线制服| 日韩在线播放一区| 亚洲电影第1页| 欧美精品电影在线| 国产精品扒开腿做爽爽爽的视频| 国产日韩欧美91| 国产精品三级美女白浆呻吟| 亚洲一区二区三区视频播放| 中文字幕成人在线| 日韩av中文字幕在线播放| 97人洗澡人人免费公开视频碰碰碰| 精品久久久久久久久中文字幕| 日韩在线观看免费高清| 精品久久久久久久久久ntr影视| 日韩av一卡二卡| 91精品久久久久久久久不口人| 日韩电影免费观看中文字幕| 日本高清久久天堂| 亚洲欧美国产日韩天堂区| 亚洲bt欧美bt日本bt| 欧美性猛交视频| 91精品久久久久久久久| 91老司机在线| 91精品国产综合久久久久久久久| 国产精品第三页| 欧美日韩免费在线| 日韩激情片免费| 日韩人体视频一二区| 中文字幕亚洲一区在线观看| 亚洲欧美中文日韩v在线观看| 欧美中文字幕在线视频| 亚洲欧美国产精品久久久久久久| 国产一区私人高清影院| 国产精品久久久久久久久免费看| 亚洲精品美女在线观看| 久久av在线播放| 久久成人av网站| 亚洲欧洲国产一区| 久久精品欧美视频| 国产一区二区在线免费| 538国产精品一区二区免费视频| 欧美天天综合色影久久精品| 日韩欧美大尺度| 精品久久久久久久久久ntr影视| 国产成人精品久久二区二区91| 亚洲自拍av在线| 上原亚衣av一区二区三区| 日韩专区在线观看| 日本韩国欧美精品大片卡二| 亚洲新声在线观看| 狠狠久久亚洲欧美专区| 九九久久综合网站| 精品久久久久久电影| 欧美区在线播放| 欧美大片欧美激情性色a∨久久| 国产日韩在线亚洲字幕中文| 日韩亚洲第一页| 5566日本婷婷色中文字幕97| 91精品国产91久久久久久久久| 亚洲国内精品视频| 国产99久久精品一区二区 夜夜躁日日躁| 欧美专区在线播放| 日韩精品免费综合视频在线播放| 国产欧美一区二区白浆黑人| 亚洲电影成人av99爱色| 久久久久免费视频| 亚洲欧美日韩精品久久| 欧美xxxwww| 久久视频精品在线| 国产成人高清激情视频在线观看| 欧美最猛黑人xxxx黑人猛叫黄| 日韩av电影院| 青青草原成人在线视频| 在线观看免费高清视频97| 成人免费看片视频| 欧美日本亚洲视频| 久久伊人免费视频| 久久99国产精品久久久久久久久| 国产欧美精品日韩精品| 欧美性猛交xxxxx水多| 91色琪琪电影亚洲精品久久| 国产91久久婷婷一区二区| 91在线视频成人| 亚洲深夜福利网站| 欧美激情一区二区三区成人| 欧美视频免费在线| 97人人爽人人喊人人模波多| 亚洲第一中文字幕在线观看| 日韩欧美中文第一页| 97人洗澡人人免费公开视频碰碰碰| 欧美电影免费观看| 欧美国产精品人人做人人爱| 欧美精品在线免费观看| 亚洲肉体裸体xxxx137| 久久人91精品久久久久久不卡| 国产一区二区精品丝袜| 欧美激情国产精品| 欧美三级欧美成人高清www| 亚洲女人被黑人巨大进入al| 亚洲第一精品夜夜躁人人爽| 欧美成人久久久| 久久99热精品这里久久精品| 欧美日韩亚洲精品内裤| 一个人看的www久久| 亚洲天堂av高清| 久久69精品久久久久久国产越南| 亚洲精品免费av| 欧美午夜无遮挡| 亚洲视频在线观看| 色偷偷av一区二区三区乱| 亚洲精品资源在线| 热久久美女精品天天吊色| 国产日产欧美a一级在线| 丝袜亚洲欧美日韩综合| 国内精品久久久久影院 日本资源| 国产久一一精品| 97视频在线看| 欧美日韩国产中文字幕| 精品国产视频在线| 亚洲成av人影院在线观看| 国产精品自产拍高潮在线观看| 性欧美办公室18xxxxhd| 欧美最猛黑人xxxx黑人猛叫黄| 国产精品h片在线播放| 亚洲欧洲国产伦综合| 亚洲国产一区二区三区在线观看| 久久成人一区二区| 色吧影院999| 日韩成人中文字幕在线观看| 在线视频日韩精品| 黑人精品xxx一区一二区|