mfc多对话框切换

vera_7 2014-05-14 10:39:17
用mfc实现多对话框切换,比如按一个button实现从对话框A到B的切换。
不用SW_HIDE隐藏窗体,能不能用propertySheet,让一个窗体中包含多个对话框来实现?
propertySheet上面的标签怎能不能隐藏?我不想用选项卡切换,而是用按钮。
除此之外还有没有其它的方法?
求助啊~~~~~~谢了!
...全文
989 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
youyicc 2016-12-02
  • 打赏
  • 举报
回复
就是啊,怎么解决的,公司做的一个东西也有这样的问题,请问如何解决的啊??
xiaoxiaokun888 2015-07-09
  • 打赏
  • 举报
回复
怎么解决滴,最后说下呀
vera_7 2014-05-18
  • 打赏
  • 举报
回复
谢谢大家的回答,我的问题解决啦!
vera_7 2014-05-18
  • 打赏
  • 举报
回复
引用 2 楼 dingxz105090 的回复:
从propertySheet派生一个类,比如CPropertySheetCtrlEx,然后在BOOL CPropertySheetCtrlEx::OnInitDialog()中

BOOL CPropertySheetCtrlEx::OnInitDialog()
{
	CPropertySheet::OnInitDialog();
	//隐藏属性页原来的TabControl
	CTabCtrl *pTab = GetTabControl();
	pTab->ModifyStyle(TCS_MULTILINE, TCS_SINGLELINE, SWP_FRAMECHANGED|SWP_DRAWFRAME);
	pTab->ShowWindow(SW_HIDE);

	//再创建那些你用来切换页面的按钮
	//再调整按钮和PropertySheet的位置
}


//按下切换页面的按钮时的关键代码
KillActiveCurrentPage();
SetActivePage(m_nSelectedItem);//设置活动页
谢谢啦!
vera_7 2014-05-15
  • 打赏
  • 举报
回复
引用 8 楼 Squall001 的回复:
[quote=引用 3 楼 wenmd0703 的回复:] [quote=引用 1 楼 Squall001 的回复:] 1,新建对话框类ADlg,类BDlg,并且把属性设置为Child, border属性设置为None 2,把ADlg类,BDlg类的生命周期设置为主对话框成员函数,或者静态,或者全局,反正不要弄成局部变量就行
什么叫“把ADlg类,BDlg类的生命周期设置为主对话框成员函数,或者静态,或者全局,反正不要弄成局部变量就行“? 我尝试过用隐藏的方法,就是把ADlg,BDlg都设为child显示在猪对话框里,在主对话框里有A,B的两个成员变量,不过因为按钮是在A和B对话框里,不是在主对话框里,对按钮添加事件然后就不知道怎么操作了,求指点啊~~~O__O~~[/quote] 这个简单啊 你把两个对话框的指针传给两个对话框即可啊 或者把两个对话框的指针保存在主对话框里 在响应按钮函数的时候,去调用两个指针即可 楼主我之前和你遇到过同样的问题, 我就是这样解决的 你可以看看这个帖子 是我提出之前提出的问题http://bbs.csdn.net/topics/390740047[/quote] 恩恩你的意思我懂了,问题现在解决了,我用了getparent获取父窗口指针然后弹出另一个子窗口,谢谢指点啦~~
vera_7 2014-05-15
  • 打赏
  • 举报
回复
引用 4 楼 VisualEleven 的回复:
可以用CTabCtrl+CDialog来做~
tabctrl上面的标签注释就是那个凸出的东西怎么取消?
Eleven 2014-05-15
  • 打赏
  • 举报
回复
可以用CTabCtrl+CDialog来做~
vera_7 2014-05-15
  • 打赏
  • 举报
回复
引用 1 楼 Squall001 的回复:
1,新建对话框类ADlg,类BDlg,并且把属性设置为Child, border属性设置为None 2,把ADlg类,BDlg类的生命周期设置为主对话框成员函数,或者静态,或者全局,反正不要弄成局部变量就行
什么叫“把ADlg类,BDlg类的生命周期设置为主对话框成员函数,或者静态,或者全局,反正不要弄成局部变量就行“? 我尝试过用隐藏的方法,就是把ADlg,BDlg都设为child显示在猪对话框里,在主对话框里有A,B的两个成员变量,不过因为按钮是在A和B对话框里,不是在主对话框里,对按钮添加事件然后就不知道怎么操作了,求指点啊~~~O__O~~
king1076 2014-05-15
  • 打赏
  • 举报
