?? teach_road_59.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開發(fā)指南</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>你每點一下上面的廣告我就能有更多的上網(wǎng)時間為大家尋找資料</small></font>
</p>
<table width=98% cellspacing="0" cellpadding="0" align=center><!--整體框架-->
<tr><td>
<table border=0 width="100%" cellspacing="0" cellpadding="2"><!--標(biāo)記放置區(qū)域-->
<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>您當(dāng)前位置</font></font> <a href=../../index.htm><font color=white>首頁</font></a> <a href=../index.htm><font color=white>開發(fā)教程</font></a> <a href=index.htm><font color=white><font class=engul>Visual C++/MFC</font>入門教程</font></a> <font color=white>5.9 使用對話框作為子窗口</font><SCRIPT LANGUAGE='JavaScript'>write_command();</SCRIPT></td>
</tr>
</table><!--標(biāo)記放置區(qū)域 END-->
<table border=0 width=100% cellspacing="0" cellpadding="0">
<tr>
<td><!--begin-->
<br>
<p align=center><big>5.9 使用對話框作為子窗口</big></p>
<table border=0 align=center width=100%>
<tr><td>
<small>
<p>使用對話框作為子窗口是一種很常用的技術(shù),這樣可以使界面設(shè)計簡化而且修改起來更加容易。
</p>
<p>簡單的說這種技術(shù)的關(guān)鍵就在于創(chuàng)建一個無模式的對話框,并在編輯對話框資源時指明Child風(fēng)格和無邊框風(fēng)格,<a href=59_g1.gif target=_blank>如圖</a>。接下來利用產(chǎn)生一個CDialog的派生類,并進行相關(guān)的消息映射。在創(chuàng)建子窗口時需要利用下面的代碼:
<pre>
int CMy59_s1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
//創(chuàng)建子窗口
m_dlgChild.Create(IDD_CHILD_DLG,this);
//重新定位
m_dlgChild.MoveWindow(0,0,400,200);
//顯示窗口
m_dlgChild.ShowWindow(SW_SHOW);
return 0;
}
</pre>
此外還有一中類似的技術(shù)是利用CFormView派生類作為子窗口,在編輯對話框資源時也需要指明Child風(fēng)格和無邊框風(fēng)格。然后利用ClassWizard產(chǎn)生以CFormView為基類的派生類,但是由于該類的成員函數(shù)都是受保護的,所以需要對產(chǎn)生的頭文件進行如下修改:
<pre>
class CTestForm : public CFormView
{
//將構(gòu)造函數(shù)和構(gòu)析函數(shù)改為共有函數(shù)
public:
CTestForm();
virtual ~CTestForm();
DECLARE_DYNCREATE(CTestForm)
...
}
</pre>
有關(guān)創(chuàng)建子窗口的代碼如下:
<pre>
int CMy59_s1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
//對于CFormView派生類必須新生成對象而不能使用成員對象
m_pformChild = new CTestForm;
//由于CFormView的成員受保護,所以必須對指針進行強制轉(zhuǎn)換
CWnd* pWnd=m_pformChild;
pWnd->Create(NULL,NULL,WS_CHILD|WS_VISIBLE,CRect(0,210,400,400),this,1001,NULL);
return 0;
}
</pre>
最后你會看到<a href=59_g2.gif target=_blank>如圖</a>的窗口界面,上方的對話框子窗口和下方的FormView子窗口都可以通過資源編輯器預(yù)先編輯好,<a href=59_s1.zip>下載代碼</a>。
</p>
<p><b>提示</b>:對于CFormView派生類必須新生成對象而不能使用成員對象,因為在CView的OnDestroy()中會有如下代碼:delete this;所以使用成員對象的結(jié)果會造成對象的二次刪除而引發(fā)異常。
</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>版權(quán)所有 聞怡洋 <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>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -