gpt4 book ai didi

c++ - 如何通过 GetWindowText 获取不同语言的文本?

转载 作者:行者123 更新时间:2023-11-28 05:45:24 25 4
gpt4 key购买 nike

如何通过GetWindowText获取不同语言的文本?我修改了一个白板项目。当用户在白板上输入时,onchange 函数将被调用并将文本显示在白板上。但是,当我键入日语文本(非系统默认语言)时,它显示“?”反而。以下是onchange的代码spine。

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,但它仍然显示“?”。也许逻辑不对。

如果有人能给我在白板上显示不同语言文本的解决方案,我将不胜感激。谢谢。

最佳答案

GetWindowTextW 是正确的方法。 Windows 使用 UTF16 Unicode 标准,使用 wchar_t 宽字符串。 UTF8 标准通常用于 Linux 和互联网。您可能只有在向其他系统导出/导入数据时才需要 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);

关于c++ - 如何通过 GetWindowText 获取不同语言的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36326011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com