?? teach_road_52.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="聞怡洋 wyy_cq@21cn.com">
<title>Visual C++/MFC開發指南</title>
<SCRIPT LANGUAGE='JavaScript' SRC='../../submit_navigate_bar.js'></SCRIPT>
<link REL="stylesheet" HREF="../../main.css">
</head>
<SCRIPT LANGUAGE='JavaScript'>write_body();</SCRIPT>
<SCRIPT LANGUAGE='JavaScript'>write_bar();</SCRIPT>
<p align="center"><a
HREF="http://www.0828.com/pay/cgi-bin/random.cgi?job=go&id=820"
target="_blank">
<img SRC="http://www.0828.com/pay/cgi-bin/random.cgi?id=820" BORDER="0"
width="468" height="60"></a><br>
<font size="2"><a href="http://www.0828.com/pay/index.html"><img border="0"
src="http://www.0828.com/pay/code.gif" width="468" height="15"></a><br>
<small>你每點一下上面的廣告我就能有更多的上網時間為大家尋找資料</small></font>
</p>
<table width=98% cellspacing="0" cellpadding="0" align=center><!--整體框架-->
<tr><td>
<table border=0 width="100%" cellspacing="0" cellpadding="2"><!--標記放置區域-->
<tr>
<td width="30%" align="center" bgcolor="#003D84" valign=middle><img src=../../img/brand_200_60.gif width=200 height=60 alt="LOGO1"></td>
<td width="70%" align="center" bgcolor="#003D84" valign=middle><img src=../../img/logo_400_60.gif width=400 height=60 alt="LOGO2"></td>
</tr>
<tr>
<td colspan="2" bgcolor="#0080C0" align=center><font color=white>您當前位置</font></font> <a href=../../index.htm><font color=white>首頁</font></a> <a href=../index.htm><font color=white>開發教程</font></a> <a href=index.htm><font color=white><font class=engul>Visual C++/MFC</font>入門教程</font></a> <font color=white><font color=white>5.2 創建有模式對話框</font><SCRIPT LANGUAGE='JavaScript'>write_command();</SCRIPT></td>
</tr>
</table><!--標記放置區域 END-->
<table border=0 width=100% cellspacing="0" cellpadding="0">
<tr>
<td><!--begin-->
<br>
<p align=center><big>5.2 創建有模式對話框</big></p>
<table border=0 align=center width=100%>
<tr><td>
<small>
<p>使用有模式對話框時在對話框彈出后調用函數不會立即返回,而是等到對話框銷毀后才會返回(請注意在對話框彈出后其他窗口的消息依然會被傳遞)。所以在使用對話框時其他窗口都不能接收用戶輸入。創建有模式對話框的方法是調用CDialog::DoModal()。下面的代碼演示了這種用法:
<pre>
CYourView::OnOpenDlg()
{
CYourDlg dlg;
int iRet=dlg.DoModal();
}
</pre>
CDialog::DoModal()的返回值為IDOK,IDCANCEL。表明操作者在對話框上選擇“確認”或是“取消”。由于在對話框銷毀前DoModal不會返回,所以可以使用局部變量來引用對象。在退出函數體后對象同時也會被銷毀。而對于無模式對話框則不能這樣使用,下節<a href=teach_road_53.htm>5.3 創建無模式對話框</a>中會詳細講解。
</p>
<p>你需要根據DoModal()的返回值來決定你下一步的動作,而得到返回值也是使用有模式對話框的一個很大原因。</p>
<p>使用有模式對話框需要注意一些問題,比如說不要在一些反復出現的事件處理過程中生成有模式對話框,比如說在定時器中產生有模式對話框,因為在上一個對話框還未退出時,定時器消息又會引起下一個對話框的彈出。</p>
<p>同樣的在你的對話框類中為了向調用者返回不同的值可以調用CDialog::OnOK()或是CDialog::OnCancel()以返回IDOK或IDCANCEL,如果你希望返回其他的值,你需要調用
<br>CDialog::EndDialog( int nResult );其中nResult會作為DoModal()調用的返回值。</p>
<p>下面的代碼演示了如何使用自己的函數來退出對話框:<a href=52_s1.zip>下載例子</a>
<pre>
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()
{
CDialog::OnOK();
}
void CTestDlg::OnExit2()
{
CDialog::OnCancel();
}
void CTestDlg::OnExit3()
{
CDialog::EndDialog(0XFF);
}
</pre>
由于重載了OnOK和OnCancel所以在對話框中按下Enter鍵或Escape鍵時都不會退出,只有按下三個按鈕中的其中一個才會返回。</p>
<p>此外在對話框被生成是會自動調用BOOL CDialog::OnInitDialog(),你如果需要在對話框顯示前對其中的控件進行初始化,你需要重載這個函數,并在其中填入相關的初始化代碼。利用ClassWizard可以方便的產生一些默認代碼,首先打開ClassWizard,選擇相應的對話框類,在右邊的消息列表中選擇WM_INITDIALOG并雙擊,<a href=52_g1.gif target=_blank>如圖</a>,ClassWizard會自動產生相關代碼,代碼如下:
<pre>
BOOL CTestDlg::OnInitDialog()
{
/*先調用父類的同名函數*/
CDialog::OnInitDialog();
/*填寫你的初始化代碼*/
return TRUE;
}
</pre>
有關對對話框中控件進行初始化會在<a href=teach_road_54.htm>5.4 在對話框中進行消息映射</a>中進行更詳細的講解。
</p>
</small>
</td>
</tr>
<tr><td>
<small>
<p align=center><a href=index.htm#charpter5>返回</a></p>
</small>
</td></tr>
</table>
<p align=center><small>版權所有 聞怡洋 <a href=http://www.vchelp.net/>http://www.vchelp.net/</a></small></p>
</td><!--end-->
</tr>
</table>
</td></tr></table><!--整體框架 END-->
<SCRIPT LANGUAGE='JavaScript'>write_tail();</SCRIPT>
</body></html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -