在MFC/C++中,我有一个rich edit 2.0控件,类
CRichEditCtrl
,即RichEdit20W
。 Rich edit 2.0 控件应该支持 Unicode。我用它来显示 Unicode 字符。但 ReplaceSel
函数不接受 Unicode 字符串。例如
CRichEditCtrl re;
wstring line;
auto x = line.c_str(); // array of const wchar_t
re.ReplaceSel(x); // ERROR
出现编译器错误,因为
CRichEditCtrl::ReplaceSel
的原型为
void ReplaceSel(LPCTSTR lpszNewText, BOOL bCanUndo = FALSE);
并且
LPCTSTR
是 const char *
。
如何使用 Unicode 字符串进行替换?
Windows 11 专业版 Visual Studio 2022
如果
LPCTSTR
是 const char *
那么您的项目设置是多字节字符而不是 unicode。答案很简单,您必须使用您喜欢的转换函数将 unicode 字符串转换为 ansi,例如 WidecharToMultibyte()
、wcstombs()
或 std::codecvt
。请注意,您正在将字符串转换为能够表示“更少”字符值的类型,即这些函数可能会失败。