1、模态对话框的创建
(1)添加新的模块对话框资源,在ResourceView标签中右键项目选择“add resource...”,添加一个对话框资源,并修改其ID(主要为了方便后续操作),例如修改为
IDD_DLG_TEST1。
(2)为该新添加的窗口创建新类
CDlgTest1
(3)创建模态对话框:
*
定义一个
CDlgTest1类的指针
m_pDlgTest1.
*
为类
m_pDlgTest1添加一个父窗口句柄的成员变量
m_hMainWnd,主要用于向父窗口发送消息,此功能可根据需要进行取舍。
*
添加创建模块对话框:
if (NULL == m_pDlgQuiverTest)
{
m_pDlgTest1= new CDlgTest1();
m_pDlgTest1->SetMainWnd(this->m_hWnd);
m_pDlgTest1->DoModal();
}
else
m_pDlgTest1->SetForegroundWindow();
说明:
*
如果指针
m_pDlgTest1非空,则只需将窗口置顶无需也不能新创建。
*
向模态对话框中添加父窗口的句柄,主要用于模态对话框向其父窗口发送消息用,此功能可以根据自己需要进行取舍
(1)在退出时向父窗口发送窗口退出消息:
::PostMessage(m_hMainWnd,WM_DESTROY_GET_QUIVER_STANDERED,0,0);
(2)为父窗口添加消息WM_DESTROY_DLGTEST1和其相应函数,
声明函数:
afx_msg LRESULT _OnDestroyDlgTest1(WPARAM wParam,LPARAM lParam);
消息响应宏:
ON_MESSAGE(WM_DESTROY_DLGTEST1,_OnDestroyDlgTest1)
(3)在消息响应函数_OnDestroyDlgTest1中销毁创建的模态窗口:
LRESULT CParentDlg::_OnDestroyDlgTest1(WPARAM wParam,LPARAM lParam)
{
if (NULL != m_pDlgTest1)
{
delete m_pDlgTest1;
m_pDlgTest1= NULL;
}
return 0;
}
3、非模态对话框的创建
非模态对话的创建与模态对话框类似,区别之处在于需要调用Create函数创建窗口,并调用showwindow而不是domodal函数显示窗口
具体如下,区别之处已用红色标出:
if (NULL == m_pDlgGetQS)
{
m_pDlgGetQS = new CGetQuiverStandered();
m_pDlgGetQS->Create(IDD_DLG_GET_QUIVER_STANDERED,this);
m_pDlgGetQS->SetMainWnd(this->m_hWnd);
m_pDlgGetQS->ShowWindow(SW_SHOW);
}
else
m_pDlgGetQS->SetForegroundWindow();
4、非模态对话框的销毁
非模态对话框的销毁与模态对话框的销毁一样,起始销毁的过程可以按照上述模态对话的销毁方法,也可以根据自己的需要进行其他方式的销毁,但是一定要在销毁之后将指针
m_pDlgTest1值为空,否则下次便无法创建