前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3

12.10. サンプルコード

12.10.1. リスト表示

例 12.49. リスト表示

// 矩形領域の定義
SFXRectangle rectangle(30, 50, 120, 150);
// グラフィックスオブジェクトの取得
SFXGraphicsPtr graphics = SFXGraphics::GetInstance();

// 外枠を描画する : 黒色を指定する
graphics->DrawRectangle(rectangle, SFXRGBColor(0x00, 0x00, 0x00, 0x00));

// 外枠を上下左右 1 ずつ縮小する
rectangle.Deflate(1, 1);

// 高さをフォントの高さに設定する
rectangle.SetHeight(graphics->GetFontHeight());

// リストに表示するテキスト
SFXWideString stringArray[] = {"C++", "java", "perl", "ruby", "python", "haskell"};

SInt16 i;
for (i = 0; i < lengthof(stringArray); ++i) {
    if (i % 2 == 0) { 
        // 奇数行のとき
        // 塗り潰した矩形を描画する
        graphics->FillRectangle(rectangle, SFXRGBColor(0xFF, 0xAA, 0xBB, 0x00));
    }
    else { 
        // 偶数行のとき
        // 塗り潰した矩形を描画する
        graphics->FillRectangle(rectangle, SFXRGBColor(0xDD, 0xDD, 0xFF, 0x00));
    }
    // テキストを描画する : 場所を SFXRectangle で指定する
    graphics->DrawSingleText(stringArray[i], rectangle, SFXRGBColor(0x00, 0x00, 0x00, 0x00));

    // 矩形を下に移動する
    rectangle.AddY(rectangle.GetHeight() + 2);
}

図 12.29. 実行結果[リスト表示]

実行結果[リスト表示]
[Note] 複数の描画

矩形を移動する関数 (SFXRectangle::AddY 関数) を for 文の中で使うことで、 複数の同じサイズの矩形の描画をシンプルに記述できます。

12.10.2. レスポンダの配置

例 12.50. レスポンダの配置

SFXRectangle rectangle(20, 40, 150, 0);

// レスポンダ関連のエラー処理は省略

// 矩形の高さをフォントの高さ + 4 に設定する
rectangle.SetHeight(SFXGraphics::GetFontHeight(AEE_FONT_NORMAL) + 4);

// ボタンコントロール1を作成し配置する
_button1 = SFZTextButtonControl::NewInstance();
// ボタンコントロール1の親レスポンダを設定する
_button1->SetParent(GetThis());
// ボタンコントロール1のラベルを "Text Button 1" に設定する
_button1->SetText("Text Button 1");
// ボタンコントロール1の実領域を設定する
_button1->SetRealBound(rectangle);
// ボタンコントロール1の状態を「可視+活性+操作可能+フォーカス」にまとめて設定する
_button1->SetState(true, true, true, true);

// 矩形を右に 30 ピクセル、下に 40 ピクセル移動する
rectangle.Offset(30, 40);

// テキストラベルコントロールを作成し配置する
_singleTextLabel = SFZSingleTextLabelControl::NewInstance();
// テキストラベルコントロールの親レスポンダを設定する
_singleTextLabel->SetParent(GetThis());
// テキストラベルコントロールのラベルを "Text Label" に設定する
_singleTextLabel->SetText("Text Label");
// テキストラベルコントロールの実領域を設定する
_singleTextLabel->SetRealBound(rectangle);
// テキストラベルコントロールの状態を「可視+活性+操作不可+非フォーカス」にまとめて設定する
_singleTextLabel->SetState(true, true, false, false);

// 矩形を左に 30 ピクセル、下に 40 ピクセル移動する
rectangle.Offset(-30, 40);

// ボタンコントロール2を作成し配置する
_button2 = SFZTextButtonControl::NewInstance();
// ボタンコントロール2の親レスポンダを設定する
_button2->SetParent(GetThis());
// ボタンコントロール2のラベルを "Text Button 2" に設定する
_button2->SetText("Text Button 2");
// ボタンコントロール2の実領域を設定する
_button2->SetRealBound(rectangle);
// ボタンコントロール2の状態を「可視+活性+操作可能+非フォーカス」にまとめて設定する
_button2->SetState(true, true, true, false);

// 矩形の幅を 30 ピクセル広げ、Y 座標の値に 60 ピクセルを加算し、Y 軸方向に上下 5 ピクセルそれぞれ広げる
rectangle.AddWidth(30).AddY(60).Inflate(0, 5);

// エディットボックスコントロールを作成し配置する
_singleEditBox = SFZSingleEditBoxControl::NewInstance();
// エディットボックスコントロールの親レスポンダを設定する
_singleEditBox->SetParent(GetThis());
// エディットボックスコントロールの初期値を "Edit Box" に設定する
_singleEditBox->SetText("Edit Box");
// エディットボックスコントロールの実領域を設定する
_singleEditBox->SetRealBound(rectangle);
// エディットボックスコントロールの状態を「可視+活性+操作可能+非フォーカス」にまとめて設定する
_singleEditBox->SetState(true, true, true, false);

図 12.30. 実行結果[レスポンダの配置]

実行結果[レスポンダの配置]
[Note] 注意

レスポンダの位置や移動、サイズ変更は SFXRectangle クラスのメンバ関数を使用して指定します。