前のページ次のページ上に戻るホーム SophiaFramework 2.1

9.9. ウィンドウ

ウィンドウはレスポンダの一種であり、 パソコンでいうところのウィンドウと同じものです。

9.9.1. ウィンドウの生成

ウィンドウを生成するには生成したいウィンドウのインスタンスを new 演算子で生成します。

以下にタイトル付きのウィンドウを生成するサンプル コードを すべて示します。

SFMTYPEDEFCLASS(Demo)
class Demo : public SFRApplication {
  public:
    static inline SFCInvokerPtr Constructor(Void)
    {
      return(new Demo());
    }
	
  private:
    inline Demo(Void)
    {
      SFRWindowPtr  window;

      if (Exception() == NO_ERROR) {
        window = new SFRTitleWindow(this, SFURect(10, 10, 100, 100), "Hello");
        if (window != NULL) {
          if (Exception(window->Exception()) != NO_ERROR) {
            delete window;
          }
        }
        else {
          Exception(ENOMEMORY);
        }
      }
      return;
    }
	
    virtual inline ~Demo(Void)
    {
      return;
    }
};

SFCInvokerSPP SFCApplet::Boot(AEECLSID id)
{
  SFCInvokerSPP  result  = NULL;

  switch (id) {
    case AEECLSID_Demo:
      result = Demo::Constructor;
      break;
  }
  return(result);
}

9.9.2. イベントの処理

ウィンドウでイベントを受け取るにはイベント ハンドラを 登録します。ウィンドウには標準でいくつかのハンドラが 登録されています。ウィンドウでイベントを処理する方法は アプリケーションの方法とほぼ同じですので、具体的な 方法についてはアプリケーションを参照してください。

ウィンドウのベース領域の再描画イベントを受け取るには タイプが SREVT_RESPONDER_RENDER で、第一パラメータが SRP16_RENDER_BASE の イベント用のハンドラを登録してください。また、ウィンドウの コンテント領域の再描画イベントを受け取るには SREVT_RESPONDER_RENDER と SRP16_RENDER_CONTENT の組み合わせの イベント用のハンドラを登録してください。

9.9.3. ウィンドウの破棄

ウィンドウを破棄するには、SREVT_RESPONDER_TERMINATE イベントを 自分に対して送信してください。 詳しくは、レスポンダのコンポーネントの破棄を参照してください。

ウィンドウを明示的に破棄することもできますが、 アプレット終了時に、破棄されていないウィンドウは自動的に破棄されます。

9.9.4. ウィンドウの種類

ウィンドウは標準では3種類定義されています。 SFRPlainWindowSFRFrameWindowSFRTitleWindow です。 それぞれのウィンドウを継承して独自の種類のウィンドウを作ることも、 そのまま継承せずに使用することもできます。 用意されているウィンドウとまったく異なるウィンドウを定義する場合は、 SFRWindow から継承します。