12月中旬——学习语言切换的实现

语言切换的实现,主要是指在一个软件中,由于有不同的语言,而用户是可以选择不同的语言来展示UI的,那么是怎么做到的呢?大体是通过一个map记录下这个软件会用到的所有的语言,记录在内存中。展示的时候根据int的ID就可以查询到对应的语言的字符串,由于log(n),时间效率还是非常快的。当切换语言的时候,就载入不同的语言文本文件(比如说ini, json),再通过观察者模式去通知每一个已展示的控件(不要求观察者模式也可以,可以让用户手动刷新或者重启)

这个过程中涉及,并且学习到的知识点:

(1)string这个类里面有非常多的成员函数,多使用API,少自己实现,安全可靠,还减少代码行数,不造重复的轮子:

比如说:  string库中,去掉左边和右边的空格的函数:

str.erase(0,s.find_first_not_of(" "));
str.erase(s.find_last_not_of(" ") + 1);

string的赋值或者拷贝构造函数都可以传入一个const char *(字符数组)——这是特别方便的。

(2)LPCTSTR的使用

和很多windows的东西一样这是一个宏, Long Pointer to Const T(通用的) STRing, 在Unicode版本下它就是LPCWSTR,否则就是LPCSTR(谨记一点,这个世纪绝大部分的windows应用程序都是Unicode版本的了)

它可以和MFC的CString互换,和const char * (也就是char sz[100] = {0}这样的字符数组罗 )互换

(3)windows的安全开发,比如说 wcsncpy_s, sprintf_s

(4)windows sdk的EnumThreadWindows函数

和dfs类似,枚举所有递归子窗口

(5)获取时间的简单方法:

SYSTEMTIME T;
::GetLocalTime(&T);

(6)

_countof 宏    数组中的元素数
GdiplusStartup 函数
CrtSetDbgFlag  调试相关 

GetWindowsVer()  函数 

(7)看《windows程序设计》学习定时器知识:

设置定时器的方法一:

SetTimer(hwnd, iTimerID, iMsecInterval, NULL);

方法二: 

SetTimer(hwnd,iTimerID,iMsecInterval,TimerProc); 

采用回调函数,回调函数必须定义为CALLBACK类型,因为windows是从程序的代码空间以外调用这个函数的,计时器的回调函数并不返回数值给Windows

当回调函数与计时器同时使用时,参数实际上和窗口过程函数一样,不过定义不同

方法三:

iTimerID = SetTimer(NULL, 0, iMsecInterval, TimerProc)   //hwnd参数设置为NULL
(8)接触到TimePoint和std::chrome::time_point的用法,记不住,用到再查吧。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值