トップページ > 記事閲覧
文字揃えがしたい
名前:ふぉ 日時: 2023/11/16 23:04

描画位置からの位置やサイズなどを取得して文字揃えをさせたいです ・GetFontCharInfoのデフォルトフォントハンドル用関数 ・GetFontCharInfoに文字列を指定して1文字毎に情報取得する関数 追加可能なものがありましたらお願いします
メンテ

Page: 1 |

Re: 文字揃えがしたい ( No.1 )
名前:管理人 日時:2023/11/18 00:19

> ・GetFontCharInfoのデフォルトフォントハンドル用関数 第一引数 FontHandle に DX_DEFAULT_FONT_HANDLE を指定するとデフォルトフォントハンドルを 指定したことになりますので、よろしければお試しください m(_ _)m > ・GetFontCharInfoに文字列を指定して1文字毎に情報取得する関数 需要があまりない気がしますので、既存の関数で作成したこちらの GetFontStringInfo で代用してください m(_ _)m #include "DxLib.h" // 文字描画座標情報 struct CHARDRAWINFO { char Char[ 8 ]; int DrawX; int DrawY; int NextCharX; int SizeX; int SizeY; }; // GetFontCharInfo の文字列版( 戻り値:文字列の文字数 ) int GetFontStringInfo( int FontHandle, const char *String, CHARDRAWINFO *CharDrawInfo ) { int CharNum = 0; const char *cp = String; int CharBytes; CHARDRAWINFO Info; int i; // 文字列の終端まで繰り返し while( *cp != '\0' ) { // 1文字のバイト数を取得 CharBytes = GetCharBytes( DX_CHARCODEFORMAT_SHIFTJIS, cp ); // 文字を保存 for( i = 0; i < CharBytes; i++ ) { Info.Char[ i ] = cp[ i ]; } Info.Char[ i ] = '\0'; // 文字描画座標情報を取得 GetFontCharInfo( FontHandle, cp, &Info.DrawX, &Info.DrawY, &Info.NextCharX, &Info.SizeX, &Info.SizeY ); // CharDrawInfo が NULL 以外の場合はバッファに情報を代入 if( CharDrawInfo != NULL ) { CharDrawInfo[ CharNum ] = Info; } // 文字情報の数をインクリメント CharNum++; // 参照する位置を移動 cp += CharBytes; } // 文字数を返す return CharNum; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { CHARDRAWINFO CharDrawInfo[ 256 ] ; const char *String = "あいうえおabcdeかきくけこ"; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // 文字列の文字描画座標情報を取得 int CharNum = GetFontStringInfo( DX_DEFAULT_FONT_HANDLE, String, CharDrawInfo ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // 文字列をそのまま描画 DrawString( 0, 100, String, GetColor( 255,255,255 ) ) ; // 文字列を一文字づつ描画 int x = 0 ; for( int i = 0; i < CharNum; i++ ) { DrawString( x, 0, CharDrawInfo[ i ].Char, GetColor( 255,255,255 ) ) ; x += CharDrawInfo[ i ].NextCharX ; } // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } 因みに上記のサンプルプログラムは文字コードがシフトJISであることを前提としていますので、 UTF-8 を使用する場合などは GetFontStringInfo の中で使用されている GetCharBytes の第一引数を DX_CHARCODEFORMAT_UTF8 にするなど、使用する文字コードに合わせて変更してください m(_ _)m
メンテ
Re: 文字揃えがしたい ( No.2 )
名前:ふぉ(解決) 日時:2023/11/18 22:58

ありがとうございます DX_DEFAULT_FONT_HANDLEでデフォルトフォントを指定することが出来ました! 文字列のサンプルも用意していただきありがとうございました!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存