![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |
メッセージ ダイアログは通知メッセージを表示するダイアログです。
メニュー項目を選択すると、メッセージ ダイアログを表示するようにします。
テキスト メニューで実装したメニューを利用します。
選択したメニュー項目の配色にダイアログの配色を合わせるようにします。
ダイアログを作成する関数を定義します。
例 3.49. ダイアログ 作成関数
// MenuWindow クラスの宣言 SFMTYPEDEFRESPONDER(MenuWindow) class MenuWindow : public SFZWindow { SFMSEALRESPONDER(MenuWindow) SFMRESPONDERINSTANTIATEFOUR(MenuWindow, SFZWindow, SFYContainer, SFYWidget, SFYResponder) public: enum CodeEnum { CODE_TYPE = four_char_code('M', 'E', 'N', 'U') }; SFMTYPEDEFTYPE(CodeEnum) SFZTextMenuSmp _textMenu; public: static MenuWindowSmp NewInstance(SFCErrorPtr exception = null); SFCError Make(Void); protected: explicit MenuWindow(Void) static_throws; virtual ~MenuWindow(Void); virtual Void HandleRenderRequest(SFXGraphicsPtr graphics) const; XANDLER_DECLARE_VOIDRESULT(OnMenuResult) XANDLER_DECLARE_BOOLEVENT(OnKey) // *** 太字が追加部分 private: // メッセージ ダイアログ作成関数の宣言 SFCError MakeColorDlg(SFXRGBColorConstRef dlgBackColor, SFXRGBColorConstRef dlgForeColor, SFXBevelColorConstRef btnColor, SFXRGBColorConstRef btnTextColor); }; // メッセージ ダイアログ作成関数の実装 SFCError MenuWindow::MakeColorDlg(SFXRGBColorConstRef dlgBackColor, SFXRGBColorConstRef dlgForeColor, SFXBevelColorConstRef btnColor, SFXRGBColorConstRef btnTextColor) { SFCError error; // メッセージ ダイアログのインスタンスを作成します。 SFZMessageDialogSmp dlg = SFZMessageDialog::NewInstance(&error); if (dlg != null) { error = dlg->SetParent(GetThis()); if (error == SFERR_NO_ERROR) { // メッセージ ダイアログのメッセージを設定します。 error = dlg->SetMessageText("Color Changed."); if (error == SFERR_NO_ERROR) { // メッセージ ダイアログのボタンのテキストを設定します。 error = dlg->SetButtonText("OK"); if (error == SFERR_NO_ERROR) { // メッセージ ダイアログの背景色を設定します。 dlg->SetBackgroundColor(dlgBackColor); // メッセージの色を設定します。 dlg->GetMessage()->SetTextColor(dlgForeColor); // メッセージを中央にアラインします。 dlg->GetMessage()->SetHorizontalAlign(SFZMultipleTextLabelControl::DEFAULT_HORIZONTAL); // ボタンの色を設定します。 dlg->GetButton()->SetButtonColor(btnColor); // ボタン テキストの色を設定します。 dlg->GetButton()->SetTextColor(btnTextColor); // ダイアログの大きさを計算し、中央に配置します。 SFXRectangle rect; rect.Set(dlg->GetSuitableBound(GetLocalBound().Deflate(10,10))); rect.SetOrigin(SFXGrid(GetLocalBound().GetSize() - rect.GetSize()) / 2); dlg->SetRealBound(rect); // 500 ミリ秒後にダイアログを閉じます。 dlg->ScheduleTimer(500); dlg->SetState(true, true, true, true); dlg->ToFront(); } } } } return error; }
![]() |
注意 |
|---|---|
|
GetMessage() でメッセージ、GetButton() でボタンを取得することができます。 それぞれ、SFZMultipleTextLabelControlSmp 型、SFZTextButtonControlSmp 型の値が返されます。 | |
配色変更のメニュー項目が選択されたときに、ダイアログを表示するようにします。
例 3.50. メニューの結果ハンドラの変更
// メニューの結果ハンドラ XANDLER_IMPLEMENT_VOIDRESULT(MenuWindow, OnMenuResult, invoker, reason, result) { // *** 太字が追加部分 if (reason == SFP16_RESULT_OK) { TRACE("%S selected", static_cast<SFZTextMenuPtr>(invoker)->GetItemText((SInt16)result).GetCString()); switch (result) { case 0: // Elegant の配色に変更します。 _textMenu->SetTitleForeColor(COLOR_MENU_TITLE_FONT_ELEG); _textMenu->SetTitleBackColor(COLOR_MENU_TITLE_BACK_ELEG); _textMenu->SetSelBackColor(COLOR_MENU_SELBACK_ELEG); _textMenu->SetSelForeColor(COLOR_MENU_SELFORE_ELEG); _textMenu->SetBevelColor(COLOR_MENU_BEVEL_ELEG); for (i = 0; i < num; ++i) { _textMenu->SetItemForeColor(i, COLOR_MENU_ITEM_FORE_ELEG); } MakeColorDlg(COLOR_MENU_SELBACK_ELEG, COLOR_MENU_SELFORE_ELEG, COLOR_MENU_BEVEL_ELEG, COLOR_MENU_ITEM_FORE_ELEG); break; case 1: // Carnival の配色に変更します。 _textMenu->SetTitleForeColor(COLOR_MENU_TITLE_FONT_CARN); _textMenu->SetTitleBackColor(COLOR_MENU_TITLE_BACK_CARN); _textMenu->SetSelBackColor(COLOR_MENU_SELBACK_CARN); _textMenu->SetSelForeColor(COLOR_MENU_SELFORE_CARN); _textMenu->SetBevelColor(COLOR_MENU_BEVEL_CARN); for (i = 0; i < num; ++i) { _textMenu->SetItemForeColor(i, COLOR_MENU_ITEM_FORE_CARN); } MakeColorDlg(COLOR_MENU_SELBACK_CARN, COLOR_MENU_SELFORE_CARN, COLOR_MENU_BEVEL_CARN, COLOR_MENU_ITEM_FORE_CARN); break; case 2: // Dynamic の配色に変更します。 _textMenu->SetTitleForeColor(COLOR_MENU_TITLE_FONT_DYNA); _textMenu->SetTitleBackColor(COLOR_MENU_TITLE_BACK_DYNA); _textMenu->SetSelBackColor(COLOR_MENU_SELBACK_DYNA); _textMenu->SetSelForeColor(COLOR_MENU_SELFORE_DYNA); _textMenu->SetBevelColor(COLOR_MENU_BEVEL_DYNA); for (i = 0; i < num; ++i) { _textMenu->SetItemForeColor(i, COLOR_MENU_ITEM_FORE_DYNA); } MakeColorDlg(COLOR_MENU_SELBACK_DYNA, COLOR_MENU_SELFORE_DYNA, COLOR_MENU_BEVEL_DYNA, COLOR_MENU_ITEM_FORE_DYNA); break; case 3: // Black の配色に変更します。 _textMenu->SetTitleForeColor(COLOR_MENU_TITLE_FONT_MONO); _textMenu->SetTitleBackColor(COLOR_MENU_TITLE_BACK_MONO); _textMenu->SetSelBackColor(COLOR_MENU_SELBACK_MONO); _textMenu->SetSelForeColor(COLOR_MENU_SELFORE_MONO); _textMenu->SetBevelColor(COLOR_MENU_BEVEL_MONO); for (i = 0; i < num; ++i) { _textMenu->SetItemForeColor(i, COLOR_WHITE); } MakeColorDlg(COLOR_MENU_SELBACK_MONO, COLOR_MENU_SELFORE_MONO, COLOR_MENU_BEVEL_MONO, COLOR_MENU_ITEM_FORE_MONO); break; case 5: _textMenu->SetMenuStyle(SFZTextMenu::SCROLLABLE_STYLE); break; case 6: _textMenu->SetMenuStyle(SFZTextMenu::PAGE_STYLE); case 8: break; } } else { ・・・省略・・・ } return; }
シミュレータでの実行結果です。
この章を通してのサンプル コードはこちらにあります。
|
Copyright (C) 2002 - 2008 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]()
|