トップページ > 記事閲覧
GetDrawStringWidthについて
名前:コモリ 日時: 2020/09/03 23:20

C#版DXライブラリを使用しています。 リファレンスに書いてあるサンプルプログラムを実行したところ適切に表示されませんでした。 private const int WIDTH = 640; private const int HEIGHT = 480; static int Main() { int StrWidth, StrLen; // DXライブラリの初期化 if (DxLib_Init() == -1) return -1; // 最初の文字列を描画 DrawString(0, 0, "今日もいい天気だ", GetColor(255, 255, 255)); // 文字列の長さを取得 //C#版文字数取得 StrLen = ("今日もいい天気だ").Length; // 描画時の文字列の幅を取得 StrWidth = GetDrawStringWidth("今日もいい天気だ", StrLen); // 「今日もいい天気だ」の直後に新たな文字列を描画 DrawString(StrWidth, 0, "明日も晴れると良いなあ", GetColor(255, 255, 255)); // キー入力待ち WaitKey(); // DXライブラリの使用終了 DxLib_End(); return 0; } しかし、幅取得の部分を以下の様に書き換えた所正常に動作しました。 // 描画時の文字列の幅を取得 StrWidth = GetDrawStringWidth("今日もいい天気だ", StrLen*2); また、半角英数字のみ場合は不具合は発生しませんでした。 C#版で、全角を含む文字列の幅を取得する際、なにか特別な設定が必要なのでしょうか?
メンテ

Page: 1 |

Re: GetDrawStringWidthについて ( No.1 )
名前:管理人 日時:2020/09/04 02:13

標準のC#版DXライブラリは文字列をシフトJISとして扱っていますので、 文字コードがUnicode( UTF-16LE )である C# の文字列の Length とは GetDrawStringWidth に渡すべき『文字列の長さ』の値が異なっています DXライブラリの関数の strlenDx を使用して文字数を取得していただくか、 若しくは C#版DXライブラリのパッケージの中にある 『UnicodeVer』フォルダの中にあるC#版DXライブラリのファイルを お使いいただければ * 2 をしなくても正常に動作します ( 『UnicodeVer』フォルダの中にあるC#版DXライブラリは文字列を Unicode( UTF-16LE )で扱うようになっています ) よろしければお試しください m(_ _)m
メンテ
Re: GetDrawStringWidthについて ( No.2 )
名前:コモリ(解決) 日時:2020/09/05 13:01

対応ありがとうございます。 やはり文字コードですか...プログラム組んでると日本語が嫌いになりそうです。 strlenDxを使用することで正常に動作しました。
メンテ

Page: 1 |

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

   クッキー保存