掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ダイアログを表示させるには? (ID:52620)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ダイアログからダイアログを起動できますか。 たとえば、 CXXXDlg::OnOK() { CYYYDlg dlg; dlg.DoModal(); } どのようにしてダイアログを起動しますか? 1. Console アプリから --> 一般にやめたほうがよいと思います。 2. MDI/SDI アプリから 3. その他のプロジェクトから --> 初心者はやめましょう。 ということで、 2-1. MDI/SDIのメニューから起動する方法 (0) メニューリソースにダイアログ起動メニューを追加 (仮:IDM_POPUPDLG) (1) ワークスペースのリソースの Dialog にダイアログを作る。 (2) ダイアログエディタのときに CTRL-W を押す (3) クラスウィザードが起動、CDialog 派生クラスを作る。 (4) ダイアログを起動したいクラスに #include "XXXDlg.h" を追加。 (5) (たとえば)CMainFrm でクラスウィザードを起動。 (6) IDM_POPUPDLG のコマンドハンドラを追加。 CMainFrm::OnPopupDlg() { CYYYDlg dlg; dlg.DoModal(); } てなところですな。 モードレスダイアログ(ダイアログがアプリを占有しない)がいいというなら、 CMainFrm にメンバ変数 CXXXDlg * m_pXXXDlg; を追加。 CMainFrm::OnPopupDlg() { m_pXXXDlg = new CXXXDlg; // コンストラクタに引数があったかも。 m_pXXXDlg->Create(); // Create() に引数があったかも。 m_pXXXDlg->ShowWindow(SW_SHOW); // これがないと表示されません。 } それからモードレスダイアログで大事なことは。 ワークスペースのCXXXDlgクラスを右クリック、[仮想関数の追加] で、PostNCDestroy() を追加。 void CXXXDlg::PostNcDestroy() { CDialog::PostNcDestroy(); delete this; // <--- これを追加。(自動クリナップ処理) } これでウィンドウが不要になった(破棄された)とき、new されたメモリが解放されます。 なお、何度も表示したり消したりするなら、 DeleteWindow() するよりも ShowWindow( SW_HIDE/SW_SHOW ) したほうがよいですよ。 2-2. フレームウィンドウとともに起動する場合 CMainFrm::Create() にモードレスダイアログの生成を行えばよい。 フレームウィンドウの消滅とともに自動的に消滅する(上記PostNCDestroy())。 2-3.フレームウィンドウの生成前に1度だけ使う場合。 CXXXApp::InitInstance() で dlg.DoModal() すればよい。 こんなところかな。 ≫VC++ に付属のサンプル scribble を一通り読みましょう。 そのとおりですね。 ヘルプ:目次: MSDNライブラリVisual Studio6.0 L VisualC++ドキュメント L VisualC++ユーザーズガイド L VisualC++ チュートリアル L Scribble: MDI描画アプリケーション L ダイアログボックスの追加 以上。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.