文字描画関係関数

宣言int DrawString( int x , int y , char *String , unsigned int Color ) ;

概略文字列を描画する

引数 x , y  : 文字列を描画する領域の左上の座標
String : 描画する文字列のポインタ
Color  : 描画する文字列の色
戻り値 0:成功
 -1:エラー発生

解説  ( x , y )が示す座標にStringポインタが示している文字列を Color色で描画します。
(パソコン画面上での座標のとり方、色の指定方法は『DrawLine』 の解説を参照してください)

サンプル

 画面の中心に文字列を描画します

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { unsigned int Cr ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // 白色の値を取得 Cr = GetColor( 255 , 255 , 255 ) ; // 文字列の描画 DrawString( 250 , 240 - 32 , "Hello C World!" , Cr ); WaitKey() ; // キーの入力待ち(『WaitKey』を使用) DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言 int DrawFormatString( int x , int y , unsigned int Color ,
              char *FormatString , ... ) ;


概略書式付き文字列を描画する

引数 int x , y : 文字列を描画する起点座標
unsigned int Color : 描画する文字列の色
char *FormatString : 描画したい書式付き文字列のアドレス
... : 書式付き文字列に付随する引数
戻り値 0:成功
 -1:エラー発生

解説  printf という関数はご存知でしょうか?
 書式を指定することにより容易に数値変数や文字列配列の内容を画面に出力することの出来る便利なC言語の標準関数です。
 そんな便利な printf 関数ですが、DXライブラリを含む DirectX を使う環境では printf 関数は使うことが出来ません。
 そこで登場するのがこの DrawFormatString 関数です。
 この関数は printf と違い描画する座標や色を指定するという違いはあるものの、ほぼ printf と同じ機能を提供します。




 printf で 変数 i の内容を説明付きで出力する場合

printf( "変数 i の値は %d です\n" , i ) ;

 DrawFormatString で 画面左上端に 変数 i の内容を説明付きで出力する場合( 文字の色は白 )

unsigned int Color ; Color = GetColor( 255 , 255 , 255 ) ; DrawFormatString( 0, 0, Color, "変数 i の値は %d です", i ) ;

 となります。
 因みにもうひとつの違いとして、エスケープシーケンスは \n のみ対応しています。( \t や \b などには対応してません… )
 なお、肝心の書式の指定方法ですが、かなり複雑で説明が大変なので詳しくはC言語のヘルプを参照して下さい。
 主な例を次に記載しておきますので、参考にしてください。


文字列を描画する例

char String[ 100 ] ; strcpy( String , "曇り" ) ; DrawFormatString( 0, 0, Color, "今日の天気は %s です", String ) ;


int 型整数値を描画する例

DrawFormatString( 0, 0, Color, "タイム %d 速度 %d ", t, s ) ;


double 型浮動小数点数値を描画する例

DrawFormatString( 0, 0, Color, "倍率 %f ",r ) ;


double 型浮動小数点数値を少数第三位まで描画する例

DrawFormatString( 0, 0, Color, "倍率 %.3f ",r ) ;


int 型整数値と double 型浮動小数点数値と文字列を描画する例

char String[ 100 ] ; strcpy( String , "城北" ) ; DrawFormatString( 0, 0, Color, "%s 高等学校 出願者数 %d人 倍率 %.3f ",s ,n ,r ) ;


 なお、文章の量を抑えるために Color は常に Color = GetColor( 255 , 255 , 255 ) ; が 代入されているものとします。

サンプル

 メッセージを表示してからボタンが押されるまでの時間を描画します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Start , Time ; unsigned int Cr ; // DXライブラリの初期化 if( DxLib_Init() == -1 ) return 0; // 白の色コードを保存 Cr = GetColor( 255 , 255, 255 ) ; // スタートタイムを取得 Start = GetNowCount() ; // メッセージを表示 DrawString( 0 , 0 , "なにかキーを押してください" , Cr ) ; // ボタンが押されるまで待つ WaitKey() ; // 終了、経過時間を算出 Time = GetNowCount() - Start ; // 画面に表示 ClearDrawScreen() ; DrawFormatString( 0, 0, Cr, "ボタンが押されるまでに %dミリ秒経過しました", Time ) ; // キー入力待ち WaitKey() ; // DXライブラリ使用の終了 DxLib_End() ; return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int GetDrawStringWidth( char *String , int StrLen ) ;

