如何通过GetWindowText获取不同语言的文本
How to get different language text by GetWindowText?
如何通过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,但它仍然显示"?"。也许是逻辑错误。
如果有人能给我在白板上显示不同语言文本的解决方案,我将不胜感激。非常感谢。
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);
相关文章:
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 获取文本频繁的语言切换
- 如何使用 QTableWidgetItem 文本在 QT 中翻译语言翻译
- 非英语语言中的文本识别
- 使用 C 语言中的文本文件内容初始化数组
- 自然语言处理:word2vec的文本语料库格式
- 如何通过GetWindowText获取不同语言的文本
- 使用C++或任何windows脚本语言格式化文本数据
- 在 C 语言中打印 unicode 文本
- 如何在Ruby和其他语言之间共享文本文件(或互斥/信号量)
- 在C语言的不同功能中共享打开的文本文件
- 在C语言中从文本文件中读取特定的数据列
- 从文本文件中读取数据,并使用c++语言将其存储在二维矢量中
- 在 RichTextBox 中附加来自 C 语言中更多来源的文本
- 如何在c语言中将文本文件转换为位图图像