MFC如何在父窗口的指定位置创建子窗口,及border边框属性设置

在 VS2012的MFC工程中,如何在父窗口的指定位置创建子窗口?

这里以一个实例来演示:

1、我们新建一个基于对话框的项目,项目名字为test。

2、在资源视图中添加两个对话框IDD_ENQIURENOTE_NEWDLG_INFO、IDD_ENQIURENOTE_NEWDLG_ENQIURE,并设计好对话框的界面。

在资源视图的子窗口通过右键,选择属性,把子窗口的style设置为child。

而picture控件的border属性默认是典型的对话框形式,如果想搞嵌入式的,可以改为none,即没有边框;或者改为thin则是细边框.

3、在父窗口上用工具箱的PictureControl选择出一个区域,将来让子窗口显示在这个区域中,并将该控件命名为IDC_STATIC_ChildArea。

4、在资源视图中找到两个子窗口的对话框上,分别右键,选择添加类(Add Class),然后弹出的对话框中对新增的类进行设置。

其中,在基类(Base Class)需要选择CDialogEx(老版本的VC是CDialog),然后输入新增类的名称(例如输入C_NewDlg1、C_NewDlg2),点击确认即可新增类。

这样,这个新建的类不仅有对应的头文件还有.cpp文件,还有一个与这个类对应的UI界面。

5、把需要将新增的类对应的头文件#include "C_NewDlg1.h"、 #include "C_NewDlg2.h"包含到它对应的父类的头文件(如testDlg.h )中。

同时在protected域中声明一个这个类的对象,比如:

C_NewDlg1 m_NewDlg_Info;
C_NewDlg2 m_NewDlg_Enqiure;
CRect m_DialogChild;

6、 在父类的初始化函数 OnInitDialog() 中作如下的改动:

     BOOL CtestDlg::OnInitDialog()
    {
     CDialog::OnInitDialog();

    //下面的m_NewDlg_Info和m_NewDlg_Enqiure是将要显示在同一个区域的不同的类,其中默认显示第一个。
     m_NewDlg_Info.Create(IDD_ENQIURENOTE_NEWDLG_INFO,this);  

     m_NewDlg_Enqiure.Create(IDD_ENQIURENOTE_NEWDLG_ENQIURE,this);

//读取嵌入位置,IDC_STATIC_ChildArea。

     GetDlgItem(IDC_STATIC_ChildArea)->GetWindowRect(&m_DialogChild);
     ScreenToClient(m_DialogChild);

    //以下的功能是显示m_NewDlg_Info的内容。为了显示m_NewDlg_Enqiure,可以在相应的处理函数中放入代码,并隐藏m_NewDialog_Info即可。
     m_NewDlg_Info.MoveWindow(m_DialogChild);
     m_NewDlg_Info.ShowWindow(SW_SHOW);
     GetDlgItem(IDC_STATIC_ChildArea)->ShowWindow(false);

     return TRUE;
    }


这样就完成了MFC中添加子内容到某一个区域的功能。


参考资料:

http://www.cnblogs.com/zhaoxiaoming/archive/2011/10/10/MFC_NewDialog.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值