SophiaFramework UNIVERSE 5.3 |
SFRWindow クラスを継承するウィンドウは 3 種類あります。
表 10.3. ウィンドウの種類
クラス名 | 解説 |
---|---|
SFRPlainWindow | タイトルやフレームのないプレーンなウィンドウを表すレスポンダです。 |
SFRFrameWindow | フレーム付きのウィンドウを表すレスポンダです。 |
SFRTitleWindow | タイトル付きのウィンドウを表すレスポンダです。 |
通常、ウィンドウはいずれかのウィンドウを継承して使います。
図 10.11. ウィンドウ ( SFRPlainWindow, SFRFrameWindow, SFRTitleWindow )
SFRPlainWindow クラスを継承する MyWindow クラスのインスタンス(プレーンウィンドウ)を作成します。
例 10.11. プレーンウィンドウの定義・実装・作成 1
// 座標 : ( 20, 20 )、幅 : 200、高さ : 250 のプレーンウィンドウ SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRPlainWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void); virtual ~MyWindow(Void); }; // コンストラクタ // SFRPlainWindow の第 1 引数 : アプリケーションクラスのポインタ、第 2 引数 : ウィンドウの位置と大きさ MyWindow::MyWindow(Void) : SFRPlainWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250)) { return; } // プレーンウィンドウの作成 MyWindowPtr window; window = new MyWindow();
注意 | |
---|---|
タイトルやフレームのないプレーンなウィンドウのため、見た目には作成されていないように見えます。 |
SFRPlainWindow クラスを継承する MyWindow クラスのインスタンス(プレーンウィンドウ)に、 SFXGraphics インスタンスを使用して "Hello Window" を描画します。
例 10.12. プレーンウィンドウの定義・実装・作成 2
SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRPlainWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void); // 描画ハンドラの宣言 HANDLER_DECLARE_VOIDRENDER(OnRenderContent) }; // コンストラクタ MyWindow::MyWindow(Void) : SFRPlainWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250)) { // ハンドラの登録 RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent)); return; } // ウィンドウ内に描画する描画ハンドラの定義 // 第 1 引数 : 所属クラス、第 2 引数 : ハンドラ名、第 3 引数 : SFXGraphics インスタンス HANDLER_IMPLEMENT_VOIDRENDER(MyWindow, 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)); return; } // プレーンウィンドウの作成 MyWindowPtr window; window = new MyWindow();
SFRFrameWindow クラスを継承する MyWindow クラスのインスタンス(フレームウィンドウ)を作成します。
例 10.13. フレームウィンドウの定義・実装・作成 1
// 座標 : ( 20, 20 )、幅 : 200、高さ : 250 のフレームウィンドウ SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRFrameWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void); virtual ~MyWindow(Void); }; // コンストラクタ // SFRFrameWindow の第 1 引数 : アプリケーションクラスのポインタ、第 2 引数 : ウィンドウの位置と大きさ MyWindow::MyWindow(Void) : SFRFrameWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250)) { return; } // フレームウィンドウの作成 MyWindowPtr window; window = new MyWindow();
SFRFrameWindow クラスを継承する MyWindow クラスのインスタンス(フレームウィンドウ)に、 SFXGraphics インスタンスを使用して "Hello Window" 描画します。
例 10.14. フレームウィンドウの定義・実装・作成 2
SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRFrameWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void); // 描画ハンドラの宣言 HANDLER_DECLARE_VOIDRENDER(OnRenderContent) }; // コンストラクタ MyWindow::MyWindow(Void) : SFRFrameWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250)) { // ハンドラの登録 RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent)); return; } // ウィンドウ内に描画する描画ハンドラの定義 // 第 1 引数 : 所属クラス、第 2 引数 : ハンドラ名、第 3 引数 : SFXGraphics インスタンス HANDLER_IMPLEMENT_VOIDRENDER(MyWindow, 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)); return; } // フレームウィンドウの作成 MyWindowPtr window; window = new MyWindow();
SFRTitleWindow クラスを継承する MyWindow クラスを作成します。
SFRTitleWindow クラスを継承する MyWindow クラスのインスタンス(タイトルウィンドウ)を作成します。
例 10.15. タイトルウィンドウの定義・実装・作成 1
// 座標 : ( 20, 20 )、幅 : 200、高さ : 250、タイトル : "my window" のタイトルウィンドウ SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void); virtual ~MyWindow(Void); }; // コンストラクタ // SFRTitleWindow の第 1 引数 : アプリケーションクラスのポインタ、第 2 引数 : ウィンドウの位置と大きさ、第 3 引数 : ウィンドウのタイトル MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") { return; } // タイトルウィンドウの作成 MyWindowPtr window; window = new MyWindow();
SFRTitleWindow クラスを継承する MyWindow クラスのインスタンス(タイトルウィンドウ)に、 SFXGraphics インスタンスを使用して "Hello Window" 描画します。
例 10.16. タイトルウィンドウの定義・実装・作成 2
SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void); // 描画ハンドラの宣言 HANDLER_DECLARE_VOIDRENDER(OnRenderContent) }; // コンストラクタ MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") { // ハンドラの登録 RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent)); return; } // ウィンドウ内に描画する描画ハンドラの定義 // 第 1 引数 : 所属クラス、第 2 引数 : ハンドラ名、第 3 引数 : SFXGraphics インスタンス HANDLER_IMPLEMENT_VOIDRENDER(MyWindow, 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)); return; } // タイトルウィンドウの作成 MyWindowPtr window; window = new MyWindow();
GetContentWorld 関数で取得できる 描画領域 は、左上端が ( 0 , 0 ) となります。
ウィンドウはいくつでも作成できます。ウィンドウが複数存在する場合、イベント処理はイベントの種類によって異なります。例えば、キーイベントは最前面のウィンドウ( のフォーカスの当たったコントロール )に送信されます。サスペンド、再開イベントはすべてのウィンドウに送信されます。
ウィンドウを最前面にするには、Select 関数を使います。
ウィンドウは、選択できないように無効にしたり、非表示にできます。ウィンドウを無効にすると、そのウィンドウ内のすべてのコントロールも無効になります。
表 10.4. レスポンダの有効/無効、表示/非表示に関する関数
関数名 | 解説 |
---|---|
SetStatusEnable | レスポンダの応答可能 / 不可能フラグを設定します。( 引数 true : 有効、false : 無効 ) |
GetStatusEnable | レスポンダの応答可能 / 不可能フラグを取得します。 |
SetStatusVisible | レスポンダの可視 / 不可視フラグを設定します。( 引数 true : 表示、false : 非表示 ) |
GetStatusVisible | レスポンダの可視 / 不可視フラグを取得します。 |
ウィンドウを無効にする方法
// _window は SFRWindowPtr 型
_window->SetStatusEnable(false);
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |