对话框中做几个子对话框方法学习20150708

原创 2015年07月08日 12:22:44

记录一下今天解决的问题:

对话框中有几个子对话框,按不同的按钮对话框中显示相应子对话框中的内容。具体如图,


具体方法如下:

1、创建主对话框,再创建4个非模态对话框,程序运行的时候,只显示实验界面对话框,其他三个隐藏。通过主对话框左侧按钮可切换选择某个子对话框,另外三个对话框隐藏。

2、主对话框中添加静态文本框控件,文本框ID为:IDC_ST_MC,拖大文本框,之后的几个子对话框都会显示在这个文本框区域内。

3、子对话框的设置:(1)外观中的boarder设置为none(对话框无标题),(2)style设置为child

4、利用主对话框对应的CPP文件,R2R实验平台Dlg.cpp中——CR2R实验平台Dlg::OnInitDialog函数,在函数里面添加DlgCreate()和DlgShow()函数,实现主对话框初始化时
对其他子对话框的显示和切换。具体过程如下:

BOOL CR2R实验平台Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();


// 将“关于...”菜单项添加到系统菜单中。


// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);


CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}


// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE);// 设置大图标
SetIcon(m_hIcon, FALSE);// 设置小图标


// TODO: 在此添加额外的初始化代码
DlgCreate();
DlgShow(m_pDlgExperiment);



return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}


void CR2R实验平台Dlg::DlgCreate()
{
m_pDlgExperiment = new CDlgExperiment(this);
ASSERT(m_pDlgExperiment);
m_pDlgExperiment->Create(IDD_DLG_EXPERIMENT,GetDlgItem(IDC_ST_MC));


m_pDlgManual = new CDlgManual(this);
ASSERT(m_pDlgManual);
m_pDlgManual->Create(IDD_DLG_MANUAL,GetDlgItem(IDC_ST_MC));


m_pDlgPara = new CDlgPara(this);
ASSERT(m_pDlgPara);
//m_pDlgPara->Create(IDD_DLG_PARA,GetDlgItem(IDC_ST_MC));
m_pDlgPara->Create(IDD_DLG_PARA,GetDlgItem(IDC_ST_MC));


m_pDlgDisplay = new CDlgDisplay(this);
ASSERT(m_pDlgDisplay);
m_pDlgDisplay->Create(IDD_DLG_DISPLAY,GetDlgItem(IDC_ST_MC));


}

void CR2R实验平台Dlg::DlgShow(void *ptr)
{
bool bShowDlgExperiment=FALSE,bShowDlgManual= FALSE,bShowDlgPara = FALSE,bShowDlgDisplay = FALSE ;
if(ptr == (void*)m_pDlgExperiment)
{
bShowDlgExperiment= TRUE;
}
else if(ptr == (void*)m_pDlgManual)
{
bShowDlgManual=TRUE;
}
else if(ptr == (void*)m_pDlgPara)
{
bShowDlgPara = TRUE;
}
else if(ptr == (void*)m_pDlgDisplay)
{
bShowDlgDisplay = TRUE;
}
else
{
AfxMessageBox("display work dialog error");
}
m_pDlgExperiment->ShowWindow(bShowDlgExperiment) ;
m_pDlgManual->ShowWindow(bShowDlgManual) ;
m_pDlgPara->ShowWindow(bShowDlgPara) ;
m_pDlgDisplay->ShowWindow(bShowDlgDisplay) ;
//ShowMainBtn(bShowDlgProcess, bShowDlgPara, bShowDlgRecord);
}

5、以上4步即可实现窗口的创建和显示,至于切换,则靠主对话框按钮响应函数实现,以其中一个为例子:

void CR2R实验平台Dlg::OnBnClickedChkPara()
{
// TODO: 在此添加控件通知处理程序代码
bool bShowDlgExperiment=FALSE,bShowDlgManual= FALSE,bShowDlgPara = TRUE,bShowDlgDisplay= FALSE;
m_pDlgExperiment->ShowWindow(bShowDlgExperiment) ;
m_pDlgManual->ShowWindow(bShowDlgManual) ;
m_pDlgPara->ShowWindow(bShowDlgPara) ;
m_pDlgDisplay->ShowWindow(bShowDlgDisplay) ;
}


