区别是UpdateData(FALSE)更新的是窗口中所有编辑框中的内容,而SetDlgItemText只更新特定的编辑中的内容。
Unicode库,字符串需要用_T(),CString动态分配内存空间,LPCTSTR是在Unicode环境下const char*的宏定义。
CString s;
int i = 64;
s.Format("%d", i);
Windows使用两种字符集ANSI和Unicode,前者在处理英文字符时使用单字节方式,在处理中文字符时使用双字节方式。后者不管是英文字符还是中文字符都是采用双字节方式表示。ANSI(即MBCS):为多字节字符集。字符集的选择在项目-----属性----配置属性-----常规里。
_T是一个适配宏。当定义了_UNICODE时,_T和_L相同;否则,_T的字符串采用ANSI编码方式。_L不管你是以什么方式编译,一律以Unicode方法保存。
LPSTR:指向一个字符串的32位指针,每个字符占1个字节。
LPCSTR:指向一个常量字符串的32位指针,每个字符占1个字节。
LPTSTR:指向一个字符串的32位指针,每个字符可能占1个字节或2个字节。
LPCTSTR:指向一个常量字符串的32位指针,每个字符可能占1个字节或2个字节。
ansi情况下,LPCTSTR 就是 const char*,而LPTSTR 就是 char*。CString 和 LPCTSTR 基本可以通用。CString 转换到 LPTSTR (char*), 预定的做法是调用CString的GetBuffer函数,使用完毕之后一般都要再调用ReleaseBuffer函数来确认修改。CString是CStringT的一种,CStringT是从CSimpleStringT继承来的。GetBuffer是CSimpleStringT的函数。
If nMinBufferLength is greater than the length of the current buffer, the call toGetBuffer destroys the current buffer, replacing it with a buffer of the requested size and resetting the reference count to zero.
If count is less than or equal to the length ofstrSource, a null character is not appended automatically to the copied string. Ifcount is greater than the length of strSource, the destination string is padded with null characters up to lengthcount。
CString strTest("test");
_tcsncpy(strTest.GetBuffer(10), _T("Taw234"), 7);
int sizeOfBuffer = strTest.GetAllocLength();
strTest.ReleaseBuffer();
当从一个CString产生另一个CString并不复制它的字符缓冲区内容,而只是将字符缓冲区的"引用计数"加1。