前提・実現したいこと
C++(MFC)の質問です。
モーダレスダイアログで当該ダイアログ以外を操作不可にする、擬似モーダルという手法があったと思うのですが、やり方を忘れてしまいました。
モーダルダイアログ起動中、親ウインドウからダイアログを閉じる操作をするのが目的です。
よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー
MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。
Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。
Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。
C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。
MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。
Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。
Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。
C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。
0グッド
0クリップ
投稿2019/04/25 07:22
C++(MFC)の質問です。
モーダレスダイアログで当該ダイアログ以外を操作不可にする、擬似モーダルという手法があったと思うのですが、やり方を忘れてしまいました。
モーダルダイアログ起動中、親ウインドウからダイアログを閉じる操作をするのが目的です。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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総合スコア3041
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
総合スコア11
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/04 14:39