SSブログ

モーダルダイアログをモードレスにする方法

モーダルダイアログとは、ダイアログを表示したら、それを閉じるまで他の操作ができなくなるダイアログのことです。

一方、ダイアログを表示したままでも、他の操作ができるのがモードレスダイアログです。

MFCを使ったプログラムの場合、モーダルダイアログとして表示しているのに、モードレスっぽく動作してしまう方法が存在します。

非常にバグっぽいのですが。

その方法は……

  1. ある画面(画面A)からモーダルダイアログ(ダイアログB)を表示する。
  2. ダイアログBからモードレスダイアログ(ダイアログC)を表示する。
    この時、CDialog::Create()の第2引数(pParentWnd:親画面)は指定しない(デフォルト引数でNULLになる)。
  3. ダイアログCを閉じる。

すると、モーダルダイアログBが表示中なのに、画面Aの操作が出来てしまいます。


Visual C++ 6 と Visual C++ .NET 2003 と Visual C++ 2008 で確認しました。

MFCを使わずに同じ様なことを実装しても、この挙動は起こらないので、MFCだけの特徴だと思います。

[飛行機] 今日の一冊
千里眼

千里眼

  • 作者: 松岡 圭祐
  • 出版社/メーカー: 小学館
  • 発売日: 1999/05
  • メディア: 単行本

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。