• ベストアンサー

モードレスダイアログをクリックして親を表示したくない

初めまして。 VC++ win32で開発をしていますが、 モードレスダイアログをCreateDialogで作成し、ShowWindow(TRUE)で表示後、 他のアプリケーションを別プロセスで使用しているときにTOPMOSTで表示している上記ダイアログをクリックすると、親のウィンドウが表示されてしまいます。 これを抑止することはできないのでしょうか。 C#.NETだとできるようなのですが。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

 こんばんは。  モードレスダイアログの親ウィンドウをNULLにするかGetDesktopWindow()にして見ては如何でしょう。  HWND hDlg = ::CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1), ::GetDesktopWindow(), &::DlgProc);  又は  HWND hDlg = ::CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, &::DlgProc);

blackcoata
質問者

お礼

machongolaさん、ご回答ありがとうございました。 教えていただいた方法で、CreateDialog時に親をNULLにする方法でうまくいきました。 すごく悩んでいたので大変助かりました。 どうもありがとうございました。

その他の回答 (1)

  • hiochi
  • ベストアンサー率50% (1/2)
回答No.1

>他のアプリケーションを別プロセスで使用しているときに >TOPMOSTで表示している上記ダイアログをクリックすると、 >親のウィンドウが表>示されてしまいます。 もう少し各文言に主語をつけて書いていただくと的確にアドバイスできると思いますが、とりあえず私の読み取った内容でお答えしますね。 モードレスダイアログは元々親ウインドウが前に出るため、支障がなければDialogboxでモーダルダイアログで作成すれば親ウインドウが前にでることはなくなるでしょう。 また、(たとえばタスクマネージャのように)常時最前面に出すためにのが目的でしたら、少し面倒な処理が必要になります。 その処理も状況によって方法が違いますので、もう少し詳細な内容がわかればアドバイスできるかもしれません。

blackcoata
質問者

補足

お返事ありがとうございます。 つたない質問で大変失礼いたしました。 やろうとしていたのは、 1.タスクマネージャーのような、常時TOPMOSTのモードレスダイアログを表示する。ダイアログはCreateDialog()で生成。ShowWindow(SH_SHOW)で表示。 2.他のアプリケーション(例えばExcel)を起動する。このときもダイアログは表示されている。 3.モードレスダイアログをクリックする。 4.ダイアログの親ウィンドウが表に出てきてしまう。 上記の4を抑止しようとしていました。 やっぱりダイアログでは無理なのでしょうか。

関連するQ&A