SophiaFramework UNIVERSE 5.3 |
ダイアログはウィンドウを継承するレスポンダです。
表 10.5. ダイアログの種類
クラス名 | 解説 |
---|---|
SFRPlainDialog | タイトルやフレームのないプレーンなダイアログを表すレスポンダです。 |
SFRFrameDialog | フレームダイアログを表すレスポンダです。 |
SFRTitleDialog | タイトルダイアログを表すレスポンダです。 |
SFRMessageDialog | 最高 1 つのボタンを持つメッセージダイアログを表します。 |
SFRMultiDialog | 最高 3 つのボタンを持つ選択ダイアログを表します。 |
図 10.24. ダイアログ ( SFRPlainDialog, SFRFrameDialog, SFRTitleDialog )
図 10.25. ダイアログ ( SFRMessageDialog, SFRMultiDialog )
図 10.26. プレーンダイアログ ( SFRPlainDialog )
SFRPlainDialog クラスを継承するクラスのインスタンス(プレーンダイアログ)を作成します。
例 10.18. プレーンダイアログの定義・実装・作成
SFMTYPEDEFCLASS(MyDialog) class MyDialog : public SFRPlainDialog { SFMSEALCOPY(MyDialog) public: MyDialog(Void) static_throws; virtual ~MyDialog(Void); private: HANDLER_DECLARE_VOIDRENDER(OnRenderContent) }; // コンストラクタ MyDialog::MyDialog() : SFRPlainDialog(SFXRectangle(20, 80, 200, 100)) static_throws { if (static_try()) { static_throw( RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent))); } } // デストラクタ MyDialog::~MyDialog(Void) { return; } // 描画ハンドラ HANDLER_IMPLEMENT_VOIDRENDER(MyDialog, OnRenderContent, graphics) { // SFXGraphics インスタンスによる描画 // ダイアログの中を水色に設定 // GetContentWorld() はウィンドウの中の描画領域を表す矩形 ( SFXRectangle ) を返す // SFXRGBColor(0xCE, 0xFF, 0xFF, 0x00) : 水色 graphics->FillRectangle(GetContentWorld(), SFXRGBColor(0xCE, 0xFF, 0xFF, 0x00)); // "Hello Window" 文字列表示 // SFXRGBColor(0x00, 0x00, 0x00, 0x00) : 黒色 graphics->DrawText("Hello Window", GetContentWorld(), SFXRGBColor(0x00, 0x00, 0x00, 0x00)); } // プレーンダイアログの作成 MyDialogPtr dialog; dialog = new MyDialog();
図 10.27. フレームダイアログ ( SFRFrameDialog )
SFRFrameDialog クラスを継承するクラスのインスタンス(フレームダイアログ)を作成します。
例 10.19. フレームダイアログの定義・実装・作成
SFMTYPEDEFCLASS(MyDialog) class MyDialog : public SFRFrameDialog { SFMSEALCOPY(MyDialog) public: MyDialog(Void) static_throws; virtual ~MyDialog(Void); private: HANDLER_DECLARE_VOIDRENDER(OnRenderContent) }; // コンストラクタ MyDialog::MyDialog() : SFRFrameDialog(SFXRectangle(20, 80, 200, 100)) static_throws { if (static_try()) { static_throw( RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent))); } } // デストラクタ MyDialog::~MyDialog(Void) { return; } // 描画ハンドラ HANDLER_IMPLEMENT_VOIDRENDER(MyDialog, OnRenderContent, graphics) { // SFXGraphics インスタンスによる描画 // ダイアログの中を水色に設定 // GetContentWorld() はウィンドウの中の描画領域を表す矩形 ( SFXRectangle ) を返す // SFXRGBColor(0xCE, 0xFF, 0xFF, 0x00) : 水色 graphics->FillRectangle(GetContentWorld(), SFXRGBColor(0xCE, 0xFF, 0xFF, 0x00)); // "Hello Window" 文字列表示 // SFXRGBColor(0x00, 0x00, 0x00, 0x00) : 黒色 graphics->DrawText("Hello Window", GetContentWorld(), SFXRGBColor(0x00, 0x00, 0x00, 0x00)); } // フレームダイアログの作成 MyDialogPtr dialog; dialog = new MyDialog();
図 10.28. タイトルダイアログ ( SFRTitleDialog )
SFRTitleDialog クラスを継承するクラスのインスタンス(タイトルダイアログ)を作成します。
例 10.20. タイトルダイアログの定義・実装・作成
SFMTYPEDEFCLASS(MyDialog) class MyDialog : public SFRTitleDialog { SFMSEALCOPY(MyDialog) public: MyDialog(Void) static_throws; virtual ~MyDialog(Void); private: HANDLER_DECLARE_VOIDRENDER(OnRenderContent) }; // コンストラクタ MyDialog::MyDialog() : SFRTitleDialog(SFXRectangle(20, 80, 200, 100), "my dialog") static_throws { if (static_try()) { static_throw( RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent))); } } // デストラクタ MyDialog::~MyDialog(Void) { return; } // 描画ハンドラ HANDLER_IMPLEMENT_VOIDRENDER(MyDialog, OnRenderContent, graphics) { // SFXGraphics インスタンスによる描画 // ダイアログの中を水色に設定 // GetContentWorld() はウィンドウの中の描画領域を表す矩形 ( SFXRectangle ) を返す // SFXRGBColor(0xCE, 0xFF, 0xFF, 0x00) : 水色 graphics->FillRectangle(GetContentWorld(), SFXRGBColor(0xCE, 0xFF, 0xFF, 0x00)); // "Hello Window" 文字列表示 // SFXRGBColor(0x00, 0x00, 0x00, 0x00) : 黒色 graphics->DrawText("Hello Window", GetContentWorld(), SFXRGBColor(0x00, 0x00, 0x00, 0x00)); } // タイトルダイアログの作成 MyDialogPtr dialog; dialog = new MyDialog();
メッセージダイアログは、ボタンが最高 1 個のボタンを持つダイアログです。
図 10.29. メッセージダイアログ ( SFRMessageDialog )
デフォルト設定では、ボタンを押すとメッセージダイアログは閉じます。 ボタンを押したときの動作を変更するには別のイベントハンドラを定義・実装・登録します。
例 10.22. メッセージダイアログのハンドラの宣言・実装・登録
class ExampleAppli : public SFRApplication { ... // ダイアログハンドラの宣言 HANDLER_DECLARE_VOIDDIALOG(OnDialog) ... }; // ダイアログ のハンドラの実装 HANDLER_IMPLEMENT_VOIDDIALOG(ExampleAppli, OnDialog, result, dialog) { ... // 何らかの処理 // ダイアログを閉じる // dialog : ダイアログへのポインタ dialog->Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE, SRP16_TERMINATE_INVOKE, true)); } // ダイアログハンドラの登録 SFRDialogPtr dialog; dialog = new SFRMessageDialog(SFXRectangle(20, 80, 200, 100), "処理が完了しました。", "OK"); dialog->RegisterHandler(SREVT_DIALOG, HANDLER_BEFORE, HANDLER_FUNCTION(OnDialog));
マルチダイアログは、ボタンが最高 3 個のボタンを持つダイアログです。
ボタンを表示させないためには | |
---|---|
ボタンに表示するテキストを空にすると、ボタンが表示されないようになります。 |
図 10.30. マルチダイアログ ( SFRMultiDialog )
例 10.23. マルチダイアログの作成
SFRMultiDialog::ParamRec param; param.text = "アプリを終了しますか?"; param.ok = "はい"; param.cancel = "いいえ"; param.another = "; // 空文字の場合、ボタンは表示されない param.focus = SFRMultiDialog::FOCUS_OK, // フォーカスの位置 param.image = SFBImageSmp(null); // アイコンのイメージ new SFRMultiDialog(SFXRectangle(20, 80, 200, 150), "確認", param);
SFRMultiDialog のコンストラクタに引数を指定するには SFRMultiDialog::ParamRec 構造体を使います。
ボタンが押された場合の処理はマルチダイアログ のハンドラに記述します。
フレームダイアログ SFRFrameDialog クラスを継承するクラスを作成して、フレームダイアログをカスタマイズします。ウィンドウと同じように描画ハンドラやキーハンドラを登録できます。
図 10.31. フレームダイアログのカスタマイズ例 ( SFRFrameDialog )
例 10.25. フレームダイアログのカスタマイズ
SFMTYPEDEFCLASS(MyDialog) class MyDialog : public SFRFrameDialog { SFMSEALCOPY(MyDialog) public: MyDialog(Void) static_throws; virtual ~MyDialog(Void); private: HANDLER_DECLARE_VOIDRENDER(OnRenderContent) HANDLER_DECLARE_BOOLEVENT(OnKey) }; // コンストラクタ // ハンドラの登録 MyDialog::MyDialog() : SFRFrameDialog(SFXRectangle(20, 80, 200, 150)) static_throws { if (static_try()) { static_throw( RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent))); } if (static_try()) { static_throw( RegisterHandler(SFEVT_KEY, HANDLER_AFTER, HANDLER_FUNCTION(OnKey))); } } // デストラクタ MyDialog::~MyDialog(Void) { return; } // 描画ハンドラ HANDLER_IMPLEMENT_VOIDRENDER(MyDialog, OnRenderContent, graphics) { // 背景色を水色にする graphics->FillRectangle(GetContentWorld(), SFXRGBColor(0xCC, 0xFF, 0xFF, 0x00)); // 文字列を自動折り返しで指定した矩形の中に描画する // 第 1 引数 : 描画文字列 // 第 2 引数 : 描画先の矩形座標 // 第 3 引数 : 描画色 // 第 4 引数 : 行中の文字列のアライメント graphics->DrawString("3 キーを押すと閉じます", SFXRectangle(10, 10, 180, 80), SFXRGBColor(0, 0, 0, 0), IDF_ALIGN_LEFT | IDF_ALIGN_MIDDLE); } // キーハンドラ HANDLER_IMPLEMENT_BOOLEVENT(MyDialog, OnKey, event) { switch (event.GetP16()) { case AVK_3: // 3 キーのキーイベントを受信したとき // 自分自身を閉じる return Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE, SRP16_TERMINATE_INVOKE, true)); } return false; }
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |