MFC模態與非模態對話框的創建與銷燬

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值爲空,否則下次便無法創建

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章