回复
哪种方法简单 就用哪种
凌乱哥 2014-05-15
  • 打赏
  • 举报
回复
从propertySheet派生一个类,比如CPropertySheetCtrlEx,然后在BOOL CPropertySheetCtrlEx::OnInitDialog()中

BOOL CPropertySheetCtrlEx::OnInitDialog()
{
	CPropertySheet::OnInitDialog();
	//隐藏属性页原来的TabControl
	CTabCtrl *pTab = GetTabControl();
	pTab->ModifyStyle(TCS_MULTILINE, TCS_SINGLELINE, SWP_FRAMECHANGED|SWP_DRAWFRAME);
	pTab->ShowWindow(SW_HIDE);

	//再创建那些你用来切换页面的按钮
	//再调整按钮和PropertySheet的位置
}


//按下切换页面的按钮时的关键代码
KillActiveCurrentPage();
SetActivePage(m_nSelectedItem);//设置活动页
Squall001 2014-05-15
  • 打赏
  • 举报
回复
1,新建对话框类ADlg,类BDlg,并且把属性设置为Child, border属性设置为None 2,把ADlg类,BDlg类的生命周期设置为主对话框成员函数,或者静态,或者全局,反正不要弄成局部变量就行 3,你可以在主对话框里面设置一个组合框 ID=IDC_Groupbox,为了的把它设置为新建对话框ADlg,BDlg的父窗口,新建对话框就在组合框上面了 4,在主窗口启动或者其他位置添加以下代码建立子对话框: ADlg.Create(IDD_ADlg,GetDlgItem(IDC_Groupbox)); ADlg.ShowWindow(SW_HIDE); BDlg.Create(IDD_BDlg,GetDlgItem(IDC_Groupbox)); BDlg.ShowWindow(SW_HIDE); 这样就建立上了, 然后你直接用ShowWindow去控制两个对话框的显示和隐藏即可,比如 在botton1里面做 ADlg.ShowWindow(SW_SHOW); BDlg.ShowWindow(SW_HIDE); 在botton2里面做 ADlg.ShowWindow(SW_HIDE); BDlg.ShowWindow(SW_SHOW); 这样就实现了啊 要在一个botton里面做 你在外面设置个标记,函数里面做判断也可以啊,这样A,B两个窗体就是显示在主窗口上的,而非domodle那种单独一个对话框出来。 用SW_SHOW是最好的解决办法,方便的你不用 ,干嘛用其他麻烦的,你反正都是显示,隐藏,
  • 打赏
  • 举报
回复
1、定义一个CMyPropertySheet 继承自CPropertySheet 2、CPage1 CPage2 继承自CPropertyPage是对话框A和B CMyPropertySheet sheet; CPage1 page1; CPage2 page2; sheet.SetWizardMode(); sheet.AddPage(&page1); sheet.AddPage(&page2); sheet.DoModal();
Squall001 2014-05-15
  • 打赏
  • 举报
回复
引用 3 楼 wenmd0703 的回复:
[quote=引用 1 楼 Squall001 的回复:] 1,新建对话框类ADlg,类BDlg,并且把属性设置为Child, border属性设置为None 2,把ADlg类,BDlg类的生命周期设置为主对话框成员函数,或者静态,或者全局,反正不要弄成局部变量就行
什么叫“把ADlg类,BDlg类的生命周期设置为主对话框成员函数,或者静态,或者全局,反正不要弄成局部变量就行“? 我尝试过用隐藏的方法,就是把ADlg,BDlg都设为child显示在猪对话框里,在主对话框里有A,B的两个成员变量,不过因为按钮是在A和B对话框里,不是在主对话框里,对按钮添加事件然后就不知道怎么操作了,求指点啊~~~O__O~~[/quote] 这个简单啊 你把两个对话框的指针传给两个对话框即可啊 或者把两个对话框的指针保存在主对话框里 在响应按钮函数的时候,去调用两个指针即可 楼主我之前和你遇到过同样的问题, 我就是这样解决的 你可以看看这个帖子 是我提出之前提出的问题http://bbs.csdn.net/topics/390740047
HUSTYZHY 2014-05-15
  • 打赏
  • 举报
回复
看一下孙鑫的《C++深入理解》,里面有详细的实例介绍
schlafenhamster 2014-05-15
  • 打赏
  • 举报
回复
参考 “MultiDialog.zip”0分 “基于多对话框的MFC工程.避免模态对话框中产生新的模态对话框.” http://download.csdn.net/detail/schlafenhamster/611573

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