对话框中做几个子对话框方法学习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) ;
}


Android学习笔记二十八之AlertDialog提示对话框和几个常用的提示框

Android学习笔记二十八之AlertDialog提示对话框和几个常用的提示框

拼接时几个对话框窗口共享串口

  • 2014年06月03日 11:54
  • 1.72MB
  • 下载

【实战】android中几个常用的对话框

几个常用对话框实现的源码: activity_main.xml

[QT]QFileDialog关于选择文件对话框中的几个信号的说明

QFileDialog关于选择文件对话框中的几个信号 实例: openFile::openFile(QWidget *parent) : QWidget(parent), ui(new Ui::op...

MFC中改变对话框背景的几个消息函数OnEraseBkgnd、 OnPaint、 OnCtlColor的调用顺序

设置对话框背景颜色及背景图片可在OnCtlColor(),OnEraseBkgnd(),OnPaint()里设置,对话框初始化完毕,显示时调用OnSize()->OnEraseBkgnd(),->On...

MFC 改变对话框的几个消息函数OnEraseBkgnd、 OnPaint、 OnCtlColor的调用次序

设置对话框色彩及背景图片可在OnCtlColor(),OnEraseBkgnd(),OnPaint()里设置, 对话框初始化完毕,显示时调用OnSize()->OnEraseBkgnd(),->On...
  • whh_tg
  • whh_tg
  • 2013年01月05日 13:58
  • 1369

JavaScript 几个常用的弹出对话框提示案例

在Asp.net 2.0 开发过程中,常会需要用到弹出对话框提示,我做了简单的封装,使用方便,贴出来。 public class Jscript { privat...

C#菜单、通用对话框和方法

  • 2012年04月27日 08:46
  • 2.72MB
  • 下载

SAP 中的popup dialog (弹出对话框) 常见实现方法

方法1: FM:POPUP_TO_CONFIRM(标准对话弹出消息) 有三个按钮:YES-NO-CANL,可进行相应的逻辑判断 可设定标题,描述问题,不方便对文本进行换行等排版,不能改变弹出框大...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对话框中做几个子对话框方法学习20150708
举报原因:
原因补充:

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