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

时间:2016-03-31 06:45:16

标签: c++ visual-studio-2005

如何通过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,但它仍然显示"?"。也许逻辑错了。

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

1 个答案:

答案 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);