タンゴレンの三つの基本画面(メイン画面と情報ウィンドウ画面と検索パネル画面)は、三つともWSCmainWindowです。その他の補助的なダイアログ画面も多くはWSCmainWindowで作られています。モーダルな動作になる小さな画面にはWSCdialogを使っているものもありますが、モードレスに表示される画面は全部WSCmainWindowになっています。
ここでは、比較的コンパクトで複雑な処理も無い「お手軽ウィンドウ配置ダイアログ画面」(画像等はこちらから⇒ http://www.attocraft.jp/contents/html/products/tangoren/manual/m2920_easy_placement_dlg.html )を例に、WideStudio/MWTのウィジェットをクラスベースで使うやり方を説明します。
まず、クラスの宣言から。短いので全部載せておきます。
namespace tgrapp { class CTGRWindowPlacementDlg; /** 唯一のダイアログパネルへのポインタを返す */ CTGRWindowPlacementDlg* GetCTGRWPDlg(); /** お手軽ウィンドウ配置のコントロール画面クラス **/ class CTGRWindowPlacementDlg { class WPDImpl; WPDImpl* _pimpl; CTGRWindowPlacementDlg(); public: ~CTGRWindowPlacementDlg(); void ShowDialog(bool show=true); void ToggleDialog(); private: void Delete(); friend CTGRWindowPlacementDlg* GetCTGRWPDlg(); }; } /* namespace tgrapp */
tgrapp名前空間はグローバルネームスペースを極力汚さないためのもので、ここにはタンゴレンのアプリケーションコードが含まれます。
GetCTGRWPDlg() 関数はこのダイアログのインスタンスへのポインタを返します。このクラスはコンストラクタがprivateにされていて、friend関数でしか実体化出来ない仕掛けになっています。派生されることは想定していないので、デストラクタをvirtualにしていません。
CTGRWindowPlacementDlg クラスが、ウィンドウの本体です。が、ここには中身の実装に使われるWPDImplクラスのprivateなポインタがあるだけで、後は、デストラクタと、ダイアログの表示制御のためのShowDialog()とToggleDialog()が公開されているだけという至ってシンプルなものです。
(続く)