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

4.5. カスタマイズ

4.5.1. カスタマイズ前

カスタマイズする前の helloworld アプリは下記のように動作します。

  1. アプリを起動すると、画面は白色で塗り潰され、文字列 "Hello World" が黒色で表示されます。
  2. セレクトキーを押すと、アプリは終了します。

図 4.1. カスタマイズ前 : アプリ起動後の画面

カスタマイズ前 : アプリ起動後の画面

4.5.2. カスタマイズ

それでは、helloworld アプリを次のようにカスタマイズしましょう。

  1. アプリが起動されると、画面を白色で塗り潰します(画面に文字列は表示されません)。
  2. 1 キーが押されると、文字列 "Hello World" を黒色で画面に描画します。
  3. セレクトキーが押されると、アプリを終了します。

OnKey 関数の中から呼び出される Draw 関数は、 背景を白色で塗り潰し、文字列 "Hello World" を黒色で描画します。

例 4.7. 文字列 "Hello World" を表示しない HandleRender 関数の実装

// 全画面描画ハンドラ
Bool helloworld::HandleRender(SFXEventConstRef event)
{
    // ここにアプリ開始時とレジューム時の全画面の描画処理を記述する

    SFXGraphicsPtr graphics;
    Bool           result(false);

    if (IsRenderable()) {  // 画面が再描画可能なら(優先的イベントハンドラが登録されていないなら)

        // SFXGraphics インスタンスを取得する
        graphics = SFXGraphics::GetInstance();
        if (graphics != null) {

            // 画面を白色で塗り潰す
            // SFXGraphics::GetDeviceRectangle() で画面領域全体を取得する
            // SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00) は白色を表す( 左から R、G、B、アルファ値 )
            graphics->ClearRectangle(graphics->GetDeviceRectangle(), SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00));

            // 最後に SFXGraphics::Update() を呼び出して画面を再描画する
            // ※この一行を記述しなければ、画面は更新されない
            graphics->Update();

            result = true;  // 画面を再描画したので result に true を設定する
        }
    }

    return result;  // 画面を再描画した場合は true、そうでない場合は false を返す
}

例 4.8. Draw 関数

// Draw 関数は OnKey 関数内から呼び出される
Void Draw(Void)
{
    // 画面を白色で塗り潰して文字列 "Hello World" を描画する

    // SFXGraphics インスタンスを取得する
    SFXGraphicsPtr graphics = SFXGraphics::GetInstance();

    if (graphics != null) {

        // 画面を白色で塗りつぶする
        // SFXGraphics::GetDeviceRectangle() で画面領域全体を取得する
        // SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00) は白色を表します( 左から R、G、B、アルファ値 )。
        graphics->ClearRectangle(graphics->GetDeviceRectangle(), SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00));

        // 画面に文字列 "Hello World" を描画する
        graphics->DrawSingleText("Hello World", graphics->GetDeviceRectangle(), SFXRGBColor(0x00, 0x00, 0x00, 0x00));

        // 最後に SFXGraphics::Update() を呼び出して画面を再描画する
        // ※この一行を記述しなければ、画面は更新されない
        graphics->Update();

        // ※Draw 関数では、"true"や"false"を返す必要がない
    }
}
[Note] Draw 関数の戻り値

HandleRender 関数と異なり、 Draw 関数は true や false を返す必要はありません。

[Caution] 画面の更新

Draw 関数の中で SFXGraphics::Update 関数を呼び出さなければ画面は更新されません。

レスポンダ内の領域を描画する場合は、 描画エンジンSFXGraphics::Update 関数を呼び出すので、開発者はこの関数を呼び出す必要はありません。

1 キーが押された場合、 Draw 関数を呼び出すように OnKey 関数をカスタマイズします。

例 4.9. OnKey 関数のカスタマイズ

// OnKey 関数: キーハンドラ
Bool helloworld::OnKey(UInt16 key)
{
    // ここに BREW 環境から受信したキーイベントの分岐処理を記述する

    switch (key) {

        case AVK_SELECT: // セレクトキーのキーイベントを受信したとき

            Terminate(); // アプリを終了する

            return true; // キーイベントを処理したので true を返す

        //*** 太字が追加部分
        case AVK_1: //  1 キーのキーイベントを受信したとき

            Draw();      // 文字列 "Hello World" を描画する

            return true; // キーイベントを処理したので true を返す
    }

    return false; // キーイベントを処理していないので false を返す
}
[Note] OnKey 関数の戻り値

OnKey 関数は、 キーイベントを処理した場合は true、 処理しなかった場合は false を返します。

4.5.3. カスタマイズ後

カスタマイズ後の helloworld アプリは次のように動作します。

  1. アプリを起動すると、画面は白色で塗り潰されます(文字列 "Hello World" は画面に表示されません)。
  2. 1 キーを押すと、文字列 "Hello World" が黒色で画面に表示されます。
  3. セレクトキーを押すと、アプリは終了します。

図 4.2. カスタマイズ後 : アプリ起動後の画面

カスタマイズ後 : アプリ起動後の画面

図 4.3. カスタマイズ後 : 1 キー押下後の画面

カスタマイズ後 : 1 キー押下後の画面