# 質問ばかりで申し訳ないです。
クラスウィザード - 変数の追加で、ダイアログアイテムに
コントロール(CListCtrl等の派生クラス)を割り当てたとします。
この派生したクラスで、OnCreate (WM_CREATE) を定義しても
この関数はコールされませんでした。
私としては、コントロール(ウィンドウ)が作成されたときに、
いろいろと初期化処理を行い、破棄されたときに
終了処理をしたいのですが、そのタイミングがわかりません。
(破棄されるときは、WM_DESTROYが発生するのでOK!)
で、今は別に初期化用のメンバ関数を用意して、親ダイアログの
OnInitDialog()で、その初期化関数を呼んでいます。
でも、これは美しくないような気がします。
もっとエレガントな実装方法をご存知でしたら、どうかご教授ください。
よろしくお願いします。
以上です。
コントロールの派生クラスに、PreSubclassWindow() をインプリ
メントすれば良いと思います。
Tetsuya Miyawaki wrote in message <719vsv$kah$5...@news.cc.rim.or.jp>...
>クラスウィザード - 変数の追加で、ダイアログアイテムに
>コントロール(CListCtrl等の派生クラス)を割り当てたとします。
>
>この派生したクラスで、OnCreate (WM_CREATE) を定義しても
>この関数はコールされませんでした。
コントロールの派生クラスは、コントロールをサブクラス化して
メッセージが自分に送られてくるようにしているのだと思います。
で、構築の順序からいくと、ダイアログが作成され、コントロー
ルが作成され、コントロールをサブクラス化してコントロールの派
生クラスに割り当てるので、WM_CREATE がこないのだと思います。
>で、今は別に初期化用のメンバ関数を用意して、親ダイアログの
>OnInitDialog()で、その初期化関数を呼んでいます。
>でも、これは美しくないような気がします。
OnInitialDialog() は、ダイアログボックスが表示される直前に
呼び出されるので、DoModal() を連続で呼び出した場合等、その都
度呼ばれるようです。なので、コントロールの初期化などをする場
合には注意が必要だと思います。
答えになっていないかもしれません。また、間違っているかもし
れません。間違いがありましたらどなたかフォローよろしくお願い
します。
=== 7M3MCZ 木屋 善夫 6mSSB 430SSB ki...@asahi.email.ne.jp ===
Yoshio Kiya wrote in message <71b4r5$117$2...@father.asahi-net.or.jp>...
> コントロールの派生クラスに、PreSubclassWindow() をインプリ
>メントすれば良いと思います。
ありがとうございました。
サブクラス化されるタイミングでも仕様的に問題ないので、
PreSubclassWindow() と OnDestroy() でウィンドウの初期化及び後処理
を実装することにしました。
> コントロールの派生クラスは、コントロールをサブクラス化して
>メッセージが自分に送られてくるようにしているのだと思います。
> (途中省略)
>生クラスに割り当てるので、WM_CREATE がこないのだと思います。
確かにそうですね。ウィンドウが作成されていなければ、サブクラスうんぬん
以前の問題ですからね・・・お恥ずかしい・・・
> OnInitialDialog() は、ダイアログボックスが表示される直前に
>呼び出されるので、DoModal() を連続で呼び出した場合等、その都
>度呼ばれるようです。なので、コントロールの初期化などをする場
>合には注意が必要だと思います。
この点については、ダイアログが作られる度に初期化ルーチンが
走ってもらわないと困るのでOKです。
(当然クラス全般の初期化はコンストラクタで実装しています。)
# あっ、初期化って言葉がまずかったのかな・・・
# 本当は、ウィンドウのリサイズ処理とかです。(^^;;;
以上 本当にありがとうございました。