トップページ > 記事閲覧
DrawObtainsStringで表示される文字
名前:だんごさん 日時: 2013/09/21 20:54

DrawObtainsStringで描画可能範囲に改行させて表示させようと思ったのですが、文字自体が半分に割られて改行されます。 たぶん仕様だと思うのですが、文字単体で改行できる方法はありますでしょうか? 図で説明するとこんな感じです。 「あなたがもし祝ってくれるなら私は…」    ↓ |あなたがもしネ| |兄ってくれるな| |ら私は…   | 祝っての「祝」を単体で改行させたい    ↓ |あなたがもし | |祝ってくれるな| |ら私は…   |
メンテ

Page: 1 |

Re: DrawObtainsStringで表示される文字 ( No.1 )
名前:管理人 日時:2013/09/22 14:34

文字単体で改行するには、文字列の文字を一文字描画する前に 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; }
メンテ
Re: DrawObtainsStringで表示される文字 ( No.2 )
名前:だんごさん(解決) 日時:2013/09/22 15:05

早急の対応ありがとうございます。 無事文字を改行させて表示させることができました。 感謝しております。
メンテ

Page: 1 |

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

   クッキー保存