2.MFC中如何添加子窗口

2.MFC中如何添加子窗口,第1张

在MFC中,有时候需要在同一个区域显示不同的内容,比如,点击某一个按钮,在一个特定的区域显示A,再次点击之后,在同样的区域显示B,这个时候,就需要构建子窗口来解决问题。首先,按照上一篇的方法新建两个窗口,此时需要注意的是,通过右键,选择属性,把窗口的style设置为child。然后,在父窗口上用PictureControl选择出一个区域,将来让子窗口显示在这个区域中。然后在父类的初始化函数中作如下的改动:BOOL CEnqiureNote_NewDlg::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是刚才的PictureControl的ID,m_Dialog 是一个CRect的变量,需要在头文件进行声明。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)return TRUE}这样就完成了MFC中添加子内容到某一个区域的功能。

子窗口分为模态和非模态的,简单来说就是子窗口被创建后主窗口还能不能点击 *** 作。

你要先添加一个窗口,然后双击为窗口新建一个窗口类,

我已经添加了一个窗口类Dialog1,然后再按钮的响应函数里面写下如下代码:

x是子窗口结束后的返回值

int

x

dlg1=new

Dialog1

x=dlg1->DoModal()//这是一个模态对话框

非模态的可以这样写:

//Dialog1

dlg

//

dlg.Create(IDD_DIALOG1,this)

//

dlg.ShowWindow(SW_SHOW)

这里以一个实例来演示:

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),然后d出的对话框中对新增的类进行设置。

其中,在基类(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_InfoC_NewDlg2 m_NewDlg_EnqiureCRect 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://outofmemory.cn/bake/11410986.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存