GetWindowTextで別の言語のテキストを取得するには? 私はホワイトボードプロジェクトを変更しています。ユーザーがホワイトボードに入力すると、onchange関数が呼び出され、テキストがホワイトボードに表示されます。しかし、日本語のテキスト(非システムデフォルト言語)を入力すると、 "?"代わりに。 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++で本当に新しいです。私は研究を行い、UTF8のユニコードでGetwindowTextWを試しましたが、それでも "?"が表示されます。論理が間違っているかもしれません。
ホワイトボードに異なる言語のテキストを表示するソリューションを誰かに教えていただければ幸いです。ありがとうございました。
は、あなたの答えをいただき、ありがとうございます。プロジェクトはマルチバイト文字セットであり、GetWindowTextWを使用するように変更することはできません。 その後、マルチバイト文字セットの代わりにUnicode文字セットを使用してプロジェクト全体を変換しました。 しかし、このメソッドは多くの変数を型の変更が必要としました。 –
これはVS 2005でどのように実装されているのか分かりませんが、最新のバージョンでは 'GetWindowTextW' /' GetWindowTextA'は気にしないでください。 'GetWindowText'はこれらの2つの関数の1つに自動的に解決されるマクロとして実装されます。プロジェクトがUnicodeとして定義されているかどうかによって異なります。私は広範囲に渡って 'GetWindowText'を使って日本語をサポートするプロジェクトにも取り組んでいますが、あなたが不満を感じることはありません! – sergiol