MFC在主对话框中显示子对话框

第一步:新建MFC对话框工程,并在对话框中添加一个PicCtrol控件,type设为Frame,为其添加控件变量m_Frame: 第二步:添加对话框资源,Border设为None,Stype设为...
  • fuck51cto
  • fuck51cto
  • 2015年11月07日 22:33
  • 1293

子对话框如何访问主对话框中的控件

在使用mfc的时候经常遇到自定义类访问主对话框控件的问题,例如自定义类中的方法要输出一段字符串到主对话框的EDIT控件、控制对话框的进度条等。    要在自定义的类中访问主对话框空间,须获得主对...
  • u010258235
  • u010258235
  • 2013年08月16日 17:52
  • 996

MFC不同对话框之间的数据传递

在编程时常常需要添加辅助对话框,在这个辅助的对话框中设置某些属性值然后传给主程序。这类对话框或称为选项对话框,允许用户通过设置一些选项来改变软件的的某些行为或特性。例如: 1.向扫雷游戏中自定义界面中...
  • shufac
  • shufac
  • 2014年03月14日 21:06
  • 2153

怎样在MFC的两个对话框中相互传递数据

前提:在一个基于单文档的应用程序中,新建了两个对话框A和B,并且用两个独立的类和他们关联。         A中有一个编辑框(关联变量为:m_strA),一个按钮a;         B中有一个编...
  • wf6892
  • wf6892
  • 2016年09月06日 17:26
  • 2102

MFC创建一个子对话框

这个不能说是原创,是借鉴别人的方法,然后我写得具体一点。供我们这些菜鸟学习交流。 首先傻瓜式新建一个MFC对话框项目,里面会有一个主对话框。然后在resourceView里面的任意节点上右键,点击...
  • milk448249712
  • milk448249712
  • 2015年11月12日 19:22
  • 988

MFC 子对话框之间互相发送消息的方案

最近做项目,遇到了在多对话框情况之下,子对话框之间能够互相发送消息的情况。 由于SendMessage()函数第一个参数是目的地的句柄,所以只要能在子对话框1中得到子对话框2的句柄即可。 网上有资料说...
  • gaodr1989
  • gaodr1989
  • 2015年06月24日 10:15
  • 1496

先弹出对话框,然后跳转页面

string userID = this.USER_ID.Text;  Page.RegisterStartupScript("a", "alert('员工:" + userID + "恢复成功...
  • lglgsy456
  • lglgsy456
  • 2012年06月05日 00:40
  • 1732

(VS2013)MFC对话框中用多个按钮创建多个子对话框实现选项卡效果

首先创建一个MFC的对话框工程,并拉几个按钮(本文中假设3个,Button1,Button2,Button3)放在对话框上,注意留出一定的空间给子对话框。往工程里添加3个类(CChildDlg1,CC...
  • xuanzhangyang
  • xuanzhangyang
  • 2015年05月01日 10:37
  • 2982

VS2012下进行QT creator登录对话框设计

最近看《Qt教程及软件》学习QT,这本书的编程是在Qt creator上进行的,本人更倾向于在VS2012上进行开发,故根据自己实验中的经验,笔记一下在VS2012进行Qt编程的一些问题及解决方法,本...
  • C_address
  • C_address
  • 2016年01月22日 10:34
  • 1246

两个子对话框传递参数

问题描述     基于MFC对话框的应用程序中一共有三个对话框,第一个对话框为主对话框,所对应的类为CTMDDDlg类。在主对话框上我放置了一个标签页(Tab Control)控件,其实现的功能...
  • a3125504x
  • a3125504x
  • 2015年10月30日 13:59
  • 231
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对话框中做几个子对话框方法学习20150708
举报原因:
原因补充:

(最多只允许输入30个字)