问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mfc怎么样可以使后打开的对话框对之前的对话框没有影响

发布网友 发布时间:2023-12-09 04:58

我来回答

2个回答

热心网友 时间:2024-12-03 08:05

你说的是非模式对话框吧具体实现步骤如下:

在资源IDE中新建一个对话框IDD_ModelssDlg,并设置为可见;
利用Wizard为这个对话框建立一个类CModelessDlg;
为CModelessDlg添加一个数据成员CDialog * m_pParent;
为CModelessDlg添加一个新的构造子CModelessDlg(CDialog * pParent),在其中将pParent赋值给m_pParent;

CModelessDlg::CModelessDlg(CDialog *pParent)
{
m_pParent = pParent;
}

为CModelessDlg添加一个成员函数Create(),在其中调用CDialog::Create(CModelessDlg::IDD);
BOOL CModelessDlg::Create()
{
return CDialog::Create(CModelessDlg::IDD);
}

重载OnOK()和OnCancel(),添加对DestroyWindow()的调用以销毁非模态对话框本身。
void CModelessDlg::OnOK()
{
UpdateData();
DestroyWindow();
}

void CModelessDlg::OnCancel()
{
UpdateData(FALSE);
DestroyWindow();
}

在CVCDlg中添加一个数据成员CModelessDlg * m_MDlg;
在CVCDlg的构造子中调用m_MDlg = new CModelessDlg(this)以构造非模态对话框对象;

CVCDlg::CVCDlg(CWnd* pParent) : CDialog(CVCDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_MDlg = new CModelessDlg(this);
}
在CVCDlg的析构子中调用delete m_MDlg以析构非模态对话框对象;

CVCDlg::~CVCDlg()
{
if (m_MDlg != NULL)
delete m_MDlg;
}

在应用程序对话框模板中增加一个按钮并映射其点击消息至OnOpenDlg(),并在OnOpenDlg()中调用m_MDlg->Create()来创建并显示非模态对话框,将m_MDlg与显示的非模态窗口绑定;

void CVCDlg::OnOpenDlg()
{
if (m_MDlg->GetSafeHwnd() == NULL)
m_MDlg->Create();
else
m_MDlg->SetWindowPos(&wndTopMost,300,400,NULL,NULL,SWP_NOSIZE);
}

在OnOK()中调用if (m_MDlg->GetSafeHwnd() != NULL) m_MDlg->OnOK()以实现可能已经打开的非模态对话框的数据交换。注意要进行这样的调用必须将CModelessDlg中OnOK()设置为public型,并且此时m_MDlg可能非NULL,但其可能已未与任何窗口绑定,故不能用m_MDlg != NULL来作为测试条件。在OnCancel()中同样处理。
void CVCDlg::OnOK()
{
//此时m_MDlg可能非NULL,但其可能已未与任何窗口绑定,故不能用m_MDlg != NULL来作为测试条件,下同
if (m_MDlg->GetSafeHwnd() != NULL)
m_MDlg->OnOK(); //要进行这样的调用必须将CModelessDlg中OnOK()设置为public型

CDialog::OnOK();
}

void CVCDlg::OnCancel()
{
if (m_MDlg->GetSafeHwnd() != NULL)
m_MDlg->OnCancel(); //要进行这样的调用必须将CModelessDlg中OnCancel()设置为public型

CDialog::OnCancel();
}

热心网友 时间:2024-12-03 08:06

不理解什么意思,是非模态对话框吗?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
提升学历选自考好还是成考好 成考和自考的文凭哪个好 2024年成人自考和成人高考哪个更好 家用净水器滤芯类型有哪些 家用净水器什么滤芯好 请问在VB中如何调用多线程? 交强险理赔后第二年上涨吗? 交强险出一次险第二年保费多出多少? 全家人都爱吃的家常菜目录 丽台Quadro P5000专业图形显卡-购买最佳价格 介绍糖雪球的口号,表达清晰简洁 钢铁是怎样炼成的人物性格分析(朱赫来,保尔,朱尼亚)9 北京站到2号线 转4号线地铁快还是1号线转4号线快 人到四十不惑之年是什么意思? 世界太大,生命太短。 参悟至理名言, 体现生命价值。 未知无... 新笑傲江湖小米版安卓游戏高速下载 冬季这些毁车又费钱的用车方法! 本子能和台式电脑一样玩网络游戏和下载吗 男:农历1990年5月29日下午5点多出生,帮忙说一下属什么...6 魔兽争霸3冰封王座玩不了,说什么找不到光盘?求办法!!我快哭了!!! 三级听力残疾人能申请低保吗18 新疆野生虾种类 虽然生命短暂,但是,我们却可以让有限的生命体现出无限的价值。...34 桔子树移栽几天能活 重看水浒,我突然有个问题:施恩与武松真的是利用与被利用的关系...1 平时喜欢连拍,不知道索尼RX100M5连拍效果怎么样,画质是否好?_百度... 施恩跟武松,是什么关系?40 水浒传 施恩和蒋门神的性格特点166 棉花买卖合同 给一个三个字的网名例如“花小宇”要以花字开头,好听的1 糖雪球的介绍,已经糖雪球英文怎么翻译?3 1996年阴历2月29日早上5点半出生人的命运 1996年农历四月廿五下午5点多出生人的命运1 北京地铁二号线转一号线 有没有制作出来的视频带有科幻点的软件? 逃不出的五指山的内容简介 如何一年内强制二次修改? 美孚ep机油可以跑到一万公里吗?119 美孚金装0W-20长效EP 适合用雪佛兰迈瑞宝吧 可以跑多少... 用美孚机油跑一万公里对发动机会有伤害吗?103 美孚EP 你们跑多少公里换机油2 美孚一号5w30保养周期能到一万公里吗?116 汽车一直跑,到底多少公里可以不换机油 has been dead和 has died的区别 怎样修改第二次 长相思31集腾讯可以看吗 别人注销了还能发出去消息吗? 一个号码注册了两个,怎么找回第一个? 种子农药化肥购销合同范本 要走绝不挽留用文言文怎么说