現在 CView から派生させてエディタを作っているところなのですが,日本語を TextOut
関数で出力しようとすると正しく表示できません。具体的には「123」と入力して「PQR」
と表示されてしまいます。わかる方いましたらご教授お願いします。
※ pcText には「ImmGetCompositionString」で取得した「123」が入っています。
int CTestView::drawText(char *pcText, CPoint *pPos, CDC *pDC)
{
HFONT hFont;
int iLen = lstrlen(pcText);
hFont = CreateFont(16, //フォント高さ
0, //文字幅
0, //テキストの角度
0, //ベースラインとx軸との角度
FW_REGULAR, //フォントの重さ(太さ)
FALSE, //イタリック体
FALSE, //アンダーライン
FALSE, //打ち消し線
SHIFTJIS_CHARSET, //文字セット
OUT_DEFAULT_PRECIS, //出力精度
CLIP_DEFAULT_PRECIS, //クリッピング精度
PROOF_QUALITY, //出力品質
FIXED_PITCH | FF_MODERN,//ピッチとファミリー
"MS ゴシック"); //書体名
::SelectObject(*pDC, hFont);
pDC->SetTextColor(RGB(0,0,0));
pDC->TextOut(pPos->x, pPos->y, pcText, iLen);
return 0;
}
追記します。
開発環境
VS.NET2003
W2k
「123」は全角で「」PQRは半角で出力されてしまいます。
以上 よろしくお願いします。
直接の原因とは関係ないかもしれないけど
>::SelectObject(*pDC, hFont);
は明らかに間違いですから想定した動作をしないと思います。
ハンドルとMFCクラスは別物です。
CFont Font ;
Font.CreateFontIndirect(hFont) ;
CFont* preFont = pDC->SelectObject( &Font ) ;
...描画処理
pDC->SelectObject(preFont) ;
こんな感じ。
>Font.CreateFontIndirect(hFont) ;
ごめんなさい。これ間違いです。
CFont Font ;
Font.Attatch(hFont) ;
CFont* preFont = pDC->SelectObject( &Font ) ;
...描画処理
pDC->SelectObject(preFont) ;
ありがとうございます。
明日やってみたいと思います。
てつやさんに言われたとおりやってみたのですが現象は変わりませんでした。
原因はほかにあるのでしょうか・・・
申し訳ありません。
再描画用に持っている行オブジェクトに格納していないため正しく
描画されていませんでした。
ありがとうございます。
ツイート | ![]() |