55. 文字のサイズや太さを変更する

  文字のサイズを一発で変更するSetFontSizeなどの便利な関数は先ほど紹介しました。

しかし、SetFontSizeや文字の太さを変更するSetFontThickness関数などは、処理が非常に重く、

処理が返ってくるまでに時間がかかります。

なので、一度変更したキリそのフォントのみを使用する場合は上記関数で変更してよいのですが、

ループ中に何度か変更する場合、この関数は用いられません。

そこで、フォントについての情報をあれこれ指定して特定の「フォントデータハンドル」をつくり、

その作成したフォントデータハンドルにしたがって文字を描写すれば、様々な種類のフォントでも高速に描画できます。

ここではその、フォントデータを作成するCreateFontToHandleについて説明します。

今、フォントサイズ12で太さが3のエッジ付フォントがほしいとしますね。

しかし普段のフォントはサイズ10で、太さ1、エッジなしのフォントを使用するとします。

ここで、2種類のフォントデータハンドルを作成する必要は無く、最初にSetFontSizeなどでフォントデータを作成しておいけば

普通にDrawString関数などで描画すればそのフォントデータで出力されるため、

普段のフォントデータについては、最初に54節で説明した方法でフォントデータを設定し、

普通にDrawStringなどで描画します。

特別に文字の種類を変えたいときだけ、作成したフォントデータハンドルを使えばいいのです。

ではCreateFontToHandleについて説明します。この関数に持たせる引数は以下のとおりになっています。

CreateFontToHandle( フォントの種類 , サイズ , 太さ , タイプ ) ;

各持たせる引数の種類は54節で説明したものと同じなので、それらを参考にしてください。

この関数を呼ぶと、返り値にint型のハンドルが返ってきますから、そのハンドルを変数に保存します。

たとえば、種類をMS明朝、サイズを22、太さを2、タイプをDX_FONTTYPE_NORMALにしたとすると、

int FontHandle;

FontHandle = CreateFontToHandle("MS 明朝" , 22 , 2 , DX_FONTTYPE_NORMAL);

とすることで、FontHandleに作成したフォントデータのハンドルが格納されます。

描画するときは、このフォントデータハンドルを指定しましょう。

この変数をいくつも用意し、多数のハンドルを作成する事で、たくさんの種類のフォントデータで文字を描画することが出来ます。

作成したフォントデータで文字列を描画する時はDrawStringToHandleで描画します。

DrawStringToHandle( x座標 , y座標 , 描画文字列 , 色 , フォントデータハンドル ) ;

色はGetColor(R,G,B);で指定するものです。書式付で描画する時は

DrawFormatStringToHandle( x座標 , y座標 , 色 , フォントデータハンドル , 文字列 , データ........ ) ;

を使用しましょう。


#include "DxLib.h"
 
int FontHandle;
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
 
                FontHandle = CreateFontToHandle("MS 明朝" , 22 , 2 , DX_FONTTYPE_NORMAL);
 
                DrawString(50,50,"DXライブラリ入門!",GetColor(255,255,255));
                DrawFormatStringToHandle( 50 , 150 , GetColor(255,255,255) , FontHandle , "第%d節" , 51+4 ) ;
 
                WaitKey();
                DxLib_End();
        return 0;
}


→掲示板で質問する



- Remical Soft -