C++字符串完全指南(2) - MFC类
来源:互联网 发布:英语工具书推荐知乎 编辑:程序博客网 时间:2024/04/28 10:16
C++字符串完全指南(2) - MFC类
作者: 翻译:连波2002-11-22 12:50 PM
MFC类
CString
MFC的CString含有TCHAR,它的实际字符类型取决于预处理标记的设置。通常,CString象STL字符串一样是不透明对象,只能用CString的方法来修改。CString比STL字符串更优越的是它的构造函数接受MBCS和Unicode字符串。并且可以转换为LPCTSTR,因此可以向接受LPCTSTR的函数直接传递CString对象,不必调用c_str()方法。
// 构造CString s1 = "char string"; // 从LPCSTR构造CString s2 = L"wide char string"; // 从LPCWSTR构造CString s3 ( ' ', 100 ); // 预分配100字节,填充空格CString s4 = "New window text";// 可以在LPCTSTR处使用CString:SetWindowText ( hwndSomeWindow, s4 );// 或者,显式地做强制类型转换:SetWindowText ( hwndSomeWindow, (LPCTSTR) s4 );
也可以从字符串表加载字符串。CString通过LoadString()来构造对象。用Format()方法可有选择地从字符串表读取一定格式的字符串。
// 从字符串表构造/加载CString s5 ( (LPCTSTR) IDS_SOME_STR ); // 从字符串表加载CString s6, s7;// 从字符串表加载 s6.LoadString ( IDS_SOME_STR );// 从字符串表加载打印格式的字符串 s7.Format ( IDS_SOME_FORMAT, "bob", nSomeStuff, ... );
第一个构造函数看上去有点怪,但它的确是文档标定的字符串加载方式。
注意,CString只允许一种强制类型转换,即强制转换为LPCTSTR。强制转换为LPTSTR (非常量指针)是错误的。按照老习惯,将CString强制转换为LPTSTR只能伤害自己。有时在程序中没有发现出错,那只是碰巧。转换到非常量指针的正确方法是调用GetBuffer()方法。
下面以往队列加入元素为例说明如何正确地使用CString:
CString str = _T("new text");LVITEM item = {0};item.mask = LVIF_TEXT; item.iItem = 1; item.pszText = (LPTSTR)(LPCTSTR) str; // 错! item.pszText = str.GetBuffer(0); // 正确ListView_SetItem ( &item ); str.ReleaseBuffer(); // 将队列返回给str
pszText成员是LPTSTR,一个非常量指针,因此要用str的GetBuffer()。GetBuffer()的参数是CString分配的最小缓冲区。如果要分配一个1K的TCHAR,调用GetBuffer(1024)。参数为0,只返回指向字符串的指针。
上面示例的出错语句可以通过编译,甚至可以正常工作,如果恰好就是这个类型。但这不证明语法正确。进行非常量的强制类型转换,打破了面向对象的封装原则,并逾越了CString的内部操作。如果你习惯进行这样的强制类型转换,终会遇到出错,可你未必知道错在何处,因为你到处都在做这样的转换,而代码也都能运行。
- C++字符串完全指南(2) - MFC类
- C++字符串完全指南(2) - MFC类
- C++字符串完全指南(2) - MFC类
- C++字符串完全指南(2) - MFC类
- 转载:C++字符串完全指南(2) - MFC类-CString
- C++字符串完全指南 - MFC类
- C++字符串完全指南 - 各种字符串类
- C++字符串完全指南 - 各种字符串类
- C++字符串完全指南
- C++字符串完全指南(2)
- C++字符串完全指南(2) - 各种字符串类- CRT类
- C++字符串完全指南(2) - 各种字符串类- CRT类
- C++字符串完全指南(2) - 各种字符串类- CRT类
- C++字符串完全指南(2) - 各种字符串类- CRT类
- C++字符串完全指南(2) - 各种字符串类- CRT类
- C++字符串完全指南(2) - 各种字符串类(一)
- C++字符串完全指南(2) - 各种字符串类(一)
- C++字符串完全指南(2) - 各种字符串类(一)
- Java 繁体中文处理完全攻略 -- 简体中文参照操作即可
- Jakarta Struts应用框架介绍(转帖)
- 使用API函数修改注册表
- 超线程名词解释(转)
- 让程序在Windows CE系统启动时自动运行
- C++字符串完全指南(2) - MFC类
- 转换成unicode,转换成其他编码
- spring随笔
- Windows XP操作系统进程分析
- 如何删除双系统启动符??
- 终于学会游泳了。^o^
- 2006发展趋势--双核心是热点
- [作废]VB.net技巧之四------为按钮添加 "确认" 对话框
- Oracle备份与恢复案例