前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0

12.1. 描画の方法

図形やテキストは、SFXGraphics インスタンスを使って画面に描画します。

[Caution] 注意

SFXGraphics インスタンスの使用方法は GUI フレームワークを使う場合と使わない場合で異なります。

12.1.1. GUI フレームワークを使うとき

SFXGraphics インスタンスをレスポンダに登録された描画ハンドラの引数として、 コンテント領域に図形やテキストを描画します。

例 12.1. 長方形とテキストの描画

// ウィンドウ クラスの定義
SFMTYPEDEFCLASS(MyWindow)
class MyWindow : public SFRTitleWindow {
    SFMSEALCOPY(MyWindow)
public:
    MyWindow(Void) static_throws;
    virtual ~MyWindow(Void);

    // 描画ハンドラの宣言
    HANDLER_DECLARE_VOIDRENDER(OnRenderContent)
};

// コンストラクタ
// ウィンドウは 座標 ( 20, 20 ) に、幅 200 、高さ 250 で作られる
// タイトルは "my window"
MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(),
    SFXRectangle(20, 20, 200, 250), "my window") static_throws
{
    // 描画ハンドラを登録
    RegisterHandler(SREVT_RESPONDER_RENDER, 
                    SRP16_RENDER_CONTENT,
                    HANDLER_BEFORE, 
                    HANDLER_FUNCTION(OnRenderContent));

    return;
}

// デストラクタ
MyWindow::~MyWindow(Void)
{
    return;
}

// 描画ハンドラの定義
HANDLER_IMPLEMENT_VOIDRENDER(MyWindow, OnRenderContent, graphics)
{
    // SFXGraphics インスタンスはマクロの第 3 引数 ( graphics ) として渡される
    
    // 画面を白色に塗りつぶす
    // GetContentWorld 関数でウィンドウ内の長方形の描画領域を取得する
    // SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00) = 白色
    graphics->FillRectangle(GetContentWorld(), 
                            SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00));

    // "Hello Window" を表示する
    // SFXRGBColor(0x00, 0x00, 0x00, 0x00) = 黒色
    graphics->DrawText("Hello Window", 
                       GetContentWorld(),
                       SFXRGBColor(0x00, 0x00, 0x00, 0x00));

    // graphics->Update() は呼び出さない

    return;
}

図 12.1. 実行結果

実行結果
[Note] 注意

描画ハンドラは、必要に応じて自動的に呼ばれます。

12.1.2. GUI フレームワークを使わないとき

任意の場所で SFXGraphics::GetInstance 関数を使って SFXGraphics インスタンスを取得して 描画します。

例 12.2. 長方形と文字列の描画

Void Draw(Void)
{
    // SFXGraphics インスタンスの取得
    SFXGraphicsPtr graphics = SFXGraphics::GetInstance();

    if (graphics == null) { 

        // エラー処理

        return;
    }

    // 画面を白色に塗りつぶす
    // SFXGraphics::GetDeviceRectangle() で画面全体の長方形を取得する
    // SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00) = 白色
    graphics->FillRectangle(SFXGraphics::GetDeviceRectangle(),
                            SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00));

    // 画面に "Hello World" 文字列を描画する
    // SFXRGBColor(0x00, 0x00, 0x00, 0x00) = 黒色
    graphics->DrawText("Hello World", SFXGraphics::GetDeviceRectangle(),
                       SFXRGBColor(0x00, 0x00, 0x00, 0x00));

    // 画面の更新
    graphics->Update();
}
[Caution] 関数の呼び出し

描画をした後は、必ず SFXGraphics::Update 関数を呼び出して画面を再描画します。

[Note] 画面更新のタイミング

SFXGraphics::Update 関数を呼び出した後、実際に画面に反映されるタイミングは機種によって異なります。

図 12.2. 実行結果

実行結果