> ・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