⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 teach_road_59.htm

📁 闻怡洋VC基础教程 里面是一些VC的基础知识
💻 HTM
字号:

<!-- LANGUAGE='JavaScript'>write_body();<-->
<!-- LANGUAGE='JavaScript'>write_bar();<-->


<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="#8E8E8E" valign=middle><img src=../../img/brand_200_60.gif width=200 height=60 alt="LOGO1"></td>
	<td width="70%" align="center" bgcolor="#8E8E8E" valign=middle><!-- LANGUAGE='JavaScript'>write_ban();<--></td>
</tr>
<tr>
	<td colspan="2" bgcolor="#939393" 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>5.9 使用对话框作为子窗口</font><!-- LANGUAGE='JavaScript'>write_command();<--></td>
</tr>
</table><!--标记放置区域 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>使用对话框作为子窗口是一种很常用的技术,这样可以使界面设计简化而且修改起来更加容易。
</p>
<p>简单的说这种技术的关键就在于创建一个无模式的对话框,并在编辑对话框资源时指明Child风格和无边框风格,<a href=59_g1.gif target=_blank>如图</a>。接下来利用产生一个CDialog的派生类,并进行相关的消息映射。在创建子窗口时需要利用下面的代码:
<pre>
int CMy59_s1View::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	//创建子窗口
	m_dlgChild.Create(IDD_CHILD_DLG,this);	
	//重新定位
	m_dlgChild.MoveWindow(0,0,400,200);
	//显示窗口
	m_dlgChild.ShowWindow(SW_SHOW);
	return 0;
}
</pre>
此外还有一中类似的技术是利用CFormView派生类作为子窗口,在编辑对话框资源时也需要指明Child风格和无边框风格。然后利用ClassWizard产生以CFormView为基类的派生类,但是由于该类的成员函数都是受保护的,所以需要对产生的头文件进行如下修改:
<pre>
class CTestForm : public CFormView
{
//将构造函数和构析函数改为共有函数
public:
	CTestForm();
	virtual ~CTestForm();
	DECLARE_DYNCREATE(CTestForm)
...
}
</pre>
有关创建子窗口的代码如下:
<pre>
int CMy59_s1View::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	//对于CFormView派生类必须新生成对象而不能使用成员对象
	m_pformChild = new CTestForm;
	//由于CFormView的成员受保护,所以必须对指针进行强制转换
	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子窗口都可以通过资源编辑器预先编辑好,<a href=59_s1.zip>下载代码</a>。
</p>
<p><b>提示</b>:对于CFormView派生类必须新生成对象而不能使用成员对象,因为在CView的OnDestroy()中会有如下代码:delete this;所以使用成员对象的结果会造成对象的二次删除而引发异常。
</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-->





<!-- LANGUAGE='JavaScript'>write_tail();<-->


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -