在ATL和MFC中都可以使用CString类来处理字符串,如果在MFC中要使用ATL中的CString,需要使用名字空间ATL::CString。在书写中,可以使用CStringT,CStringA,CStringW三种格式,如果是UNICODE工程,CStringT等同于CStringW,如果是ANSI工程,CStringT等同于CStringA.下面介绍几个常用的CString使用技巧。
1.模仿.NET中的split方法
在.NET里的string类中有个split方法,即传入一个字符参数,根据这个参数来分割字符串,然后返回一个string数组。而CString 的Tokenize方法也同样可以达到这个效果。以下看示例代码
上述代码的含义,即对 videoInfo字符串以关键字'_'进行分割,然后将分割的内容传入m_list容器中,这种方法对于在ATL或者MFC中分割字符串很有帮助。
2.判断CString为空的高效方法
在程序中往往会对CString判断是否为空,方法有几种,比如GetLength()是否为零,或者直接判断是否等于_T(""),或者使用IsEmpty()方法来判断。
在实际使用时,建议使用IsEmpty()方法,其他方法可能占用线性时间。
3.和ATL的USES_CONVERSION宏配合
如果在使用A2W或者W2A方法,需要在该函数的开头使用USES_CONVERSION;宏,这样就可以很方便的在代码中转换ANSI和UNICODE,比如
USES_CONVERSION;
CStringW support;
support = A2W(Attri->Value());
其中需要说明的是,对于转换的变量,可以是一个CStringA对象,可以是一个char*指针,编译器会对上述表达进行相应的转换。
4.字符串的判断
针对两个字符串,可能存在三种情况,大于、等于、小于,Compare和CompareNoCase都可以进行字符串的判断,CompareNoCase没有进行大小写的判断。
5.在COM组件的接口传递
在COM组件中,常使用BSTR或者BSTR*来进行参数的传递,对于外部的BSTR传入,可以在CString的构造函数中承接这个BSTR,比如
STDMETHODIMP CMessageSignIn::SetUserName(BSTR pUserName)
{
CString userName(pUserName);
return S_OK;
}
在上述的函数中,构造函数承接了BSTR的参数值。
如果是想分配一个值给外部BSTR*,可以使用AllocSysString()方法
6.获取临时文件夹的路径
CStringW tmpPath;
tmpPath.GetEnvironmentVariable( _T("TEMP") );
tmpPath += _T("//UserContent.ini");
在上述方法中,GetEnvironmentVariable传入参数后,就可以获得当前临时文件夹的路径了。