程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 創建有模式對話框

創建有模式對話框

編輯:關於C語言

 

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

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

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

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

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

同樣的在你的對話框類中為了向調用者返回不同的值可以調用CDialog::OnOK()或是CDialog::OnCancel()以返回IDOK或IDCANCEL,如果你希望返回其他的值,你需要調用
CDialog::EndDialog( int nResult );其中nResult會作為DoModal()調用的返回值。

下面的代碼演示了如何使用自己的函數來退出對話框:

void CMy52_s1View::OnLButtonDown(UINT nFlags, CPoint point) 
{//創建對話框並得到返回值
         CView::OnLButtonDown(nFlags, point);
         CTestDlg dlg;
         int iRet=dlg.DoModal();
         CString szOut;
         szOut.Format("return value %d",iRet);
         AfxMessageBox(szOut);
}
//重載OnOK,OnCancel
void CTestDlg::OnOK()
{//什麼也不做
}
void CTestDlg::OnCancel()
{//什麼也不做
}
//在對話框中對三個按鈕消息進行映射
void CTestDlg::OnExit1() 
{

							
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved