SophiaFramework では、BREW 標準のイベントと SophiaFramework 用に拡張されたイベントが使えます。
また、独自のイベントも定義できます。
BREW の AEEEvent 型に相当する SophiaFramework のイベント タイプは、
SFCEventEnum として定義されています。
EVT_KEY や EVT_APP_START など BREW 標準のイベント名は、
SFEVT_KEY や SFEVT_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. このイベントを処理してはいけません。 |
|
|
| レスポンダのベース領域を再描画するためのイベントです。再描画するレスポンダに送信します。 |
| 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 を返すと、レスポンダの破棄は中断されます。 |
|
|
| ダイアログでキーが押されたイベントなどダイアログ固有のイベントです。 |
| P16 はダイアログが閉じられた理由です。OK ボタンが押された場合は SRP16_OK、クリアキーが押された場合は SRP16_ESCAPE がセットされます。 |
| P32 はダイアログへのポインターです。 |
|
|
| メニューでキーが押されたイベントなどメニュー固有のイベントです。 |
| P16 はメニューが閉じられた理由もしくは、メニューが選択された場合はそのインデックスです。クリアキーが押された場合は SRP16_ESCAPE、メニュー項目を選択した場合は項目のインデックスがセットされます。 |
| P32 はメニューへのポインターです。 |
|
|
| コントロールでキーが押されたイベントなどコントロール固有のイベントです。 |
| 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) {
button->Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE,
SRP16_TERMINATE_INVOKE,
true));
}
else {
::delete button;
}