CEで全画面表示(2)

PDAで全画面表示ができるようになったのは良いとして、業務アプリケーションでは複数の画面を遷移する作りが必要になります。
ここで各画面をトップレベルのウインドウとして作成すると、画面表示を切り替えるために最大化処理が走ったり、ちらつきが発生したりします(´・ω・`)


そこで、トップレベルのウインドウを1つだけにして、そのチャイルドウインドウとして業務の各画面を作成するようにします。
ようはウィザード画面みたいなものですね。


画面遷移の処理としては、チャイルドウインドウの切り替えを行うControllerクラスを用意しています。
アプリケーション起動時に画面IDと実装クラスを登録して、各画面からControllerに対して遷移要求を行います。
#画面IDと実装クラスは多対1でもOK


Controllerは画面遷移要求に対して、以下の処理を行います。

  • 遷移先画面のインスタンスの作成
  • 遷移先画面の表示前イベント
  • 遷移先画面の表示
  • 遷移先画面の表示後イベント
  • 遷移元画面のクローズイベント
  • 遷移元画面のクローズ
  • 遷移元画面のインスタンスの破棄

上記の仕組みを実現するために、チャイルドウインドウはベースクラス(CDialog派生)を用意しています。


さて、このControllerもベースクラスも画面遷移フレームワークとして用意しているわけですが、フレームワーク内のControllerが各画面実装クラスのインスタンス管理を行うため、ちょっとした仕掛けが必要になります。


.NETやJavaの様にリフレクションがあれば型情報からインスタンスの生成ができるわけですが。
C++ではコレが出来ないため、Factoryを使用することになります。


っというか、C++フレームワークを作ろうと思ったらFactoryは必須ですよね(・∀・)