ダイヤログについては、クラスライブラリ化すべきか?という問題も有った。何故かと言えば、ダイヤログについては、生成までの流れが比較的簡単である事と、実際は,リソース・スクリプトにて、設計の70〜80%が完了してしまう事である。従って、クラスライブラリ化は無し!めでたしめでたし…と行きたいところだったのだが、実際にプログラムをしてみると、やっぱりCoolFrameWndExを作成した時と同様に、面倒なダイヤログプロシージャを何とかしたい…となってしまうのだ。
尚、これらのクラスは、COOLDLG.H,COOLDLG.CPPに登録されている。
- ダイヤログ・プロシージャ
ダイヤログも、開くだけならクラス化に支障は無いのである。問題になってくるのは、ダイヤログプロシージャだ。多分、Windowプロシージャと同じ様に、単純にクラスのメンバにしても駄目だろうな〜と思っていたら案の定,エラーになった。
で、色々探してみると、DialogBoxParam(モードレスの場合は、CreateDialogParam)という関数では、ダイヤログを作成した時に発生する、WM_INITALIZEメッセージのlParamをセット出来る事が分かったので、早速使ってみる事に…これさえ出来れば、ダイヤログでも1個のプロシージャを共有して、そこから各クラスのプロシージャを呼び出す事が出来るのだ…でもまてよ??ウインドウの時は、WNDCLASS(EX)をセットする時に、その後もウィンドウ本体に自分のクラスを持ち回らせる様な空き部分を確保出来たけど、ダイヤログってどうすれば??ってゆーか無理??…終わったな…(勝手に終わらすな!)という訳で、少々力技ではあるが、このWM_INITALIZE時に、少々細工を施す事にした。別途静的に宣言したクラスに、ダイヤログのハンドルとクラス自身を、64個まで登録出来る様にしておき、WM_INITALIZEで受け取ったlParam=>クラス自身と、ここで取得出来るウインドウハンドルを登録する事にした。これをすると、何が出来るかというと、次にダイヤログにメッセージが上がった時、このクラスにハンドルを渡す事で、そのハンドルと共に保存されているクラス自身を聞き出す事が出来る訳だ。
- モードレスダイヤログ
当初,クラスはモーダルダイヤログを基本に考えていたのだが、どうやらモードレスダイヤログも同じクラスで行けそうだったので、やってしまった。いままで、あまり使った事がないので、仮実装の状態であるが、サンプルでは何とか動作しているので、問題無いと思う。
- リンクについて
サンプルを見ていただけば分かる通り,クラス自体がWindowナンバを使用した初期化インタフェースを装備しているので、コンパイル時のリンクは、COOLBSC.objをリンクさせるのが正式であるが、このインタフェースを使用しない場合は、単独でリンクさせてもエラーにはならない。(何故でしょ?)
- サンプル
サンプル06のソースコード
|