文字の間を詰めて表示したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
山崎

文字の間を詰めて表示したい

#1

投稿記事 by 山崎 » 15年前

おはようございます、いつもお世話になっております、山崎です。
今回は、タイトルの通り文字と文字の間の間隔を狭めて表示する方法についてお伺いに参りました。

XPでVisualStudio2010にDXライブラリを使っております。

DrawStringToHandleやDrawStringを使用したときに表示される文字列の文字間隔がちょっと広すぎるので
これをを狭めたいと思い、一文字ずつ表示し文字ごとに表示する座標を指定してみようという方針で
以下のコードを書きました。

しかし実行してみると、指定した文字以降の全ての文字列まで表示されてしまい、
ぐっちゃぐちゃな文字列が表示されてしまいます。
(下のコードは実行結果を見やすくするため、一文字描画しようとするごとにY座標を変えています)

文字と文字の間隔を狭めて表示するには、どのような方法があるでしょうか。
#include "DxLib.h"
#include <string>
using namespace std;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
    ChangeWindowMode( TRUE ) ;
    
    if( DxLib_Init() == -1 )
        return -1 ;

    SetDrawScreen( DX_SCREEN_BACK ) ;
    SetTransColor( 255 , 0 , 255 ) ;

    string ExplanationText="全角で日本語の文字列。";    //文字間を詰めて表示したい文字列
    int FontSize=15;                                    //フォントサイズ
    int FontHandle=CreateFontToHandle(NULL,FontSize,1,DX_FONTTYPE_ANTIALIASING_EDGE);//フォントハンドル

    while( ProcessMessage() == 0)
    {
        clsDx();
        ClsDrawScreen() ;

        for(int i=0;i<ExplanationText.length();i++)    //文字数の分だけ繰り返したい
            //一文字ずつ、場所を指定して描画したい。しかし指定した文字以降の全ての文字列がその都度描画されてしまう
            DrawStringToHandle(50+i*FontSize,100+i*FontSize,&ExplanationText,GetColor(255,255,255),FontHandle);
        ScreenFlip();
    }

    DxLib_End() ;
    return 0 ; 
}

Ma

Re:文字の間を詰めて表示したい

#2

投稿記事 by Ma » 15年前

必ず全角で日本語でいいなら


#include "DxLib.h"
#include <string>
using namespace std;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE ) ;

if( DxLib_Init() == -1 )
return -1 ;

SetDrawScreen( DX_SCREEN_BACK ) ;
SetTransColor( 255 , 0 , 255 ) ;

string ExplanationText="全角で日本語の文字列。"; //文字間を詰めて表示したい文字列
int FontSize=15; //フォントサイズ
int FontHandle=CreateFontToHandle(NULL,FontSize,1,DX_FONTTYPE_ANTIALIASING_EDGE);//フォントハンドル

while( ProcessMessage() == 0)
{
clsDx();
ClsDrawScreen() ;

for(int i=0;i<ExplanationText.length();i+=2){ //文字数の分だけ繰り返したい
//一文字ずつ、場所を指定して描画したい。しかし指定した文字以降の全ての文字列がその都度描画されてしまう
char output[3] = {ExplanationText,ExplanationText[i+1],'\0'};
DrawStringToHandle(50+i*FontSize,100+i*FontSize,output,GetColor(255,255,255),FontHandle);
}
ScreenFlip();
}

DxLib_End() ;
return 0 ;
}

山崎

Re:文字の間を詰めて表示したい

#3

投稿記事 by 山崎 » 15年前

Maさん
ご返信誠にありがとうございます。
なるほど、終端コードを一文字ごとにいれるのですね。いや勉強になりました。
おかげさまで解決できました、このたびは本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る