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

9.1. イベント

SophiaFramework では、BREW 標準のイベントと SophiaFramework 用に拡張されたイベントが使えます。 また、独自のイベントも定義できます。

BREW の AEEEvent 型に相当する SophiaFramework のイベント タイプは、 SFCEventEnum として定義されています。

EVT_KEYEVT_APP_START など BREW 標準のイベント名は、 SFEVT_KEYSFEVT_APP_START などのように SF で始まる名前に置き換えられています。

GUI フレームワークで使うイベントの「タイプ」は SFCEventEnum 型のイベント タイプ、 「P16」は UInt16 型の第 1 パラメーター、 「P32」は UInt32 型の第 2 パラメーターです。

GUI フレームワークに関連するイベント タイプの名前は SREVT_ で始まります。

表 9.1. BREW 標準の主なイベント

イベント名 解説
SFEVT_APP_START アプリの起動
SFEVT_APP_STOP アプリの停止
SFEVT_APP_RESUME アプリの再開
SFEVT_APP_SUSPEND アプリの中断
SFEVT_KEY キー入力イベント
SFEVT_KEY_PRESS キー プレス イベント
SFEVT_KEY_RELEASE キー リリース イベント
SFEVT_CHAR 文字入力イベント
SFEVT_ALARM アラーム イベント
SFEVT_COMMAND アプリ固有イベント
SFEVT_APP_CONFIG アプリの起動: 設定画面の表示
SFEVT_APP_HIDDEN_CONFIG アプリの起動: 隠し設定画面の表示
SFEVT_APP_MESSAGE SMS メッセージ受信イベント
SFEVT_ASYNC_ERROR 非同期エラー通知( BREW SDK のバージョンが 2.1 以上の場合にのみ有効 )
SFEVT_APP_TERMINATE アプリの終了 ( BREW SDK のバージョンが 2.1 以上の場合にのみ有効 )
SFEVT_EXIT BREW の終了 ( BREW SDK のバージョンが 2.1 以上の場合にのみ有効 )
SFEVT_USER ユーザー定義

表 9.2. SophiaFramework 用に拡張された主なイベント

イベントの種類 説明
タイプ:SREVT_RESPONDER_RENDER
P16:SRP16_RENDER_INVOKE
P32:Bool 型
レスポンダを再描画するためのイベントです。再描画するレスポンダに送信します。
P32 は描画対象として登録されていないレスポンダを再描画させるとき true を渡します。
※1. アプリ クラスのインスタンスにのみ送信できます。
※2. このイベントを処理してはいけません。
タイプ:SREVT_RESPONDER_RENDER
P16:SRP16_RENDER_BASE
P32:SFXGraphicsPtr
レスポンダのベース領域を再描画するためのイベントです。再描画するレスポンダに送信します。
P32 はグラフィックスへのポインターです。このグラフィックを使って描画します。
※ イベントに応答するにはハンドラを登録します。
タイプ:SREVT_RESPONDER_RENDER
P16:SRP16_RENDER_CONTENT
P32:SFXGraphicsPtr
レスポンダのコンテント領域を再描画するためのイベントです。再描画するレスポンダに送信します。
P32 はグラフィックスへのポインターです。このグラフィックを使って描画します。
※ イベントに応答するにはハンドラを登録します。
タイプ:SREVT_RESPONDER_TERMINATE
P16:SRP16_TERMINATE_INVOKE
P32:Bool 型
レスポンダを破棄するためのイベントです。破棄するレスポンダに送信します。
P32 は強制破棄のとき true となります。
※ このイベントを処理してはいけません。
タイプ:SREVT_RESPONDER_TERMINATE
P16:SRP16_TERMINATE_TRY
P32:Bool 型
レスポンダが破棄される前に通知されるイベントです。
P32 は強制破棄か否かを表す値です。
このイベントを処理するとき、破棄を中止する場合は true、破棄を続行する場合は false を返します。
このイベントは、破棄されるレスポンダに含まれる全ての子階層のレスポンダにも送信され、そのうちいずれかのレスポンダが true を返すと、レスポンダの破棄は中断されます。
タイプ:SREVT_DIALOG
P16:UInt16 型
P32:SFRDialogPtr
ダイアログでキーが押されたイベントなどダイアログ固有のイベントです。
P16 はダイアログが閉じられた理由です。OK ボタンが押された場合は SRP16_OK、クリアキーが押された場合は SRP16_ESCAPE がセットされます。
P32 はダイアログへのポインターです。
タイプ:SREVT_MENU
P16:UInt16 型
P32:SFRMenuPtr
メニューでキーが押されたイベントなどメニュー固有のイベントです。
P16 はメニューが閉じられた理由もしくは、メニューが選択された場合はそのインデックスです。クリアキーが押された場合は SRP16_ESCAPE、メニュー項目を選択した場合は項目のインデックスがセットされます。
P32 はメニューへのポインターです。
タイプ:SREVT_CONTROL
P16:UInt16 型
P32:SFRControlPtr
コントロールでキーが押されたイベントなどコントロール固有のイベントです。
P16 はコントロールの値です。
P32 はコントロールへのポインターです。

例 9.1. レスポンダの強制再描画

// アプリ クラスのインスタンスを取得する
SFRApplicationPtr app(SFRApplication::GetInstance());

// アプリ クラスのインスタンスに再描画イベントを送信する
app->Invoke(SFXEvent(SREVT_RESPONDER_RENDER, 
                     SRP16_RENDER_INVOKE, 
                     true));

例 9.2. コンテント領域の再描画

// コンテント領域を再描画するハンドラの登録
RegisterHandler(SREVT_RESPONDER_RENDER, 
                SRP16_RENDER_CONTENT, 
                HANDLER_BEFORE, 
                HANDLER_FUNCTION(OnRenderContent));

例 9.3. レスポンダの破棄

SFRButtonControlPtr button;

// ボタンの作成と破棄
if ((button = ::new SFRButtonControl(window, SFXRectangle(10, 10, 100, 20), "OK")) != null) {
    // コンストラクタ内部のエラーをチェックする
    if (button->static_catch() == SFERR_NO_ERROR) {  // エラーでないとき
        // SREVT_RESPONDER_TERMINATE イベントを送信してボタンを破棄する
        button->Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE, 
                                SRP16_TERMINATE_INVOKE, 
                                true));
    }
    else {
        // エラーのとき、delete 演算子を使ってボタンを破棄する
        ::delete button;
    }