質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

7118閲覧

擬似モーダルダイアログの作り方

Kumotori

総合スコア11

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/04/25 07:22

前提・実現したいこと

C++(MFC)の質問です。

モーダレスダイアログで当該ダイアログ以外を操作不可にする、擬似モーダルという手法があったと思うのですが、やり方を忘れてしまいました。
モーダルダイアログ起動中、親ウインドウからダイアログを閉じる操作をするのが目的です。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

昔やったことがあったのですが、そのときのコードを見つけられないので、記憶を頼りに書きます。
確認していないので細部で間違っているかもしれませんが、大まかな方向性は合っていると思います。
質問者さんのやりたいこととずれていたらすみません。

1)モードレスダイアログを作成する際に、親ウィンドウのポインタを渡しておく

C++

1 CDialog dlg; 2 dlg.Create(IDD_XXXDLG,this);

2)モードレスダイアログ側で、親ウィンドウをDisableにする

C++

1 this->GetParent()->EnableWindow(FALSE);

これで親のウィンドウは操作できなくなるはずです。
モードレスダイアログを終了させる際、親ウィンドウをEnableにすることを忘れるとどうしようもなくなるので注意が必要です。他にもモーダルっぽく動かすにはいろいろ設定してやらないといけないものがあったと思いますが(OnCancelにダイアログを破棄するコードを追加するなど)、必要に応じて追加してください。

以上、ご参考まで。

投稿2019/04/30 05:26

編集2019/04/30 05:28
KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kumotori

2019/05/04 14:39

返信遅くなってすみません。 GW休み中で環境が無く検証できていませんが、確かにそうすれば実現できそうです。 助かりました。ありがとうございました!
guest

0

親を無効化するだけだとダイアログも無効になってしまったので、その後にダイアログを有効化することでうまくいきました。

C++

1BOOL CXXDlg::Create(UINT nIDTemplate, CWnd* pParentWnd) 2{ 3 BOOL bSuccess = CDialogEx::Create(nIDTemplate, pParentWnd); 4 5 // 親を無効化し、ダイアログのみ操作可能にしておく。 6 GetParent()->EnableWindow(FALSE); 7 this->EnableWindow(TRUE); 8 9 return bSuccess; 10} 11

投稿2019/05/10 06:34

Kumotori

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問