DoModal 函數的用法

使用有模式對話框時在對話框彈出後調用函數不會當即返回,而是等到對話框銷燬後纔會返回(請注意在對話框彈出後其餘窗口的消息依然會被傳遞)。因此在使用對話框時其餘窗口都不能接收用戶輸入。建立有模式對話框的方法是調用CDialog::DoModal()。下面的代碼演示了這種用法:  函數

CYourView::OnOpenDlg() { CYourDlg dlg; int iRet=dlg.DoModal(); } 

CDialog::DoModal()的返回值爲IDOKIDCANCEL。代表操做者在對話框上選擇確認或是取消。因爲在對話框銷燬前DoModal不會返回,因此可使用局部變量來引用對象。在退出函數體後對象同時也會被銷燬。而對於無模式對話框則不能這樣使用,下節5.3 建立無模式對話框中會詳細講解。  spa


你須要根據DoModal()的返回值來決定你下一步的動做,而獲得返回值也是使用有模式對話框的一個很大緣由。 

使用有模式對話框須要注意一些問題,好比說不要在一些反覆出現的事件處理過程當中生成有模式對話框,好比說在定時器中產生有模式對話框,由於在上一個對話框還未退出時,定時器消息又會引發下一個對話框的彈出。 

一樣的在你的對話框類中爲了向調用者返回不一樣的值能夠調用CDialog::OnOK()或是CDialog::OnCancel()以返回IDOKIDCANCEL,若是你但願返回其餘的值,你須要調用  code

CDialog::EndDialog( int nResult );

其中nResult會做爲DoModal()調用的返回值對象

virtual INT_PTR CDialog::DoModal();

dlg.DoModal()後,顯示一個模態對話框,此時DoModal()函數並不返回,直到用戶關閉此對話框時,DoModal才返回。若是用戶點擊了肯定按鈕,那麼DoModal()函數就返回IDOKIDOK是一個宏。blog

當你CMyDlg dlg;時,對話框並無顯示,只要構造了一個CMyDlg類型的對象而已,直到用戶調用DoModal(),對話框纔會顯示出來。事件

相關文章
相關標籤/搜索