如何通过GetWindowText获取不同语言的文本

How to get different language text by GetWindowText?

本文关键字:语言 文本 何通过 GetWindowText 获取      更新时间:2023-10-16

如何通过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);