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 );
IDC_BTN_CHANGECAP需要改变的对象ID,
changing_caption改变后的文字。办法笨拙了点,我再想想
这个你到网上看看,相关链接很多,不过我还是喜欢DLL,好扩展。
(欧去趟学校=》被抓了@.@,回来继续)MARK
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
);
dll不太好,因为涉及到动态加载,改变语言的时候看着不爽,明显能看出刷屏的痕迹。
ini文件的方式没有这个问题,但是扩展不好扩,主要是需要维护段名和关键字这些东西,维护起来很麻烦,有些时候还容易弄乱
======================================================================================================================
现在做wince了,ini文件不支持了,网上虽然有wince下读ini的源程序,但是这个方式也的确有点古老,放弃了
dll我知道它刷屏的缺点,所以也没用
于是我用了最简单的方法就是7楼说的SetWindowText
将所有字符串都写到程序里,在框架一级做一个通用接口,所有的显示窗体类都有这个接口,之后改变语言的时候调用该接口
用SetWindowText显示出来就可以了,维护起来只需要维护某一个窗体的接口就可以了
既简单速度又快,不好的地方占用程序内存大概是十几k
================================================================================================================
另外可以用xml做,但是wince下,dom那个东西我实在不想用,而且个人认为xml和ini的原理也差不多,也麻烦只有写死的方法最简单省事
方法2:动态改变菜单的文字
方法3:做两个菜单一个中文一个英文 id相同根据语言设置加载不同的菜单
最好的方法就是方法三,省事就是美呵呵
方法三不用什么吧
switch(语言)
case 中文:
LoadMenu(中文菜单);
case 英文:
LoadMenu(英文菜单);
只是菜单不同,里边的控件id一样就可以,响应函数就是相同的了
这多省事啊