モードレスダイアログの破棄の仕方

[戻る]
こうじ 2002/02/19(火) 00:43:18
モードレスダイアログ関係で2つ質問あります.ご助言ください.

1)現在,モードレスダイアログを使う練習をしています.ダイアログボックス上に
 コマンドボタンを置かずに,右上に"閉じるボタン(X)"がある状態です.
 "閉じるボタン"を押したらダイアログが消えるのはいいのですが,DestroyWindow
  とかの記述はしていません.
  DestroyWindowを書いたほうがメモリ管理上は良いのでしょうか?

2)ある命令に関連付けてモードレスダイアログを破棄したいのですが,どうしたらよ
 いでしょうか?

  class C*** : public CDlgのポインタpを取得して,
  p->DestroyWindow();
   としてみたのですが,
 『値が割り当てられていないローカルな変数 'p' に対して参照が行われました。』
 という警告が出てしまう状況です.

未熟なもので用語に間違い等ありましたらすいませんが,よろしくお願いします.
動作環境:VC6.0,Windows Meです.

以上.

kazuma 2002/02/19(火) 02:06:54
1) デフォルトで DestroyWindow が呼ばれます。
2) ポインタはどのように取得されましたか?
   単にポインタの変数を宣言しただけではないですか?

こうじ 2002/02/19(火) 20:25:34
kazumaさん,
1)の回答ありがとうございました.
2)についてですが,
Class C??? :public CDlg
のポインタを
C??? *p;
として取得しました.それから,
p->DestroyWindow();
と記述しました.初心者なものでポインタの変数の意味が
わかりませんでした.問題点これでわかりますでしょうか?

それから,真夜中にご返答ありがとうございます.
申し訳ないことに私は熟睡中でした.

以上.

Bun 2002/02/19(火) 20:45:06
MSDNに modeless といううってつけのサンプルがあります。

これを動作させて、ソースを眺めてみれば、モードレスダイアログについて

いろいろと理解できると思います。

>C??? *p;
>として取得しました.それから,
>p->DestroyWindow();
>と記述しました.初心者なものでポインタの変数の意味が
>わかりませんでした.問題点これでわかりますでしょうか?

p = new ChogeDlg; などとして実体のアドレスを渡します。

インスタンス(実体)を指していないポインタを使ってはいけません。

こうじ 2002/02/21(木) 00:22:29
kazumaさん,Bunさん,レスありがとうございました.

しかしながら,作成したダイアログのインスタンスの
とり方がわかりません.全く先に進まなくなりました
ので,今回の問題解決は後回しにして気長に勉強しよ
うかと思います.

こうじ 2002/02/23(土) 20:09:10
[[解決]]
ダイアログ作成時にダイアログのポインタを
public変数として取得してやることで,ダイアロ
グにさわらずにdestroywindowできました.

皆様お世話になりました.

古いスレッドには追加発言できません。