非表示になってる別のダイアログを表示するには? – プログラミング – Home

非表示になってる別のダイアログを表示す...
 
通知
すべてクリア

[解決済] 非表示になってる別のダイアログを表示するには?


かな
 かな
(@かな)
ゲスト
結合: 24年前
投稿: 15
Topic starter  

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

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

dlg.ShowWindow(SW_SHOW);

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

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

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


引用未解決
トピックタグ
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

Bunといいます。

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


返信引用
かな
 かな
(@かな)
ゲスト
結合: 24年前
投稿: 15
Topic starter  

Bunさん、お返事ありがとうございます。

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

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

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

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

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

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

よろしくお願いします。


返信引用
かな
 かな
(@かな)
ゲスト
結合: 24年前
投稿: 15
Topic starter  

Bunさん、お返事ありがとうございます。

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

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

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

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

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

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

よろしくお願いします。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

Bunです。

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

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


返信引用
かな
 かな
(@かな)
ゲスト
結合: 24年前
投稿: 15
Topic starter  

Bunさん、またのお返事、ホントにありがとうございます。
とてもうれしく思います。

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

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

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

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


返信引用
かな
 かな
(@かな)
ゲスト
結合: 24年前
投稿: 15
Topic starter  

Bunさん、こんにちは。かなです。

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

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

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

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


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

かなさんこんにちは、Bunです。

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

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

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

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました