2段階ダイアログの作成
1、メインダイアログをクリックしたときにメインダイアログボックスを非表示にし、非モードダイアログを生成します.
ここで、ModallessDlgは非モードダイアログのクラスインスタンスであり、メインダイアログのヘッダファイルに定義されます.
2、非モードダイアログをクリックした時に、SendMessageを呼び出してメインダイアログにメッセージを送り、同時に非モードダイアログを破棄する.メインダイアログボックスでこのメッセージを受信すると、自身(メインダイアログボックス)が表示されます.
3、非モードダイアログのPostNcDestroy関数を再ロードし、この関数内で非モードダイアログのオブジェクトを削除します(delete this).
そのうちWM_MS_MESSAGEはユーザーのためにメッセージをカスタマイズし、以下のように追加します.
1、staafx.hにメッセージ定義を追加する:
2、CFRrstDlg.hヘッダファイルにメッセージ処理関数定義を追加する:
3、CFRrstDlg.cppインプリメンテーションファイルにメッセージマッピングを追加するには:
4、CFRrstDlg.cppインプリメンテーションファイルにメッセージ処理関数を追加するには:
void CFirstDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
this ->ShowWindow(SW_HIDE); //
ModallessDlg = new CModallessDlg(); //
ModallessDlg ->Create(IDD_DIALOG1,this);
ModallessDlg ->ShowWindow(SW_SHOW); //
}
ここで、ModallessDlgは非モードダイアログのクラスインスタンスであり、メインダイアログのヘッダファイルに定義されます.
class CFirstDlg: public CDialog
{ ·····
CModallessDlg * ModallessDlg ;
······
};
2、非モードダイアログをクリックした時に、SendMessageを呼び出してメインダイアログにメッセージを送り、同時に非モードダイアログを破棄する.メインダイアログボックスでこのメッセージを受信すると、自身(メインダイアログボックス)が表示されます.
void CSecondDlg ::OnBnClickedButton2()
{
// TODO: Add your control notification handler code here
GetParent()->SendMessage(WM_MS_MESSAGE,0,0); // , ( )
DestroyWindow(); //
}
3、非モードダイアログのPostNcDestroy関数を再ロードし、この関数内で非モードダイアログのオブジェクトを削除します(delete this).
void CModallessDlg ::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
CDialog::PostNcDestroy();
delete this;// new
}
そのうちWM_MS_MESSAGEはユーザーのためにメッセージをカスタマイズし、以下のように追加します.
1、staafx.hにメッセージ定義を追加する:
#define WM_MS_MESSAGE WM_USER+100
2、CFRrstDlg.hヘッダファイルにメッセージ処理関数定義を追加する:
afx_msg LRESULT OnMsMessage(WPARAM wParam, LPARAM lParam);
3、CFRrstDlg.cppインプリメンテーションファイルにメッセージマッピングを追加するには:
BEGIN_MESSAGE_MAP(CFirstDlg, CDialog)
ON_MESSAGE(WM_MS_MESSAGE, &CFirstDlg::OnMsMessage)
END_MESSAGE_MAP()
4、CFRrstDlg.cppインプリメンテーションファイルにメッセージ処理関数を追加するには:
LRESULT CFirstDlg::OnMsMessage(WPARAM wParam, LPARAM lParam)
{
this->ShowWindow(SW_SHOW); // , ( )
return 0;
}