DoModal 函數的用法


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

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

CDialog::DoModal()的返回值為IDOKIDCANCEL。表明操作者在對話框上選擇確認或是取消。由於在對話框銷毀前DoModal不會返回,所以可以使用局部變量來引用對象。在退出函數體后對象同時也會被銷毀。而對於無模式對話框則不能這樣使用,下節5.3 創建無模式對話框中會詳細講解。  


你需要根據DoModal()的返回值來決定你下一步的動作,而得到返回值也是使用有模式對話框的一個很大原因。 

使用有模式對話框需要注意一些問題,比如說不要在一些反復出現的事件處理過程中生成有模式對話框,比如說在定時器中產生有模式對話框,因為在上一個對話框還未退出時,定時器消息又會引起下一個對話框的彈出。 

同樣的在你的對話框類中為了向調用者返回不同的值可以調用CDialog::OnOK()或是CDialog::OnCancel()以返回IDOKIDCANCEL,如果你希望返回其他的值,你需要調用  

CDialog::EndDialog( int nResult );

其中nResult會作為DoModal()調用的返回值

virtual INT_PTR CDialog::DoModal();

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM