最高 3 つのボタンを持つ選択ダイアログを作成する
SFRMultiDialog クラスを使って、最高 3 つのボタンを持つ選択ダイアログを作成します。
class ExampleAppli : public SFRApplication {
...
// ダイアログ ハンドラの宣言
HANDLER_DECLARE_VOIDDIALOG(OnDialog)
SFRDialogPtr _dialog;
...
};
// ダイアログ ハンドラ
HANDLER_IMPLEMENT_VOIDDIALOG(ExampleAppli, OnDialog, result, dialog)
{
switch (result) {
case SRP16_OK: // OK ボタンが押されたとき
// 何か処理を行う
break;
case SRP16_CANCEL: // CANCEL ボタンが押されたとき
// 何か処理を行う
break;
case SRP16_ANOTHER: // ANOTHER ボタンの場合
// 何か処理を行う
break;
}
}
// 選択ダイアログを設定する
SFRMultiDialog::ParamRec param;
param.text = "アプリを終了しますか?";
param.ok = "はい";
param.cancel = "いいえ";
param.another = ""; // 空文字の場合、ボタンは表示されない
param.focus = SFRMultiDialog::FOCUS_OK, // フォーカスの位置
param.image = SFBImageSmp(null); // アイコンのイメージ
// ダイアログを作成する
_dialog= new SFRMultiDialog(SFXRectangle(20, 80, 200, 100),
"確認",
param);
// ダイアログ ハンドラを登録する
_dialog->RegisterHandler(SREVT_DIALOG,
HANDLER_BEFORE,
HANDLER_FUNCTION(OnDialog));
最高 1 つのボタンを持つメッセージ ダイアログを作成する
SFRMessageDialog クラスを使って、最高 1 つのボタンを持つメッセージ ダイアログを作成します。
class ExampleAppli : public SFRApplication {
...
// ダイアログ ハンドラの宣言
HANDLER_DECLARE_VOIDDIALOG(OnDialog)
SFRDialogPtr _dialog;
...
};
// ダイアログ ハンドラ
HANDLER_IMPLEMENT_VOIDDIALOG(ExampleAppli, OnDialog, result, dialog)
{
... // 何らかの処理
// ダイアログを閉じる
_dialog->DialogHandler();
}
// ダイアログを作成する
_dialog = new SFRMessageDialog(SFXRectangle(20, 80, 200, 100),
"処理が完了しました。",
"OK");
// ダイアログ ハンドラを登録する
_dialog->RegisterHandler(SREVT_DIALOG,
HANDLER_BEFORE,
HANDLER_FUNCTION(OnDialog));
タイトル付きのダイアログを作成する
SFRTitleDialog クラスを使って、"my dialog"のタイトルがついたウィンドウを作成します。
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 {
// 描画ハンドラを登録する
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(0xD8, 0xD8, 0xFF, 0x00) : 左から R, G, B, アルファ値
graphics->FillRectangle(GetContentWorld(),
SFXRGBColor(0xD8, 0xD8, 0xFF, 0x00));
// "Hello Window" を描画する
graphics->DrawText("Hello Window",
GetContentWorld(),
SFXRGBColor(0x00, 0x00, 0x00, 0x00));
}
// タイトル ダイアログを作成する
MyDialogPtr dialog;
dialog = new MyDialog();
フレーム付きのダイアログを作成する
SFRFrameDialog クラスを使って、フレーム付きのダイアログを作成します。
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 {
// 描画ハンドラを登録する
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(0xD8, 0xD8, 0xFF, 0x00) : 左から R, G, B, アルファ値
graphics->FillRectangle(GetContentWorld(),
SFXRGBColor(0xD8, 0xD8, 0xFF, 0x00));
// "Hello Window" を描画する
graphics->DrawText("Hello Window",
GetContentWorld(),
SFXRGBColor(0x00, 0x00, 0x00, 0x00));
}
// フレーム ダイアログを作成する
MyDialogPtr dialog;
dialog = new MyDialog();
プレーンダイアログを作成する
SFRPlainDialog クラスを使って、プレーンダイアログを作成します。
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 {
// 描画ハンドラを登録する
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(0xD8, 0xD8, 0xFF, 0x00) : 左から R, G, B, アルファ値
graphics->FillRectangle(GetContentWorld(),
SFXRGBColor(0xD8, 0xD8, 0xFF, 0x00));
}
// プレーン ダイアログを作成する
MyDialogPtr dialog;
dialog = new MyDialog();
ダイアログを閉じる方法
DialogHandler を使ってダイアログを閉じます。
// ダイアログの作成
SFRMultiDialog::ParamRec param; // マルチダイアログの構造体
param.text = "ダイアログを閉じます。よろしいですか"; // ダイアログに表示するテキスト
param.ok = "はい"; // 第 1 ボタンのテキスト
param.cancel = ""; // 第 2 ボタンのテキスト( 空テキスト:ボタン無し )
param.another = "; // 第 3 ボタンのテキスト( 空テキスト:ボタン無し )
param.focus = SFRMultiDialog::FOCUS_OK; // フォーカスの初期位置
param.image = SFBImageSmp(null); // アイコン画像
// ダイアログの作成
SFRMultiDialogPtr multiDialog = new SFRMultiDialog(SFXRectangle(10, 40, 220, 140),"終了?", param);
// ダイアログのハンドラの登録
if (static_try()) {
static_throw(multiDialog->RegisterHandler(SREVT_DIALOG, HANDLER_BEFORE,HANDLER_FUNCTION(OnDialog)));
// ダイアログで「はい」を選んだときに実行されるコード
HANDLER_IMPLEMENT_VOIDDIALOG(MyWindow, OnDialog, result, dialog) {
switch(result) {
case SRP16_OK: // 「はい」を選んだとき
dialog->DialogHandler(); // ダイアログを閉じる
break;
}
}