中华网通行证
用户名 密码
  科技动态 硬件广场 下载基地 网络教室 网络冲浪 科学博览 移动时代 手机上网 桌面壁纸 科技商情  

5.9 使用对话框作为子窗口

使用对话框作为子窗口是一种很常用的技术,这样可以使界面设计简化而且修改起来更加容易。

简单的说这种技术的关键就在于创建一个无模式的对话框,并在编辑对话框资源时指明Child风格和无边框风格,如图。接下来利用产生一个CDialog的派生类,并进行相关的消息映射。在创建子窗口时需要利用下面的代码:

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;
}
此外还有一中类似的技术是利用CFormView派生类作为子窗口,在编辑对话框资源时也需要指明Child风格和无边框风格。然后利用ClassWizard产生以CFormView为基类的派生类,但是由于该类的成员函数都是受保护的,所以需要对产生的头文件进行如下修改:
class CTestForm : public CFormView
{
//将构造函数和构析函数改为共有函数
public:
	CTestForm();
	virtual ~CTestForm();
	DECLARE_DYNCREATE(CTestForm)
...
}
有关创建子窗口的代码如下:
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;
}
最后你会看到如图的窗口界面,上方的对话框子窗口和下方的FormView子窗口都可以通过资源编辑器预先编辑好,下载代码

提示:对于CFormView派生类必须新生成对象而不能使用成员对象,因为在CView的OnDestroy()中会有如下代码:delete this;所以使用成员对象的结果会造成对象的二次删除而引发异常。

 

  《Visual C++开发指南》 闻怡洋/文

 


  
相关报道




本站检索



中华网推荐

·国家级治脑病新药思维源
·中藏药治疗脑病新突破
·治类风湿,强直性脊柱炎
·养肾·痛风·长寿
·肝病泌尿脑萎缩新药介绍
·强直性脊柱炎康复乐园
·让中医辩证不孕不育
·国医治股骨头坏死一绝
·乙肝为何久治不愈?
·二千元垄断批发做老板
·中医中药专治前列腺
·治牛皮癣白癜风已成现实
·专治痛风病的白衣天使
·不孕不育的杏林奇葩
·专卖店零售管理系统





   

网络教室编辑信箱