MFC下的各种字符串类型和相互转换
2016-04-28 10:42
417 查看
MFC下的常用字符串数据类型表示的含义:
L:Long 长 P:Point 指针 C:Const
常量 W:Wchar_t 宽字符 T:TCHAR STR:String 字符串
在看看MFC下各种数据类型的定义:
MFC下提供的ATL 转换宏:
T2A T2W T2CA T2CW W2A W2CA W2T W2CT A2W A2CW A2T A2CT
T:TCHAR 2:To C:CONST A:CHAR(ANSI) W:WCHAR
先到atlconv.h头文件下看看这些宏的定义,
1.USES_CONVERSION:注意int _convert; (_convert);这种用法是为了屏蔽编译器的警告:未引用的局部变量。。。
可见,USES_CONVERSION宏定义了一些转换所需要的变量,如_convert。所以使用那些宏的时候必须加上该宏。
2.A2W:这里就用到了USES_CONVERSION宏定义的_convert变量
3.ATLA2WHELPER
4.AtlA2WHelper:实际上还是在调用MultiByteToWideChar,即多字节转换为宽字节
5.alloca
6._alloca:该函数从堆上分配以字节为单位的内存,返回void *
使用方法举例:
L:Long 长 P:Point 指针 C:Const
常量 W:Wchar_t 宽字符 T:TCHAR STR:String 字符串
在看看MFC下各种数据类型的定义:
1 typedef char *LPSTR; 2 typedef const char *LPCSTR; 3 4 typedef wchar_t *LPWSTR; 5 typedef const wchar_t *LPCWSTR; 6 typedef wchar_t WCHAR; 7 8 #ifdef UNICODE 9 typedef LPCWSTR LPCTSTR; 10 typedef WCHAR TCHAR; 11 12 #else 13 typedef LPCSTR LPCTSTR; 14 typedef char TCHAR;
MFC下提供的ATL 转换宏:
T2A T2W T2CA T2CW W2A W2CA W2T W2CT A2W A2CW A2T A2CT
T:TCHAR 2:To C:CONST A:CHAR(ANSI) W:WCHAR
先到atlconv.h头文件下看看这些宏的定义,
1.USES_CONVERSION:注意int _convert; (_convert);这种用法是为了屏蔽编译器的警告:未引用的局部变量。。。
#ifndef _DEBUG #define USES_CONVERSION int _convert; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw; (_lpw); LPCSTR _lpa; (_lpa) #else #define USES_CONVERSION int _convert = 0; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw = NULL; (_lpw); LPCSTR _lpa = NULL; (_lpa) #endif
可见,USES_CONVERSION宏定义了一些转换所需要的变量,如_convert。所以使用那些宏的时候必须加上该宏。
2.A2W:这里就用到了USES_CONVERSION宏定义的_convert变量
1 #define A2W(lpa) (\ 2 ((_lpa = lpa) == NULL) ? NULL : (\ 3 _convert = (lstrlenA(_lpa)+1),\ 4 (INT_MAX/2<_convert)? NULL : \ 5 ATLA2WHELPER((LPWSTR) alloca(_convert*sizeof(WCHAR)), _lpa, _convert, _acp)))
3.ATLA2WHELPER
1 #define ATLA2WHELPER AtlA2WHelper
4.AtlA2WHelper:实际上还是在调用MultiByteToWideChar,即多字节转换为宽字节
1 _Ret_opt_z_cap_(nChars) inline LPWSTR WINAPI AtlA2WHelper(_Out_z_cap_(nChars) LPWSTR lpw, _In_z_ LPCSTR lpa, _In_ int nChars, _In_ UINT acp) throw() 2 { 3 ATLASSERT(lpa != NULL); 4 ATLASSERT(lpw != NULL); 5 if (lpw == NULL || lpa == NULL) 6 return NULL; 7 *lpw = '\0'; 8 int ret = MultiByteToWideChar(acp, 0, lpa, -1, lpw, nChars); 9 if(ret == 0) 10 { 11 ATLASSERT(FALSE); 12 return NULL; 13 } 14 return lpw; 15 }
5.alloca
#define alloca _alloca
6._alloca:该函数从堆上分配以字节为单位的内存,返回void *
1 void *_alloca( 2 size_t size 3 );
使用方法举例:
1 USES_CONVERSION;//USES_CONVERSION是ATL中的一个宏定义,用于编码转换,它定义了转换宏所需的一些局部变量 2 3 WCHAR *pWch = L"WCHAR* TO CHAR*"; 4 CHAR *pCh = W2A(pWch); 5 6 TCHAR *pTch = _T("TCHAR* TO CHAR*"); 7 CHAR *pCh2 = T2A(pTch);
相关文章推荐
- Visual C++中MFC消息的分类
- MFC中Radio Button的用法详解
- MFC对话框中添加状态栏的方法
- MFC创建右键弹出菜单的方法
- MFC中动态创建控件以及事件响应实现方法
- C++ 关于MFC多线程编程的注意事项
- MFC程序对文件的处理方法
- MFC自定义消息的实现方法
- MFC实现在文件尾追加数据的方法
- MFC之ComboBox控件用法实例教程
- MFC绘制不规则窗体的方法
- IE8引发 VS2005/2008 MFC向导出错的解决方案
- MFC实现全屏功能代码实例
- 使用VS2010创建MFC ActiveX工程项目
- C++中MFC Tab Control控件的使用详解
- MFC程序设计常用技巧汇总
- MFC扩展DLL中导出类和对话框的实现方法
- VC中SDK与MFC的区别浅析
- 浅谈MFC 改变控件大小和位置
- VC MFC非模态对话框的实现方法