概略描画した時の文字列の幅(ドット単位)を得る

引数 char *StrData : 描画時の幅を調べたい文字列のアドレス
int StrLen : 調べたい文字列の長さ(半角文字単位)
戻り値-1以外:描画時の幅
 -1:エラー発生

解説  DrawString で描画される文字列のドット単位の長さは文字数が 同じでも一つ一つの文字の幅が違うために一定では有りません。
 そこでこの関数を用いて文字列を描画した際の長さを調べる ことが出来ます。StrLen として文字列の長さをわざわざ指定する ようにしたのは色々な側面から見て文字列の長さを指定できるよう にしたほうが良いと思ったからです。

サンプル

 一つの文章を同じ列に2回にわけて描画します
Windows用
#include <string.h> #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int StrWidth , StrLen ; // DXライブラリの初期化 if( DxLib_Init() == -1 ) return -1 ; // 最初の文字列を描画 DrawString( 0 , 0 , "今日もいい天気だ" , GetColor( 255 , 255 , 255 ) ) ; // 文字列の長さを取得 StrLen = strlen( "今日もいい天気だ" ) ; // 描画時の文字列の幅を取得 StrWidth = GetDrawStringWidth( "今日もいい天気だ" , StrLen ) ; // 「今日もいい天気だ」の直後に新たな文字列を描画 DrawString( StrWidth , 0 , "明日も晴れると良いなあ" , GetColor( 255 , 255 , 255 ) ) ; // キー入力待ち WaitKey() ; // DXライブラリの使用終了 DxLib_End() ; // 終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int GetDrawFormatStringWidth( char *FormatString , ... ) ;

概略DrawFormatString 関数書式付き文字列の描画幅(ドット単位)を得る

引数 char *FormatString : 描画幅を得たい書式付き文字列のアドレス
... : 書式付き文字列に付随する引数
戻り値-1以外:描画時の幅
 -1:エラー発生

解説  GetDrawStringWidth の書式付き文字列版です。書式付き 文字列の説明は DrawFormatString 関数を参照してください。
 なお、書式付き文字列の場合は結果的に文字列の文字数が幾つに なるかはわからないので GetDrawStringWidth のように参照する 文字数は取りません。

サンプル

 ありません



宣言int SetFontSize( int FontSize ) ;

概略描画する文字列のフォントのサイズをセットする

引数FontSize : 描画するフォントのサイズ(およそドット単位)
戻り値 0:成功
 -1:エラー発生

解説  『DrawString』関数で描画する文字列の文字の大きさを 設定します。フォントのサイズは FontSize で指定したドット数に大体比例します。

<<注意>>
SetFontSize は負荷の重い処理なので、頻繁に SetFontSize を呼ぶ必要がある場合は関数 CreateFontToHandle で予め必要なサイズのフォントを作成しておくようにして SetFontSize を頻繁に呼ばないようにすることをお勧めします。

