文字単体で改行するには、文字列の文字を一文字描画する前に GetDrawStringWidth で文字の描画幅を調べて、
描画可能範囲からはみ出る場合は描画座標を下にずらしてから一文字 DrawString で描画してする
ということをすれば文字単位で改行することが出来ます
プログラムを組んでみましたので、よろしければお使いください
#include "DxLib.h"
#include <string.h>
#include <mbstring.h>
#include <mbctype.h>
void DrawObtainsString2( int x, int y, int AddY, char *String, int StrColor ) ;
void DrawObtainsString2( int x, int y, int AddY, char *String, int StrColor )
{
char TempStr[ 3 ] ;
int StrLen ;
int i ;
int DrawX ;
int DrawY ;
int CharLen ;
int DrawWidth ;
RECT DrawArea ;
// 描画範囲を取得
GetDrawArea( &DrawArea ) ;
DrawX = x ;
DrawY = y ;
// 文字列全体のバイト数を取得
StrLen = strlen( String ) ;
for( i = 0; i < StrLen; )
{
// 全角文字かどうかを判定
if( _mbbtype( ( unsigned char )String[ i ], 0 ) == _MBC_LEAD )
{
// 全角文字の場合
TempStr[ 0 ] = String[ i ] ;
TempStr[ 1 ] = String[ i + 1 ] ;
TempStr[ 2 ] = '\0' ;
CharLen = 2 ;
}
else
{
// 半角文字の場合
TempStr[ 0 ] = String[ i ] ;
TempStr[ 1 ] = '\0' ;
CharLen = 1 ;
}
// 1文字の描画幅を取得
DrawWidth = GetDrawStringWidth( String + i, CharLen ) ;
// 描画範囲からはみ出る場合は改行
if( DrawX + DrawWidth > DrawArea.right )
{
DrawX = x ;
DrawY += AddY ;
}
// 1文字描画
DrawString( DrawX, DrawY, TempStr, StrColor ) ;
// 描画座標をずらす
DrawX += DrawWidth ;
// 描画する文字を進める
i += CharLen ;
}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
// 描画範囲が分かるように枠を描画
DrawBox( 100, 100, 300, 300, GetColor( 255,255,255 ), FALSE ) ;
// 描画範囲を限定
SetDrawArea( 100, 100, 300, 300 ) ;
// 文字列を描画
DrawObtainsString2(
100, 100, 16,
"あいうえおかきくけこさしすせそたちつてとなにぬねの",
GetColor( 255,255,255 )
) ;
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}