DrawText 関数 の文字化け

[戻る]
ナギ 2010/08/06(金) 00:34:51
以下のソースで実行した所、半角英数字は正常に表示されるのですが
、全角文字の場合、文字化けしてしまいます。


LPD3DXFONT    g_pD3DXfont = NULL;

//初期化

void FontInit()
{

    D3DXFONT_DESC logFont;

    logFont.Height          = 50;        //フォントの文字セルまたは文字の
高さ                        
    logFont.Width           = 10;        //フォントの文字の幅 (論理単位)
                    
    logFont.Weight          = FW_NORMAL; //フォントのウェイト (0 〜 1,000 
の範囲)
    logFont.MipLevels       = 0;         //要求されるミップ レベルの数
    logFont.Italic          = FALSE;     //斜体フォントの場合は TRUE に設
定されます
    logFont.CharSet         = 0;         //文字セット
    logFont.OutputPrecision = 0;         //出力精度
    logFont.Quality         = DEFAULT_QUALITY;//出力品質
    logFont.PitchAndFamily  = DEFAULT_PITCH || FF_DONTCARE;//フォントのピ
ッチとファミリ
    lstrcpy(logFont.FaceName, "MS ゴシック");       //フォントの書体名
を指定する NULL 終端文字列


    D3DXCreateFontIndirect( g_pD3DDevice, &logFont, &g_pD3DXfont);


}

// シーン開始

//posX,posY:XY座標    charString:文字列
void FontDraw(int posX,int posY,char *charString)
{
    
     RECT rect={posX,posY,WINDOW_WIDTH,WINDOW_HEIGHT};
        g_pD3DXfont->DrawText(NULL,                         //Sprite
のポインタ NULLでもOK
                         charString,          //描画する文字列のポインタを指定
します。
                         -1,                            //文字数をします。-1の
場合は全てを描画します。
                         &rect,                         //描画領域
                         DT_LEFT | DT_NOCLIP,           //ここで左揃えなどを設
定します。
                         D3DCOLOR_XRGB(255, 0, 0)); //文字の色を決めます。
    
}

// シーン終了

もしよろしければ何かアドバイスをください…
こういう場所で質問するのが始めてなので質問の内容が不足していたりしてたらごめん
なさい。

ナギ 2010/08/06(金) 00:38:15
LPD3DXFONT    g_pD3DXfont = NULL;

//初期化

void FontInit()
{

    D3DXFONT_DESC logFont;

    logFont.Height          = 50;                
    
    logFont.Width           = 10;                
    
    logFont.Weight          = FW_NORMAL;
    logFont.MipLevels       = 0;
    logFont.Italic          = FALSE;
    logFont.CharSet         = 0;
    logFont.OutputPrecision = 0;
    logFont.Quality         = DEFAULT_QUALITY;
    logFont.PitchAndFamily  = DEFAULT_PITCH || FF_DONTCARE;
    lstrcpy(logFont.FaceName, "MS ゴシック");
    D3DXCreateFontIndirect( g_pD3DDevice, &logFont, &g_pD3DXfont);
}

// シーン開始

//posX,posY:XY座標    charString:文字列
void FontDraw(int posX,int posY,char *charString)
{
     RECT rect={posX,posY,WINDOW_WIDTH,WINDOW_HEIGHT};
     g_pD3DXfont->DrawText(NULL,charString,-1, &rect,DT_LEFT | 
                        
    DT_NOCLIP,D3DCOLOR_XRGB(255, 0, 0)); 
}

// シーン終了

コメントが邪魔で見えにくいことがわかりましたすいません…

solid 2010/08/06(金) 06:00:39
文字セットがUnicodeなのにANSIを渡しているとかでしょうかね

MistyGreen 2010/08/06(金) 08:11:49
logFont.CharSet = 0;
を
logFont.CharSet = SHIFTJIS_CHARSET;
に変えてみるとか・・・

ナギ 2010/08/06(金) 11:06:32
[[解決]]
>>solidさん
確認していたらマルチバイト文字をつかっていました

>>MistyGreenさん
logFont.CharSet = SHIFTJIS_CHARSET;

おお!文字化けしなくなりました!
ここになにも設定しなかったのがまずかったんですね…
調べてみたら日本語を表すための文字コードなんですね

二人ともアドバイスしていただいてありがとうございます!

古いスレッドには追加発言できません。