Как получить текст на другом языке с помощью GetWindowText? У меня есть modfying проект доски. Когда пользователь вводит на доске, функция onchange вызывается и будет показывать текст на доске. Однако, когда я печатаю японский текст (нестандартный язык по умолчанию), он показывает «?» вместо. Ниже приведен код spetet для onchange.Как получить текст на другом языке с помощью GetWindowText?
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++. Я занимался исследованиями и пытался использовать GetwindowTextW с юникодом UTF8, но он все еще показывает «?». Может быть, логика ошибочна.
Я был бы признателен, если бы кто-нибудь мог дать мне решение, чтобы показать текст на другом языке в доске. Спасибо.
Спасибо за ваш ответ. Проект был многобайтным набором символов и не может использоваться для использования GetWindowTextW. Затем я преобразовал весь проект с использованием набора символов Unicode вместо многобайтового набора символов. Однако этот метод заставил множество переменных изменить свой тип. –
Я не знаю, как это реализовано в VS 2005, но в современных версиях вам не нужно «GetWindowTextW»/'GetWindowTextA', поскольку« GetWindowText »реализуется как макрос, который автоматически разрешает одну из этих двух функций, если проект определен как Unicode или нет. Я также работаю над проектами, поддерживающими японский язык, широко используя 'GetWindowText', и у меня нет проблем, о которых вы жалуетесь! – sergiol