大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

Code::Blocks+wxSmithでprintf関数

株式会社クローバーフィールドの経営理念
著者:津路高広
公開日:2019/05/10
最終更新日:2019/05/10
カテゴリー:技術情報
タグ:

津路です。
前回では、目標として、画面に図形やテキストを描いて、更に、図形をファイルに保存しました。

今回は、printfをまねた関数の実装を考えます。
1.新たにprintgという名前の関数を考える
2.出力先をTextCtrlにして、確かめるためのGUIを考える。
3.printfにて、デバッグする。

1.printgの引数には、先頭にformat用可変長文字列を、後続の引数リストには、可変個変数を与える。
1.1.va_listを定義して、引数を引き込む。
va_start,vsprintf,va_endを呼んで、format文字列に応じた引数値を取り込む。
文字列を入れるための内部バッファを定義する。

 1.2.出力用のバッファを、別途クラス内に定義。サイズは、十分大きくしておく。
   内部バッファに取り込んだ文字列と、出力用バッファの長さを足して、制限を超える分、出力してしまう。
 1.3.出力用バッファに内部バッファを連結して、改行記号があれば、その分を出力
   UTF8に変換して、wxTextCtrlにAppendTextする。

2.wxFrameベースのwxSmithプロジェクトを作成し、wxButtonとwxTextCtrlを配置する。
縦に配置するため、wxBoxSizerをまず配置して、OrientationプロパティをwxVERTICALにする。
すべてのwidgetを画面に見せるため、wxFrameのサイズを大きく設定しておく。
ボタンのClickイベントにて、出力する文字列の長さを変えてみる。
debugのためのcases
改行記号:ある、なし
長さ:制限を超える文字列、短い文字列
文字種:alphabet, number, symbol, etc.

3.printg関数内にて、printfを使って、メッセージを出力
konsole terminalにて、実行して、メッセージを参照する。

以下のようなコードになりました。

ただ、これでは、改行がないと、制限長さに至るまで出力されません。

    次の記事 :
    上に戻る