半角文字'%'が表示されなくなった

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
amehirune
記事: 181
登録日時: 6年前
住所: どっか
連絡を取る:

半角文字'%'が表示されなくなった

#1

投稿記事 by amehirune » 4年前

お久しぶりでございます、アメヒルネです。

本日は、最近実装が完了した「仮想フルスクリーン」が原因と思われるバグについて
投稿させていただきます。
上記システムを実装するにあたり、フルスクリーンかそうでないかによって
表示される位置及びサイズを変更する、という関数を自作し、
実際に使用したところ、'%'のみが表示されなくなってしまいました。

以下に原因と思われる部分のコードを載せます。
どうかご教授のほどをよろしくお願いします。

尚、開発環境はVC++2008EEで、DXライブラリを使用しております。

コード:

#include "../header/GV.h"

//フォントデータロード
int CreateFontToHandleFull(int no,const TCHAR *FontName,int Size,int Thick,
						   int FontType=-1,int CharSet=-1, int EdgeSize=-1,int Itaric=0,int Handle=-1){

   	//必要情報を宣言
	double RateX,RateY,RateEx;

	//標準フォントダウンロード
	font[no]   = CreateFontToHandle( FontName,Size,Thick,FontType,CharSet,EdgeSize,Itaric,Handle );

	//フルスクリーン用フォントダウンロード
	{
		RateX = (double)DesktopSizeX / WIN_X;		//X成分拡大レートを解析
		RateY = (double)DesktopSizeY / WIN_Y;		//Y成分拡大レートを解析
		RateEx = ( RateX<RateY ? RateX:RateY );		//レートの小さいほうを適用

		Size *= RateEx;
		Thick *= RateEx;

		fontEx[no] = CreateFontToHandle( FontName,Size,Thick,FontType,CharSet,EdgeSize,Itaric,Handle );
	}

	return 0;

}

int DrawFormatStringToHandleEx(int x,int y,int Color,int FontHandle,const TCHAR *FormatString, ... ){

	int DivX,DivY;
	char Strings[256];
	va_list list;

	va_start( list,FormatString );
	vsprintf( Strings,FormatString,list );
	va_end( list );

	if(WinMode==1){

		if( ExtendRateX<ExtendRateY ){		//拡大倍率がX方向のほうが小さければ
			DivX = 0;
			DivY = (DesktopSizeY/2) - (WIN_Y*ExtendRateA/2);		//ゲーム画面を中央に表示させる
		}
		else{								//拡大倍率がY方向のほうが小さければ
			DivX = (DesktopSizeX/2) - (WIN_X*ExtendRateA/2);
			DivY = 0;												//ゲーム画面を中央に表示させる
		}

		DrawFormatStringToHandle( DivX+x*ExtendRateA,DivY+y*ExtendRateA,Color,fontEx[FontHandle],Strings );
	}
	else DrawFormatStringToHandle( x,y,Color,font[FontHandle],Strings );



	return 0;

}

コード:

DrawFormatStringToHandleEx( x,y,WHITE,FONT,"%d%%",100 )
結果≫100
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

Rittai_3D
記事: 525
登録日時: 7年前

Re: 半角文字'%'が表示されなくなった

#2

投稿記事 by Rittai_3D » 4年前

実験してみようと思いましたが、

コード:

WinMode
ExtendRateX
ExtendRateY
ExtendRateA
font[]
fontEx[]
DesktopSizeX
DesktopSizeY
WIN_X
WIN_Y
が分からないのでコンパイルが通りませんでした。
また、Dxライブラリのバージョンも教えてください。
初心者です

あたりめ

Re: 半角文字'%'が表示されなくなった

#3

投稿記事 by あたりめ » 4年前

vsprintfもDrawFormatStringToHandleも %% -> % の処理が入るので
%%%% にする必要があるような気がします。

アバター
amehirune
記事: 181
登録日時: 6年前
住所: どっか
連絡を取る:

Re: 半角文字'%'が表示されなくなった

#4

投稿記事 by amehirune » 4年前

ご返答ありがとうございます。
あたりめさんのおっしゃった通り、%%を%%%%へと変更してみたところ、確かに%が表示されました。
Rittai_3Dさんも、ご回答ありがとうございました。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

アバター
みけCAT
記事: 6297
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 半角文字'%'が表示されなくなった

#5

投稿記事 by みけCAT » 4年前

%%を%%%%に変えることはせずに、素直にDrawFormatStringToHandleではなくDrawStringToHandleを使って描画するようにすればいいのではないでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
amehirune
記事: 181
登録日時: 6年前
住所: どっか
連絡を取る:

Re: 半角文字'%'が表示されなくなった

#6

投稿記事 by amehirune » 4年前

みけCATさん
変数xの値と%を合わせて、「100%」というような表示を行いたいと考えておりましたので、
やはりDrawFormatStringToHandleのほうが望ましいと考えました。
sprintf_s関数を使ってもよかったのですが、そうすると文字の表示が2度手間になってしまい、
それを私は嫌っているので。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

アバター
みけCAT
記事: 6297
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 半角文字'%'が表示されなくなった

#7

投稿記事 by みけCAT » 4年前

amehirune さんが書きました:sprintf_s関数を使ってもよかったのですが、そうすると文字の表示が2度手間になってしまい、
それを私は嫌っているので。
現状のvsprintfを使うプログラムでも、同様に2度手間なのではないでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

あたりめ

Re: 半角文字'%'が表示されなくなった

#8

投稿記事 by あたりめ » 4年前

"%d%%%%"がvsprintfで"100%%"、最後のDrawFormatStringToHandleで
"100%" になってるので、どちらか一回にすべきとは思います。
途中経過をデバッガで止めて見てみたり、デバッグ出力させてみるのもいいですね。

閉鎖

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