点击这里给我发消息 点击这里给我发消息

VC++ 使用对话框作为子窗口

添加时间:2013-12-7
    相关阅读: 设计 技术 C++ VC
 

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

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

图1

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;
}

最后你会看到如图2的窗口界面,上方的对话框子窗口和下方的FormView子窗口都可以通过资源编辑器预先编辑好.

图2

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

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册