フォントを利用した文字の表示について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
milgy
記事: 10
登録日時: 12年前

フォントを利用した文字の表示について

#1

投稿記事 by milgy » 12年前

DrawFormatStringToHandleを使って文字を表示したいのですが、すぐに消えてしまいます。
どこがいけないのでしょうか、プログラムは以下の通りです。
この関数をmain関数で呼び出しています(長いので抜粋しました)


int gpstart(){

count = (count+1)%90;

if( Key[KEY_INPUT_Z] >= 1){
count = 0;
return 1;
}

DrawFormatStringToHandle(50,150,white,letter_m,"タイトル"); //フォントを使って文字を表示しています。←すくに消滅

if(count <= 45) DrawFormatString(230,350,white,"Zキーを押してください"); //点滅させて表示してます。←こっちは正常

return 0;

}

void gpStart(){

while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0){
if( gpstart()) break;

}

milgy
記事: 10
登録日時: 12年前

Re: フォントを利用した文字の表示について

#2

投稿記事 by milgy » 12年前

お騒がせして申し訳ありません。解決しました。
文字フォントletter_mを
#define letter_m CreateFontToHandle("MS 明朝" , 50 , 9 , DX_FONTTYPE_NORMAL)
のようにdefine文で定義していましたが、
int letter_m = CreateFontToHandle("MS 明朝" , 50 , 9 , DX_FONTTYPE_NORMAL);
のように整数で定義して書き直したら正常に文字が表示されました!

Priest
記事: 123
登録日時: 12年前
住所: 愛知

Re: フォントを利用した文字の表示について

#3

投稿記事 by Priest » 12年前

コード:

// 指定がないのでフォントハンドルをグローバル変数に
int letter_m;

// 関数の外でこうやってもできませんがそうやってませんか?
// int letter_m = CreateFontToHandle("メイリオ", 40, 5, DX_FONTTYPE_ANTIALIASING_8X8);


// スタート画面の処理
int gpstart(){

	static int count;
	
	// カウントアップ
	count = (count+1)%90;

	// タイトル表示
	DrawFormatStringToHandle(50,150,GetColor(255,255,255),letter_m,"タイトル"); //フォントを使って文字を表示しています。←すくに消滅

	// キー入力表示
	if(count <= 45) DrawFormatString(230,350,GetColor(255,255,255),"Zキーを押してください"); //点滅させて表示してます。←こっちは正常

	// Zキーが入力されたら
	if(CheckHitKey(KEY_INPUT_Z)){
		
		// カウントを0に
		count = 0;

		// スタートボタンの入力を受けた
		return 1;
	}

	// スタートボタンの入力を受けていない
	return 0;

}

// メイン関数
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){

	// ウィンドウモードにする
	ChangeWindowMode(true);

	// 初期処理
	DxLib_Init();

	// 描画対象を裏画面にする
	SetDrawScreen(DX_SCREEN_BACK);

	// フォントの読み込み
	letter_m = CreateFontToHandle("メイリオ", 40, 5, DX_FONTTYPE_ANTIALIASING_8X8);

	// ループ処理
    while(ProcessMessage()==0&&ClearDrawScreen()==0){

		// スタートボタンが押されたら終了する
		if(gpstart()) break;

		// 画面更新
		ScreenFlip();

	}

	// 後処理
	DxLib_End();
	return 0;
}
あああ、一足遅かったとは。
どうせだし投稿しちゃいます。

コード:

#include <Priest.h>
int MyPolicy ( void ) { printf( "何事も楽しくね!" ); return 0; }

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: フォントを利用した文字の表示について

#4

投稿記事 by h2so5 » 12年前

milgy さんが書きました:お騒がせして申し訳ありません。解決しました。
文字フォントletter_mを
#define letter_m CreateFontToHandle("MS 明朝" , 50 , 9 , DX_FONTTYPE_NORMAL)
のようにdefine文で定義していましたが、
int letter_m = CreateFontToHandle("MS 明朝" , 50 , 9 , DX_FONTTYPE_NORMAL);
のように整数で定義して書き直したら正常に文字が表示されました!
文字が表示されていなかった原因をちゃんと理解していますか?

CreateFontToHandleで作成できるフォントハンドルの数には上限があります。
マクロによってCreateFontToHandleを埋め込むと、毎フレームCreateFontToHandleを呼ぶことになりあっという間に上限に達してしまい、エラーとして無効なハンドルを返すようになります。
DrawFormatStringToHandleに無効なハンドルを渡しても描画されないので、文字が消えたようにみえます。

milgy
記事: 10
登録日時: 12年前

#5

投稿記事 by milgy » 12年前

>>priest様
本当に申し訳ございません。でもありがとうございます。

>>h2so5様
そうだったのですか・・。理解できていませんでした。原因のご説明ありがとうございます。

閉鎖

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