モードレスダイアログを出したままモーダルダイアログを表示 – 固定ページ 2 – プログラミング – Home

モードレスダイアログを出したままモーダ...
 
通知
すべてクリア

[解決済] モードレスダイアログを出したままモーダルダイアログを表示

固定ページ 2 / 2

PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

> つまり、子ダイアログがモードレスで作成された場合でも、そのままだと、
> 自分が親を操作不可にセットしたわけでもないのに、
> ダイアログ終了時には親ウィンドウを操作可能にしてしまうということなのですね?

そうなります。
ですから、DoModalとEndDialog、CreateとDestroyWindowは常にセットで使用するように
プログラミングする側で意識して使い分けないと駄目です。
モードレスダイアログを作成する場合、Createの部分の作りこみとともに
DestroyWindowを行う側の作り込みが必要になります。
この場合、間違ってもEndDialogを呼ぶルートが残らないようにする必要があります。
モードレスダイアログの場合、EnterキーとESCキーは無効になるよう細工します。

私は常に親ウインドウ側で子ウインドウの寿命を管理したいので
モードレスウインドウ側にはウインドウを破棄するコードを入れずに
モードレスウインドウは親ウインドウに自ウインドウを閉じてほしい旨の
ユーザー定義のウインドウメッセージをポストし、親ウインドウ側で
DestroyWindowするようにしています。
この辺をテーブル管理で管理するように実装しておいて
全てのモードレスダイアログの寿命を親ウインドウで一括管理するようにしています。
こうしておくとモードレスウインドウ間の連携をユーザー定義ウインドウメッセージで
行う事が出来るようになります。全てのモードレスウインドウは親ウインドウに
連携用のメッセージを投げ、親ウインドウがメッセージの内容に従って
他のモードレスウインドウにディスパッチします。


返信引用
Peng
 Peng
(@Peng)
ゲスト
結合: 19年前
投稿: 17
Topic starter  

モードレスで作成された子ダイアログの中で
GetParent()->EnableWindow(FALSE);
と明示的にコールしたみたところ、親ダイアログは操作不可になりますが、
そのモードレスダイアログを閉じたら、親は勝手に操作可能に戻りました。

これでなんとなく原理が理解できました。
デフォルト動作だと、モーダルだろうがモードレスだろうが、
子が閉じられたら親は勝手に操作可能にされてしまうのですね。
ダイアログベースの中でモードレスダイアログを扱うときには
気をつけて扱おうと思います。

ありがとうございました。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

解決済みになっているますが、
デフォルト動作がモーダル用になっているからと言うのが
正しい理解だと思います。
CDialogクラスがモーダル利用をメインにデザインされていると言う事ではないかと思い
ます。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

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