サンプル

 フォントのサイズを64にし、画面中心に文字列を描画します

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { unsigned int Cr ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // 描画する文字列のサイズを設定 SetFontSize( 64 ) ; // 白色の値を取得 Cr = GetColor( 255 , 255 , 255 ) ; // 文字列の描画 DrawString( 100 , 240 - 42 , "Hello C World!" , Cr ); WaitKey() ; // キーの入力待ち(『WaitKey』を使用) DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int SetFontThickness( int TinckPal ) ;

概略描画する文字列の文字の太さをセットする

引数TinckPal : 文字の太さ( 0 ~ 9 )
戻り値 0:成功
 -1:エラー発生

解説  『DrawString』関数で描画する文字列の太さを引数 TinckPal が示す太さに変更します。デフォルトでは 6 になっています。
 因みにフォントの関係上、1や2の太さの違いでは見た目に影響が 出ない場合があります。

<<注意>>
SetFontThickness は負荷の重い処理なので、頻繁に SetFontThickness を呼ぶ必要がある場合は関数 CreateFontToHandle で予め必要な太さのフォントを作成しておくようにして SetFontThickness を頻繁に呼ばないようにすることをお勧めします。

サンプル

 フォントの太さを3にし、文字列を描画します

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { unsigned int Cr ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // 描画する文字列の太さを設定 SetFontThickness( 3 ) ; // 白色の値を取得 Cr = GetColor( 255 , 255 , 255 ) ; // 文字列の描画 DrawString( 100 , 240 - 42 , "Hello C World!" , Cr ); WaitKey() ; // キーの入力待ち(『WaitKey』を使用) DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int ChangeFont( char *FontName ) ;

概略文字列描画に使用するフォントを変更する

引数char *FontName : フォントの名前
戻り値 0:成功
 -1:エラー発生

解説  『DrawString』関数で描画するフォントの名前を 引数 FontName の示すフォントに変更します。もし指定のフォントがなかった場合はデフォルトのフォントになります。
 注意としましてはあまりマイナーなフォントはソフトをプレーする方のパソコンに入っていない場合がありますので、 その場合はフォントもソフトと一緒に配布するか、または Windows に標準で入っているフォントを使うことをお勧めします。

<<注意>>
ChangeFont は負荷の重い処理なので、頻繁に ChangeFont を呼ぶ必要がある場合は関数 CreateFontToHandle で予め必要なフォントを作成しておくようにして ChangeFont を頻繁に呼ばないようにすることをお勧めします。

サンプル

フォントをMS明朝にして文字列を描画します

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { unsigned int Cr ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // 描画する文字列の文字セットを変更します ChangeFont( "MS 明朝" ) ; // 白色の値を取得 Cr = GetColor( 255 , 255 , 255 ) ; // 文字列の描画 DrawString( 100 , 240 - 42 , "Hello C World!" , Cr ); WaitKey() ; // キーの入力待ち(『WaitKey』を使用) DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int ChangeFontType( int FontType ) ;

概略文字列描画に使用するフォントのタイプを変更する

引数 int FontType : フォントのタイプ
( -1                   : デフォルトフォント(DX_FONTTYPE_NORMAL と同じ)
 DX_FONTTYPE_NORMAL      : ノーマルフォント
 DX_FONTTYPE_EDGE        : エッジつきフォント
 DX_FONTTYPE_ANTIALIASING    : アンチエイリアスフォント
 DX_FONTTYPE_ANTIALIASING_4X4   : アンチエイリアスフォント( 4x4サンプリング )
 DX_FONTTYPE_ANTIALIASING_8X8   : アンチエイリアスフォント( 8x8サンプリング )
 DX_FONTTYPE_ANTIALIASING_EDGE   : アンチエイリアス&エッジ付きフォント
 DX_FONTTYPE_ANTIALIASING_EDGE_4X4 : アンチエイリアス&エッジ付きフォント( 4x4サンプリング )
 DX_FONTTYPE_ANTIALIASING_EDGE_8X8 : アンチエイリアス&エッジ付きフォント( 8x8サンプリング ) )
戻り値 0:成功
 -1:エラー発生

解説  『DrawString』関数等で描画する文字のタイプを変更します。
 タイプの変更とは、文字に縁取りを付けるか、綺麗な文字にするか、などです。 上記のいずれかの引数を関数に渡すことによりフォントのタイプを変更することが出来ます。

 DX_FONTTYPE_NORMAL は普通のフォントです。アンチエイリアスなし、 エッジなしのもっとも高速に描画処理を行えるフォントです。 ただし見た目はあまりよくありません。

 DX_FONTTYPE_EDGE はエッジつきフォントです。
 エッジとは文字の縁のことです、 エッジフォントとは文字の輪郭を文字のメインの色とは違う色でなぞることでノーマルフォントよりも見やすくしたフォントです。

 DX_FONTTYPE_ANTIALIASING はアンチエイリアスフォントです。
 エイリアスとは解像度が低いがために目立ってしまう、 例えば文字の輪郭のギザギザのことなどを示します。 (640x480などの解像度の低い画面モードではドットがくっきり見えてしまうのでこの現象が発生します、 デスクトップ画面などで使われている画面モードは通常 1024x768 以上なので、 ギザギザしていても大して気にならないのです)
 このエイリアスを抑えたフォントがアンチエイリアスフォントです。
 具体的には文字をベタッと画面に描画するのではなく、 書き込まれる画面に溶け込むように描画します。

 DX_FONTTYPE_ANTIALIASING_4X4 もアンチエイリアスフォントです。
 DX_FONTTYPE_ANTIALIASING と同じくアンチエイリアス付きのフォントですが、 DX_FONTTYPE_ANTIALIASING とは異なる方式でアンチエイリアス処理を行っていて、 通常は DX_FONTTYPE_ANTIALIASING よりも良好な描画結果が得られます。 ( DX_FONTTYPE_ANTIALIASING ではフォントサイズが小さい場合に文字の太さが歪になったりすることがあります )
 処理負荷は DX_FONTTYPE_ANTIALIASING と同じくらいです。

 DX_FONTTYPE_ANTIALIASING_8X8 もアンチエイリアスフォントです。
 DX_FONTTYPE_ANTIALIASING_4X4 と同じ方式でより精度の高い描画結果が得られます。 が、DX_FONTTYPE_ANTIALIASING_4X4 よりも処理負荷が高くなります。
 精度が高いと言ってもよく見ないと DX_FONTTYPE_ANTIALIASING_4X4 との違いが分からない程度なので、 分からない程度でもできる限り綺麗な文字を描画したいという場合以外はあまり使う意味はありません。

 DX_FONTTYPE_ANTIALIASING_EDGE はエッジつきアンチエイリアスフォントです。
 上記のアンチエイリアスフォントにエッジをつけたタイプです。エッジも 画面に溶け込むように描かれます。

 DX_FONTTYPE_ANTIALIASING_EDGE_4X4 もエッジ付きアンチエイリアスフォントです。
 DX_FONTTYPE_ANTIALIASING_EDGE のアンチエイリアス処理は DX_FONTTYPE_ANTIALIASING と同じ方式ですが、 それを DX_FONTTYPE_ANTIALIASING_4X4 と同じ方式にしたものです。

 DX_FONTTYPE_ANTIALIASING_EDGE_8X8 もエッジ付きアンチエイリアスフォントです。
 DX_FONTTYPE_ANTIALIASING_EDGE_4X4 よりもアンチエイリアス処理の精度を上げたものです。


<<注意>>
ChangeFontType は負荷の重い処理なので、頻繁に ChangeFontType を呼ぶ必要がある場合は関数 CreateFontToHandle で予め必要なフォントタイプのフォントを作成しておくようにして ChangeFontType を頻繁に呼ばないようにすることをお勧めします。


 <裏話 エッジ(縁)の色は指定できないのか!?>
 通常エッジは黒で描画されますが、実際はこのエッジ色も指定することが 出来ます。DrawFormatString と DrawFormatStringToHandle を除くすべての 文字列描画関数の一番後ろにカラーコードを入力することで、エッジのカラーを 指定することが出来ます。



// エッジカラー指定なし文字色白
DrawString( 0 , 0 , "DXライブラリ" , GetColor( 255,255,255 ) ) ;

// エッジカラー指定、青、文字色は白
DrawString( 0 , 0 , "DXライブラリ" , GetColor( 255,255,255 ), GetColor( 0,0,255 ) ) ;


// エッジカラー指定なし文字色白
DrawStringToHandle( 0 , 0 , "DXライブラリ" , GetColor( 255,255,255 ), FontHandle ) ;

// エッジカラー指定、青、文字色は白
DrawStringToHandle( 0 , 0 , "DXライブラリ" , GetColor( 255,255,255 ), FontHandle, GetColor( 0,0,255 ) ) ;


 仕様の関係上 DrawFormatStringDrawFormatStringToHandle 関数は 残念ながらエッジ色を指定することは出来ません。エッジカラー指定を 書式付文字列描画 で使用したい場合などはCの標準関数である sprintf 関数 との組み合わせで実現してください。

サンプル

 最初にサイズ40で『DXライブラリ』と描画した後、フォントの タイプをエッジつきアンチエイリアスフォントに変更してもう一度 『DXライブラリ』と描画します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // DXライブラリの初期化 if( DxLib_Init() == -1 ) return 0 ; // 画面を黄色で塗りつぶします DrawBox( 0 , 0 , 640 , 480 , GetColor( 128,128, 0) , TRUE ) ; // サイズを40に変更 SetFontSize( 40 ) ; // 『DXライブラリ』と描画 DrawString( 100 , 100 , "DXライブラリ" , GetColor( 255,255,255 ) ) ; // フォントのタイプをエッジつきアンチエイリアスフォントに変更 ChangeFontType( DX_FONTTYPE_ANTIALIASING_EDGE ) ; // 『DXライブラリ』と描画 DrawString( 100 , 160 , "DXライブラリ" , GetColor( 255,255,255 ), GetColor( 0,0,0 ) ) ; // キー入力を待つ WaitKey() ; // DXライブラリの終了 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int CreateFontToHandle( char *FontName , int Size , int Thick , int FontType ) ;

概略新しいフォントデータを作成

引数 char *FontName : 作成するフォント名( NULL にするとデフォルトのフォント )
int Size : フォントのサイズ( およそドット数 -1:デフォルトのサイズ )
int Thick : フォントの太さ( 0 ~ 9 -1:デフォルトの太さ )
int FontType : フォントのタイプ
( -1                   : デフォルトフォント(DX_FONTTYPE_NORMAL と同じ)
 DX_FONTTYPE_NORMAL      : ノーマルフォント
 DX_FONTTYPE_EDGE        : エッジつきフォント
 DX_FONTTYPE_ANTIALIASING    : アンチエイリアスフォント
 DX_FONTTYPE_ANTIALIASING_4X4   : アンチエイリアスフォント( 4x4サンプリング )
 DX_FONTTYPE_ANTIALIASING_8X8   : アンチエイリアスフォント( 8x8サンプリング )
 DX_FONTTYPE_ANTIALIASING_EDGE_4X4 : アンチエイリアス&エッジ付きフォント( 4x4サンプリング )
 DX_FONTTYPE_ANTIALIASING_EDGE_8X8 : アンチエイリアス&エッジ付きフォント( 8x8サンプリング ) )
戻り値 戻り値 -1 : 失敗
0以上 : フォントハンドル

解説   普段 DrawString 関数や DrawFormatString 関数で 文字列を描画していて、ふと一回の画面の更新で複数のタイプの フォントを使いたくなったりしたとします。
 当然描きたいフォントのサイズや太さに応じてその都度 SetFontSize 関数や SetFontThickness 関数を使用する しかないのですが、実はフォントのサイズや太さを変えるのは非常に 時間がかかり、高速処理を行わなければならないゲームソフトでは 致命的な負荷となります。
 そこで解決方法として、元々ある標準のフォントデータを場合に 応じてサイズや太さを変えるのではなく、標準のフォントデータとは 全く別に、必要な分だけフォントデータを作成しておき、文字列 描画時にあらかじめ用意されたフォントデータを使って描画処理を 行うというものがあります。
 この関数は上記の方法を実現するための一つ目である『標準で 使用するフォントデータ以外のフォントデータを作る』ための機能を 持っています。

 具体的に説明しますと、まずこの CreateFontToHandle 関数で作成 されたフォントのデータはひとつの識別番号を付けられます。 この CreateFontToHandle 関数は戻り値としてこの int 型の識別 番号値を返してきますので、この値を何らかの変数に保存します。
 そしてあとは今まで紹介された DrawString 関数 , GetDrawStringWidth 関数 などと使い方はほとんど同じで、 違いは各関数名の語尾には 『ToHandle』が付き、関数の引数の 最後にどのフォントのデータを使うのか、を示す保存しておいた 識別番号を渡す必要があるということだけです。

 ただしこのフォントデータ機能には、SetFontSize 関数や SetFontThickness 関数 のような、途中でサイズや太さの変更をすることは出来ません。ので、違う タイプのフォントを使用したい場合は再度この CreateFontToHandle 関数 でフォントデータを作成する必要があります。

 CreateFontToHandle 関数は FontName に作成するフォントの 名前の文字列を、Size に作成するフォントのサイズを、Thick に 作成するフォントの線の太さを渡すことで任意のフォントデータを 作成してくれます。
 なお、FontName に NULL を指定するとデフォルトのフォントが 使用され、Size 及び Thick も -1 を指定することによりそれぞれ 標準のサイズ、太さのフォントが作成されます。

 FontType は作成するフォントのタイプを指定します。
 種類が沢山あり、説明が少々長くなるので詳細はChangeFontType 関数 の解説を参照してください。

サンプル

 まずサイズ40、太さ3のフォントを作成し、そのフォントで画面に 『HELLOW!!』と描画します。そのあと標準のフォントデータで 『OK?』と言う文字列を描画します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int FontHandle ; // DXライブラリの初期化 if( DxLib_Init() == -1 ) return 0 ; //  デフォルトのフォントで、サイズ40、太さ3のフォントを作成し // 作成したデータの識別番号を変数 FontHandle に保存する FontHandle = CreateFontToHandle( NULL , 40 , 3 ) ; // 作成したフォントで画面左上に『Hellow!!』と白色の文字列を描画する DrawStringToHandle( 0 , 0 , "HELLOW!!" , GetColor( 255 , 255 , 255 ) , FontHandle ) ; // 次に標準フォントデータで画面に『OK?』という文字列を描画する DrawString( 0 , 50 , "OK?" , GetColor( 255 , 128 , 100 ) ) ; // キー入力を待つ WaitKey() ; // 作成したフォントデータを削除する DeleteFontToHandle( FontHandle ) ; // DXライブラリの終了 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int LoadFontDataToHandle( char *FileName, int EdgeSize ) ;

概略DXフォントデータファイルを読み込む

引数 FileName : DXフォントデータファイルのパス
EdgeSize : 作成するフォントの縁の太さ( 0 を指定すると縁無し )
戻り値 戻り値 -1 : 失敗
0以上 : フォントハンドル

解説  DXライブラリに付属しているツール『CreateDXFontData.exe』で作成したDXフォントデータファイルを読み込み、 フォントハンドルを取得するための関数です。

 この関数で取得したフォントハンドルは CreateFontToHandle 関数で取得できるフォントハンドルと同じように DrawStringToHandle 関数などのフォントハンドルを必要とする関数で使用することができます。 ( そして、同様に不要になったら DeleteFontToHandle で削除してください )

 CreateFontToHandle 関数と異なりフォント名やサイズを指定する引数が無く、あるのは縁の太さを指定する引数だけですが、 どのようなフォントを使用するのかやサイズ・太さはDXフォントデータファイルを作成した段階で決定しているので、 この関数ではDXフォントデータファイルには含まれていない縁の在り・無しのみを指定するようになっています。

 尚、DXフォントデータファイルの詳細についてはDXライブラリのパッケージの Tool\CreateDXFontData\readme.txt を参照してください。

サンプル

 DXフォントデータファイル「TestFont.dft」を読み込み、画面の左上に文字列を描画します。
( TestFont.dft は自前で用意してください )
Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int FontHandle ; // DXライブラリの初期化 if( DxLib_Init() == -1 ) return 0 ; // DXフォントデータファイルを読み込み、フォントハンドルを変数 FontHandle に保存する FontHandle = LoadFontDataToHandle( "TestFont.dft", 1 ) ; // 作成したフォントで画面左上に『Hellow!!』と白色の文字列を描画する DrawStringToHandle( 0 , 0 , "HELLOW!!" , GetColor( 255 , 255 , 255 ) , FontHandle ) ; // 次に標準フォントデータで画面に『OK?』という文字列を描画する DrawString( 0 , 50 , "OK?" , GetColor( 255 , 128 , 100 ) ) ; // キー入力を待つ WaitKey() ; // 作成したフォントデータを削除する DeleteFontToHandle( FontHandle ) ; // DXライブラリの終了 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int DeleteFontToHandle( int FontHandle ) ;

概略フォントデータを削除する

引数FontHandle : 削除したいフォントデータに付けられた識別番号(フォントハンドル)
戻り値 0:成功
 -1:エラー発生

解説  CreateFontToHandle 関数で作成したフォントのデータを メモリーから削除するための関数です。引数に CreateFontToHandle 関数 で戻り値として受け取ったデータの識別番号を渡すことによって 指定のフォントデータを削除することが出来ます。
 なお、作成したフォントデータは削除せずに DxLib_End 関数により ソフトを終了しようとした場合は自動的にDXライブラリがデータを 消去してくれます。この関数は、明らかに使われなくなったフォント データがメモリ領域を圧迫して迷惑を掛けているときに使うと有効です。 (フォントデータはひとつあたり1.2MB程のメモリ領域を必要とします。)

サンプル

 CreateFontToHandle 関数のサンプルを参照してください。



宣言int SetFontCacheUsePremulAlphaFlag( int Flag ) ;

概略作成するフォントデータを『乗算済みα』用にするかどうかを設定する

引数 int Flag : 作成するフォントデータを『乗算済みα』用にするかどうか
        ( TRUE:乗算済みα用にする FALSE:乗算済みα用にしない( デフォルト ) )
戻り値 0:成功
 -1:エラー発生

解説  CreateFontToHandle 関数で作成するフォントのデータを 『乗算済みアルファのすすめ』の解説にある『乗算済みα』用のフォントデータにするかどうかを設定する関数です。

詳しい解説は『乗算済みアルファのすすめ』をご覧ください。
サンプル

 αチャンネルつきの『描画対象にできるグラフィックハンドル』に対して『乗算済みα』用のフォントで文字列を描画し、 その後文字列が描画されたグラフィックハンドルを裏画面に描画するサンプルです。
 『乗算済みα』用のブレンドモードで描画処理が行われた『描画対象にできるグラフィックハンドル』を裏画面( や、表画面 )に対して描画する場合も『乗算済みα』用のブレンドモードで描画する必要があります。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int FontHandle ; int ScreenHandle ; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) return -1; // 描画対象にできるαチャンネル付きのグラフィックハンドルを作成する ScreenHandle = MakeScreen( 256, 64, TRUE ) ; // 乗算済みα用のフォントハンドルを作成する SetFontCacheUsePremulAlphaFlag( TRUE ) ; FontHandle = CreateFontToHandle( "MS ゴシック", 32, 4, DX_FONTTYPE_ANTIALIASING_8X8 ) ; // 描画先を作成したグラフィックハンドルにする SetDrawScreen( ScreenHandle ) ; // グラフィックハンドルに乗算済みα用のαブレンドモードで透明度50%で文字を描画する SetDrawBlendMode( DX_BLENDMODE_PMA_ALPHA, 128 ) ; DrawStringToHandle( 0, 0, "テスト文字列", GetColor( 255,255,255 ), FontHandle ) ; // 描画先を裏画面に変更する SetDrawScreen( DX_SCREEN_BACK ) ; // 結果が分かりやすいように裏画面を緑で塗りつぶす SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255 ) ; DrawBox( 0, 0, 640, 480, GetColor( 0,200,0 ), TRUE ) ; // 裏画面に文字列を描画したグラフィックハンドルを乗算済みα用のαブレンドモードで描画する SetDrawBlendMode( DX_BLENDMODE_PMA_ALPHA, 255 ) ; DrawGraph( 100, 100, ScreenHandle, TRUE ) ; // 裏画面の内容を表画面に反映させる ScreenFlip() ; // 作成したフォントハンドルを削除する DeleteFontToHandle( FontHandle ) ; // MakeScreen で作成したグラフィックハンドルの削除 DeleteGraph( ScreenHandle ) ; // キー入力待ち WaitKey() ; // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言 int DrawStringToHandle( int x , int y , char *String ,
                  unsigned int Color , int FontHandle ) ;


概略指定のフォントデータで文字列を描画する

引数 int x , y : 文字列を描画する起点座標
char *String : 描画したい文字列のポインタ
unsigned int Color : 描画する文字列の色を示すカラーコード
int FontHandle : 描画に使用するフォントのデータ識別番号(フォントハンドル)
戻り値 0:成功
 -1:エラー発生

解説  CreateFontToHandle 関数を使って作成したフォントを 使用して ( x , y ) を描画する文字列の起点座標、とし、String の示す文字列を Color で指定された色で画面に描画します。
 引数の最後に CreateFontToHandle 関数で取得したフォント データの識別番号を渡す以外は全て DrawString と動作は 同じです。

サンプル

 CreateFontToHandle 関数のサンプルを参照してください。



宣言 int DrawFormatStringToHandle( int x , int y , unsigned int Color ,
               int FontHandle , char *FormatString , ... ) ;


概略指定のフォントデータで書式付き文字列を描画する

引数 int x , y : 文字列を描画する起点座標
unsigned int Color : 描画する文字列の色のコード
int FontHandle : 描画に使用するフォントデータの識別番号(ハンドル)
char *FormatString : 描画したい書式付き文字列のアドレス
... : 書式付き文字列に付随する引数
戻り値 0:成功
 -1:エラー発生

解説  CreateFontToHandle 関数を使って作成したフォントを 使用して書式付き文字列の描画を行います。
 フォントハンドルを使用して処理を行う、ということ以外は すべて DrawFormatString 関数と同じです。

サンプル

 動作については DrawFormatString 関数を参照して下さい。



宣言 int GetDrawStringWidthToHandle( char *String ,
                   int StrLen , int FontHandle ) ;


概略指定のフォントデータで描画する文字列の幅(ドット単位)を得る

引数 char *StrData : 描画時の幅を調べたい文字列のアドレス
int StrLen : 調べたい文字列の長さ(半角文字単位)
int FontHandle : 描画幅を取得する際に使用するフォントデータの識別番号
戻り値-1以外:描画時の幅
 -1:エラー発生

解説  CreateFontToHandle 関数を使って作成したフォントを 使用して、String の示す文字列を描画した際の実際の描画幅を 取得します。
 引数の最後に CreateFontToHandle 関数で取得したフォント データの識別番号を渡す以外は全て GetDrawStringWidth と動作は 同じです。

サンプル

 動作の挙動については GetDrawStringWidth 関数のサンプルを参照して ください



宣言 int GetDrawFormatStringWidthToHandle( int FontHandle ,
                     char *FormatString , ... ) ;


概略指定のフォントデータで書式付き文字列の描画幅を得る

引数 int FontHandle : 描画幅を調べる再に使用するフォントデータのハンドル
char *FormatString : 描画幅を得たい書式付き文字列のアドレス
... : 書式付き文字列に付随する引数
戻り値-1以外:描画時の幅
 -1:エラー発生

解説  CreateFontToHandle 関数を使って作成したフォントを 使用して、書式付き文字列の描画幅を取得します。
 取得する際にフォントデータのハンドルを使う、ということ以外は GetDrawFormatStringWidth 関数と同じです。

サンプル

 動作の挙動については GetDrawFormatStringWidth 関数を参照して ください



宣言 int GetFontStateToHandle( char *FontName , int *Size ,
                int *Thick , int FontHandle ) ;


概略指定のフォントデータの情報を得る

引数 char *FontName : フォント名を保存する char 型配列へのポインタ
int *Size : サイズを保存する int 型変数へのポインタ
int *Thick : 太さを保存する int 型変数へのポインタ
int FontHandle : 情報を得たいフォントデータの識別番号(フォントハンドル)
戻り値 0:成功
 -1:エラー発生

解説  CreateFontToHandle 関数で作成したフォントデータの情報を それぞれポインタ FontName , Size , Thick の示すアドレスに格納 します。作成したフォントのサイズ等の情報を得たい場合に使用します。
 なお、サイズの情報だけ取得したくて、ほかのフォント名と太さの 情報は要らない、などの場合はそれぞれ引数に NULL を渡すことによって キャンセルすることが出来ます。

例 サイズだけ取得したい場合

FontHandle : フォントのデータ識別番号と仮定

  int FontSize ;

  GetFontStateToHandle( NULL , &FontSize , NULL , FontHandle ) ;

サンプル

 ありません。




宣言int InitFontToHandle( void ) ;

概略フォントデータを全て初期化する

引数なし
戻り値 0:成功
 -1:エラー発生

解説  CreateFontToHandle 関数で作成した全てのフォントデータを 削除します。具体的に言えば、全てのフォントデータを、 DeleteFontToHandle 関数に渡した場合と同じ事を行います。
 複数のフォントが一度にいらなくなり、個別に DeleteFontToHandle 関数 を実行するのが面倒なときに有効です。

サンプル

 ありません。







戻る