TextOutで日本語出力

解決


koo  2004-09-27 09:48:19  No: 54571

現在 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;
}


koo  2004-09-27 09:50:36  No: 54572

追記します。

開発環境
VS.NET2003
W2k

「123」は全角で「」PQRは半角で出力されてしまいます。

以上 よろしくお願いします。


てつや  2004-09-27 20:16:53  No: 54573

直接の原因とは関係ないかもしれないけど
>::SelectObject(*pDC, hFont);
は明らかに間違いですから想定した動作をしないと思います。
ハンドルとMFCクラスは別物です。

CFont Font ;
Font.CreateFontIndirect(hFont) ;
CFont* preFont = pDC->SelectObject( &Font ) ;
...描画処理
pDC->SelectObject(preFont) ;

こんな感じ。


てつや  2004-09-27 20:19:37  No: 54574

>Font.CreateFontIndirect(hFont) ;
ごめんなさい。これ間違いです。

CFont Font ;
Font.Attatch(hFont) ;
CFont* preFont = pDC->SelectObject( &Font ) ;
...描画処理
pDC->SelectObject(preFont) ;


koo  2004-09-28 08:36:34  No: 54575

ありがとうございます。

明日やってみたいと思います。


koo  2004-09-29 07:04:40  No: 54576

てつやさんに言われたとおりやってみたのですが現象は変わりませんでした。
原因はほかにあるのでしょうか・・・


koo  2004-09-29 12:20:57  No: 54577

申し訳ありません。
再描画用に持っている行オブジェクトに格納していないため正しく
描画されていませんでした。

ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加