MFC 怎么点击不同的按钮后在界面同一位置显示不同的对话框内容

jp417799578 2015-05-20 09:25:53


如图类似Tab控件的功能 但Tab控件按钮是固定的上下左右 不方便 所以想自己重新做个这种 我MFC新手,求指点,具体要怎么弄,如果可以,给我发个这种例子研究下更好了,好人一生平安,谢谢。
...全文
1920 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
YiRanMengJiangHu 2017-04-21
  • 打赏
  • 举报
回复
我试验程序运行到这块
	m_InnerDlg1.MoveWindow(&rect); // 移动到
	m_InnerDlg2.MoveWindow(&rect); // 移动到
出现了错误,说是winocc.cpp 307
yong1047bin 2016-05-02
  • 打赏
  • 举报
回复
楼主能教一下不,初学者 ,能帮代码革我发一下. 企鹅 1964956245@qq.com
jp417799578 2015-06-02
  • 打赏
  • 举报
回复
引用 12 楼 defrag257 的回复:
虽然楼主弄好了,但是我忘了说明一点,要在MyApp1Dlg.h最前面加上 #include <DIALOG1.h> #include <DIALOG2.h>
嗯 我加上了的 再次感谢
jp417799578 2015-05-21
  • 打赏
  • 举报
回复
引用 4 楼 defrag257 的回复:
然后就可以在各个对话框里控制子级对话框的显式了
也就是按钮的程序是错误的 应该添加什么程序
jp417799578 2015-05-21
  • 打赏
  • 举报
回复
CDIALOG1.Create(IDD_BUTTON1,this); // 创建非模态对话框,父级是自己 CDIALOG2.Create(IDD_BUTTON2,this); // 创建非模态对话框,父级是自己 IDD_BUTTON1 这里应该是对话框的ID 我弄错了 可是还是没有达到我想要的效果啊 按钮里我添加下面程序编译没问题 运行也没问题 一按按钮就报错 停止运行了 CDialog m_InnerDlg1; // 也可以新建一个类CMyDialog CDialog m_InnerDlg2; // 也可以新建一个类CMyDialog m_InnerDlg1.ShowWindow(SW_SHOW); // 显式对话框 m_InnerDlg2.ShowWindow(SW_HIDE); // 隐藏对话框
jp417799578 2015-05-21
  • 打赏
  • 举报
