非表示になってる別のダイアログを表示するには?

[戻る]
かな 2001/04/11(水) 20:12:42
非表示になっているダイアログを、
別のダイアログに配置されてるボタンのクリックイベントで、
表示にしたいいのですが、以下のようにボタンクリックイベントに
記述しても、うまくいきません(エラーが出ます)。

CDLG dlg;  //CDLGはダイアログのクラス名です。

dlg.ShowWindow(SW_SHOW);

それで、ShowWindowを使わず、MoveWindow(0,0,0,0,TRUE)で、
大きさを0にしても、だめでした。

ちなみに、両ダイアログは、モーダルで
呼び出しています。

何か、解決策がありましたら、
よろしくお願いします。

Bun 2001/04/12(木) 09:06:43
Bunといいます。

モーダルですと、非表示ではなくウィンドウを
開いていないのではないでしょうか?

かな 2001/04/12(木) 10:16:14
Bunさん、お返事ありがとうございます。

>モーダルですと、非表示ではなくウィンドウを
>開いていないのではないでしょうか?

すみません、言う足りない所がありました。

実は、ダイアログ1・2共に、
「非表示にする前のダイアログの内容を記憶したい」
のです。例えば、両ダイアログにエディットボックスを配置した場合、
その内容を非表示にした後、表示したときも、内容が残ってる、
って言う感じです。

両ボタンイベントで、DoModal関数でもう一方のダイアログを表示し、
EndDialogで現在のダイアログを消した場合、
再表示された(というより、新しく表示された)ダイアログには、
エディットボックスの値が初期化されてしまいます。

そこで、exe起動時、両ダイアログをモーダルで呼び出し、
片方を非表示にして、あとはShowWindowで表示・非表示のみを
行う、という処理にしたくて…。

もし、何かお気づきになられましたら、
お返事いただけないでしょうか。

よろしくお願いします。

かな 2001/04/12(木) 10:47:11
Bunさん、お返事ありがとうございます。

>モーダルですと、非表示ではなくウィンドウを
>開いていないのではないでしょうか?

すみません、言う足りない所がありました。

実は、ダイアログ1・2共に、
「非表示にする前のダイアログの内容を記憶したい」
のです。例えば、両ダイアログにエディットボックスを配置した場合、
その内容を非表示にした後、表示したときも、内容が残ってる、
って言う感じです。

両ボタンイベントで、DoModal関数でもう一方のダイアログを表示し、
EndDialogで現在のダイアログを消した場合、
再表示された(というより、新しく表示された)ダイアログには、
エディットボックスの値が初期化されてしまいます。

そこで、exe起動時、両ダイアログをモーダルで呼び出し、
片方を非表示にして、あとはShowWindowで表示・非表示のみを
行う、という処理にしたくて…。

もし、何かお気づきになられましたら、
お返事いただけないでしょうか。

よろしくお願いします。

Bun 2001/04/12(木) 11:04:53
Bunです。

>再表示された(というより、新しく表示された)ダイアログには、
>エディットボックスの値が初期化されてしまいます。

例えばViewクラスからDoModalを呼んでいると仮定します。
エディットボックスには変数を割り当てておき
ダイアログからIDOKで戻った時に、この変数を
Viewクラスの変数に保存します。
そして、次のDoModalが呼ばれたらViewの変数を
エディットボックスの変数に代入します。
この代入はそのダイアログのInitDialog()内で行えば良いと思います。
いかがでしょうか?

かな 2001/04/12(木) 11:14:28
Bunさん、またのお返事、ホントにありがとうございます。
とてもうれしく思います。

EndDialogで消えていく前の状態を、変数に一時的に退避させ、
再び呼ばれたときに、起動イベント(OnInitDialog)でそれを格納すれば、
たしかにできそうですね。

これからその方法でやってみたいと思います。

うまくできましたら、ご報告させていただきます。

Bunさん、ありがとうございます。
これからもよろしくお願いします。

かな 2001/04/12(木) 12:18:59
[[解決]]
Bunさん、こんにちは。かなです。

先ほど教えていただいたやり方を
試してみた所、うまく画面情報を残したまま、
表示・非表示ができるようになりました。

ホントにありがとうございます。
ダイアログをモーダルで呼び出した場合、
その後に書いた処理は、呼び出したモーダルダイアログが
消された後に回されてしまうんですね。
結局、EndDialogで終了させないと、
別のダイアログの表示・非表示もできないのかなー。

モーダルって、呼び出しやすい分、
操作が難しいなー…。


Bunさん、ありがとうございました。

Bun 2001/04/12(木) 13:11:57
かなさんこんにちは、Bunです。

>ダイアログをモーダルで呼び出した場合、
>その後に書いた処理は、呼び出したモーダルダイアログが
>消された後に回されてしまうんですね。

「ダイアログ関数から戻ってからでないと次の処理に進めない」
ということですね。

>モーダルって、呼び出しやすい分、
>操作が難しいなー…。

「開いて、戻ってきてから次の処理にすすむ」という処理が
決まっている分、モードレスよりは考えやすいのでは?

>Bunさん、ありがとうございました。

どういたしまして。
私はVC歴○ヶ月の初心者です。お互いにがんばりましょう。

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