如何通过GetWindowText获取不同的语言文本? 我修改了一个白板项目。当用户在白板中键入时,将调用onchange函数并将在白板中显示文本。但是,当我输入日文文本(非系统默认语言)时,它会显示"?"代替。以下是onchange的代码spinet。
void CHBEdit::OnChange()
{
static bool bChanged = true;
CDC *pDC = GetDC();
if (bChanged) {
CString str;
GetWindowText(str);
m_strText = str;
int iStartChar, iEndChar;
GetSel(iStartChar, iEndChar);
CRect rect;
GetWindowRect(&rect);
CFont *Oldfont = (CFont *)pDC->SelectObject(&m_Font);
CSize size = pDC->GetOutputTextExtent(str); //+ "a");
pDC->SelectObject(Oldfont);
SetWindowPos(NULL, 0, 0, size.cx, size.cy, SWP_NOMOVE);
bChanged = false;
SetWindowText(str);
SetSel(iStartChar, iEndChar);
}
else
bChanged = true;
ReleaseDC(pDC);
}
我是C ++的新手。我做了研究并尝试过使用UTF8 unicode的GetwindowTextW,但它仍然显示"?"。也许逻辑错了。
如果有人能给我解决方案在白板上显示不同的语言文本,我将不胜感激。谢谢。
答案 0 :(得分:1)
GetWindowTextW
是正确的方法。 Windows使用UTF16 Unicode标准,wchar_t
宽字符串。 UTF8标准通常用于Linux和Internet。只有在将数据导出/导入其他系统时,才需要UTF16 / UTF8转换。
如果您创建一个新的MFC项目,它将以Unicode格式设置,MFC函数将默认为Unicode。例如:
//UNICODE project:
CString str;
GetWindowText(str);
MessageBox(str);
如果项目是Unicode,则将使用日语和所有其他语言。
如果您正在使用遗留在ANSI模式下的MFC项目并且无法更改它,请使用以下修复:
//ANSI project:
CStringW str;
GetWindowTextW(str);
MessageBoxW(str);