回复
引用 2 楼 defrag257 的回复:
新建一个Style为Child,Border为None的对话框,然后在父对话框那里添加一个PictureBox(IDC_PIC1)用于定位,Visible设为False //CDlgParent.h CDialog m_InnerDlg1; // 也可以新建一个类CMyDialog CDialog m_InnerDlg2; // 也可以新建一个类CMyDialog //CDlgParent.cpp——OnInitDialog() CRect rect; m_InnerDlg1.Create(IDD_INNER_1, this); // 创建非模态对话框,父级是自己 m_InnerDlg2.Create(IDD_INNER_2, this); // 创建非模态对话框,父级是自己 GetDlgItem(IDC_PIC1)-> GetWindowRect(&rect); // 准确定位 ScreenToClient(&rect); // 千万注意别用成ClientToScreen m_InnerDlg1.MoveWindow(rect); // 移动到 m_InnerDlg2.MoveWindow(rect); // 移动到 m_InnerDlg1.ShowWindow(SW_SHOW); // 显式对话框 m_InnerDlg1.ShowWindow(SW_HIDE); // 隐藏对话框
谢谢大哥 我是把两个自对话框建立的名为CDIALOG1和CDIALOG2的类,把他们的头文件也复制过来了,然后用你的代码 BOOL CLikeTabDlg::OnInitDialog() { CDialog::OnInitDialog(); CRect rect; CDIALOG1.Create(IDD_BUTTON1,this); // 创建非模态对话框,父级是自己 CDIALOG2.Create(IDD_BUTTON2,this); // 创建非模态对话框,父级是自己 GetDlgItem(IDC_STATIC)->GetWindowRect(&rect); // 准确定位 ScreenToClient(&rect); // 千万注意别用成ClientToScreen CDIALOG1.MoveWindow(&rect); // 移动到 CDIALOG2.MoveWindow(&rect); // 移动到 CDIALOG1.ShowWindow(SW_SHOW); // 显式对话框 CDIALOG2.ShowWindow(SW_HIDE); // 隐藏对话框 ... } 出现这个错误是怎么回事啊 likeTab\likeTabDlg.cpp(99) : error C2143: syntax error : missing ';' before '.'
defrag257 2015-05-21
  • 打赏
  • 举报
回复
虽然楼主弄好了,但是我忘了说明一点,要在MyApp1Dlg.h最前面加上 #include <DIALOG1.h> #include <DIALOG2.h>
jp417799578 2015-05-21
  • 打赏
  • 举报
回复
真的是十分感谢~ 我弄好了 学习了
defrag257 2015-05-21
  • 打赏
  • 举报
回复
【更正】 还有,PictureBox要改一下ID,改成IDC_PIC1,不能用IDC_STATIC,这是一个公用的无效ID。 然后这两个变量要在头文件(CMyApp1Dlg.h)里声明,不然生存期限制会导致内存崩溃: class CMyApp1Dlg : public CDialog { // 加入以下代码 public: CDIALOG1 m_InnerDialog1; // 声明子对话框 CDIALOG2 m_InnerDialog2; }; 然后在OnInitDialog里加入以下代码: CRect rect; m_InnerDialog1.Create(IDD_BUTTON1,this); // 创建非模态对话框,父级是自己 m_InnerDialog2.Create(IDD_BUTTON2,this); // 创建非模态对话框,父级是自己 GetDlgItem(IDC_PIC1)->GetWindowRect(&rect); // 准确定位 ScreenToClient(&rect); // 千万注意别用成ClientToScreen m_InnerDialog1.MoveWindow(rect); // 移动到 m_InnerDialog2.MoveWindow(rect); // 移动到 m_InnerDialog1.ShowWindow(SW_SHOW); // 显式子对话框 m_InnerDialog2.ShowWindow(SW_HIDE); // 隐藏子对话框 最后在各按钮里加入以下两句即可: m_InnerDialog1.ShowWindow(SW_HIDE); // 更改目前显式的子对话框 m_InnerDialog2.ShowWindow(SW_SHOW); -------------------------------------------------------------------------- 如果出现了错误:没有适合的默认构造函数,那么就打开CDIALOG1.cpp和CDIALOG2.CPP把那个构造函数的参数pParent后边添加默认值=NULL CDIALOG1::CDIALOG1(CDialog *pParent = NULL) : CDialog(CDIALOG1::IDD, pParent) { // ... } -------------------------------------------------------------------------- 你的问题是对C++的语法不太熟悉,建议楼主回去学习一下C++的语法。
defrag257 2015-05-21
  • 打赏
  • 举报
回复
还有,PictureBox要改一下ID,改成IDC_PIC1,不能用IDC_STATIC,这是一个公用的无效ID。 然后这两个变量要在头文件(CMyApp1Dlg.h)里声明,不然生存期限制会导致内存崩溃: class CMyApp1Dlg : public CDialog { // 加入以下代码 public: CDIALOG1 m_InnerDialog1; // 声明子对话框 CDIALOG2 m_InnerDialog2; }; 然后在OnInitDialog里加入以下代码: CRect rect; CDIALOG1.Create(IDD_BUTTON1,this); // 创建非模态对话框,父级是自己 CDIALOG2.Create(IDD_BUTTON2,this); // 创建非模态对话框,父级是自己 GetDlgItem(IDC_PIC1)->GetWindowRect(&rect); // 准确定位 ScreenToClient(&rect); // 千万注意别用成ClientToScreen CDIALOG1.MoveWindow(rect); // 移动到 CDIALOG2.MoveWindow(rect); // 移动到 CDIALOG1.ShowWindow(SW_SHOW); // 显式子对话框 CDIALOG2.ShowWindow(SW_HIDE); // 隐藏子对话框 最后在各按钮里加入以下两句即可: CDIALOG1.ShowWindow(SW_HIDE); // 更改目前显式的子对话框 CDIALOG2.ShowWindow(SW_SHOW); -------------------------------------------------------------------------- 如果出现了错误:没有适合的默认构造函数,那么就打开CDIALOG1.cpp和CDIALOG2.CPP把那个构造函数的参数pParent后边添加默认值=NULL CDIALOG1::CDIALOG1(CDialog *pParent = NULL) : CDialog(CDIALOG1::IDD, pParent) { // ... }
defrag257 2015-05-21
  • 打赏
  • 举报
回复
CDialog m_InnerDlg1; // 也可以新建一个类CMyDialog
CDialog m_InnerDlg2; // 也可以新建一个类CMyDialog
这两个程序是放到头文件类声明里的
按钮代码只需要放这个内容:
m_InnerDlg1.ShowWindow(SW_SHOW); // 显式对话框
m_InnerDlg2.ShowWindow(SW_HIDE); // 隐藏对话框
defrag257 2015-05-20
  • 打赏
  • 举报
回复
然后就可以在各个对话框里控制子级对话框的显式了
defrag257 2015-05-20
  • 打赏
  • 举报
回复
更正: m_InnerDlg1.MoveWindow(&rect); m_InnerDlg2.MoveWindow(&rect);
defrag257 2015-05-20
  • 打赏
  • 举报
回复
新建一个Style为Child,Border为None的对话框,然后在父对话框那里添加一个PictureBox(IDC_PIC1)用于定位,Visible设为False //CDlgParent.h CDialog m_InnerDlg1; // 也可以新建一个类CMyDialog CDialog m_InnerDlg2; // 也可以新建一个类CMyDialog //CDlgParent.cpp——OnInitDialog() CRect rect; m_InnerDlg1.Create(IDD_INNER_1, this); // 创建非模态对话框,父级是自己 m_InnerDlg2.Create(IDD_INNER_2, this); // 创建非模态对话框,父级是自己 GetDlgItem(IDC_PIC1)-> GetWindowRect(&rect); // 准确定位 ScreenToClient(&rect); // 千万注意别用成ClientToScreen m_InnerDlg1.MoveWindow(rect); // 移动到 m_InnerDlg2.MoveWindow(rect); // 移动到 m_InnerDlg1.ShowWindow(SW_SHOW); // 显式对话框 m_InnerDlg1.ShowWindow(SW_HIDE); // 隐藏对话框
jp417799578 2015-05-20
  • 打赏
  • 举报
回复
求大神, 在线等。。

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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