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非空,則只需將窗口置頂無需也不能新創建。
* 向模態對話框中添加父窗口的句柄,主要用於模態對話框向其父窗口發送消息用,此功能可以根據自己需要進行取捨
2、模態對話框的銷燬
(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值爲空,否則下次便無法創建