title = new char[pFrame->GetWindowTextLengthW() + 1 ] ;
pFrame->GetWindowTextW(title,pFrame->GetWindowTextLengthW() + 1) ;
pFrame->MessageBoxW("Document not saved!\nWill you close it?",title,MB_YESNO )
第2句是要把title 转到LPTSTR,第3句要转到LPCTSTR 高手帮帮我,谢谢
顺便问下,CTSTR这么恶心的宏谁发明的,严重困扰了人们的日常生活.
首先,我们看LPCTSTR的定义(VC/MFC的源代码中可以找到,这里为了便于理解,简化一下):
#ifdef UNICODE从这里我们可以看出,在非UNICODE模式下,LPCTSTR就是char* 的常量指针,而UNICODE下,是双字节常量指针。
拆解LPCTSTR的定义,LP代表“远”指针(参考C/C++指针定义),C代表const常量,T代表TCHAR可变字符,STR代表string字符串,综合起来,就是可变字符常量指针。
因此在非UNICODE下,我们可以直接将char数组通过强制转换变成LPCTSTR,但在UNICODE环境下,这是不行的:
char a[] = "123";VC/MFC编程,推荐能够自适应UNICODE和非UNICODE(多字节字符集)两种模式,这里我们可以不管是否UNICODE,都实现转换,VC为我们提供了多种转换方法:
如果是常量字符串数组,我们可以直接使用_T("")这个宏来实现:
LPCTSTR pStr = _T("123");在非MFC环境下,稍微麻烦一些,ATL中有A2W宏可以使用,SDK中,就只能使用MultiByteToWideChar函数做编码转换了。