Chinaunix首页 | 论坛 | 博客
  • 博客访问: 110587
  • 博文数量: 52
  • 博客积分: 2050
  • 博客等级: 大尉
  • 技术积分: 451
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-06 15:52
文章分类

全部博文(52)

文章存档

2011年(1)

2010年(2)

2009年(49)

我的朋友

分类:

2009-09-25 08:34:22

双语切换流程
有两个语言文件,格式等同于INI文件
在每个页面初始化的时候,得到目前的语言选线,英文or中文(设置变量可实现)
从相应的INI文件中读取对应字段(读取文件操作)
关键代码
 


CString LanguageLoadString( CString strKey, CString strID, CString strDefault, CString

strFileName )
{
    CString strValue;
    DWORD dwSize = 1000;
    CString strFilePath = g_AppSDKPath + strFileName;

    GetPrivateProfileString( strKey,
                             strID,
                             strDefault,
                             strValue.GetBuffer(dwSize),
                             dwSize,
                             strFilePath );

    strValue.ReleaseBuffer();

    strValue.Replace( _T("\\n"), _T("\n") ); //替换回换行符号


    return strValue;
}


如何读取文件路径strFileName ,这里必须用绝对路径。绝对路劲可以用两种方法,一种是在安装的时候

通过安装文件脚本写入到注册表中去,这里读取。一种是在读取的时候用getCurrentDirectory,关键代

码如下:


CString server_ip;
CString des="";
::GetCurrentDirectory(MAX_PATHLENGTH,des.GetBuffer(MAX_PATHLENGTH));
des.ReleaseBuffer();
des+="\\config.ini";
GetPrivateProfileString("PhoneDemo","Server_IP","",server_ip.GetBufferSetLength(15),15,des);
server_ip.ReleaseBuffer();



如果点击变化语言的时候,是当前页面怎么办?这个时候页面初始化的时候,已经load过语言选项了。这

个时候可以重新执行一遍load,并且存储在注册表中或者INI文件中,用来下次启动的时候,直接选取相

应的选项。
具体如下:
用getdlgitem得到要设置的控件,一般为static text,然后用setwindowtext设置。如果是menu的话,可

以写一个专门的菜单变化类来控制。

-----------------------------------
注意:在这里使用CString变量时,在使用完GetBuffer后,紧接着一定要使用ReleaseBuffer()函数,才

可以进行其他的诸如字符串+操作
If you use the pointer returned by GetBuffer to change the string contents, you must call

ReleaseBuffer before using any other CString member functions. (摘自MSDN)

Cstring的用法,为什么要getBuffer,releaseBuffer ?
个人理解,作为一个buffer的字符串,便于操作。


sendmessage 发生指定的消息给一个窗口,或者多个窗口。
postmessage 发生给线程。


 

阅读(390) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~