MFC 子对话框不显示,该如何解决
MFC 子对话框不显示
MFC工程的主对话框MainDlg是一个基于CFormview类的对话框,利用Groupbox控件将它划分为三个区域R1,R2, R3
假定三个Groupbox控件的ID分别为IDC_R1,IDC_R2,IDC_R3。
1.创建三个子对话框资源IDD_R1,IDD_R2,IDD_R3,三个子对话框的大小分别与上面创建的三个区域基本一样。
2.在MainDlg类的CPP文件中加入以下代码,将子对话框资源加载到三个Groupbox控件所在的区域。
例如区域R1, 利用以下代码(CDialogEx* Dlg)
这样子对话框IDD_R1的资源就插入主对话框(MainDlg)中并可以显示了,另外两个子对话框也是如此,这样之后
三个子对话框就可以在主对话框中显示了。
3.再创建三个对话框资源IDD_R1_CHILD,IDD_R2_CHILD,IDD_R3_CHILD,这三个子对话框的大小也是分别与上面创建的三个子对话框IDD_R1,IDD_R2,IDD_R3大小基本一致。
4.现在子对话框IDD_R1上面有个button,点击这个button后,要求上述三个Groupbox控件区域的子对话框(IDD_R1,IDD_R2,IDD_R3)由第3步中创建的IDD_R1_CHILD,IDD_R2_CHILD,IDD_R3_CHILD这个三个对话框资源分别取代显示(比如Groupbox控件的区域R1,现在显示的是IDD_R1_CHILD的内容,IDD_R1的内容将被隐藏).目前,问题就是,button按钮的消息处理是在子对话框IDD_R1中定义的,利用如下代码:
IDD_R1_CHILD的资源可以正确地显示在R1区域(略去了IDD_R1相关控件隐藏的代码),现在如何在IDD_R1类中使IDD_R2_CHILD显示在R2区域上呢?我在IDD_R1的类中实例化了一个IDD_R2的对象,利用上述相似的代码无法在R2区域正常显示。
我又将MoveWindow中的区域坐标上移,发现IDD_R2_CHILD在R1区域的内容可以显示,但在R2区域的内容无法显示。请问这是什么原因?问题归结于如何在IDD_R1类中的button按钮响应函数中加载其余想要的子对话框的资源。该如何解决啊,谢谢!
------解决思路----------------------
你还是贴个图出来看看吧,文字太多了~
------解决思路----------------------
先看对话框有没有创建成功,返回值什么,是不是对话框创建失败了
------解决思路----------------------
CRect rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
跟踪一下,坐标转换,估计是移动你看不见的地方去了?
------解决思路----------------------
建议最好在子对话框中发消息给父对话框
由父对话框统一管理所有自对话框显示和隐藏
------解决思路----------------------
楼主,有个问题,有“返回” “订单表格” 等三个按钮的边框颜色为蓝色,不知道你点击的是哪个;我的意思是点击其中一个按钮,该按钮的边框显示为蓝色,其他的按钮恢复原来的初始状态,怎么做?
------解决思路----------------------
隐藏窗体不要隐藏控件,并且把最新的控件做置顶处理
MFC工程的主对话框MainDlg是一个基于CFormview类的对话框,利用Groupbox控件将它划分为三个区域R1,R2, R3
假定三个Groupbox控件的ID分别为IDC_R1,IDC_R2,IDC_R3。
1.创建三个子对话框资源IDD_R1,IDD_R2,IDD_R3,三个子对话框的大小分别与上面创建的三个区域基本一样。
2.在MainDlg类的CPP文件中加入以下代码,将子对话框资源加载到三个Groupbox控件所在的区域。
例如区域R1, 利用以下代码(CDialogEx* Dlg)
CRect rect;
GetDlgItem(IDC_R1)-> GetWindowRect(&rect);
ScreenToClient(&rect);
Dlg->Create(IDD_R1, this);
Dlg->MoveWindow(rect.left, rect.top, rect.Width(), rect.Height());
Dlg->ShowWindow( SW_SHOW );
这样子对话框IDD_R1的资源就插入主对话框(MainDlg)中并可以显示了,另外两个子对话框也是如此,这样之后
三个子对话框就可以在主对话框中显示了。
3.再创建三个对话框资源IDD_R1_CHILD,IDD_R2_CHILD,IDD_R3_CHILD,这三个子对话框的大小也是分别与上面创建的三个子对话框IDD_R1,IDD_R2,IDD_R3大小基本一致。
4.现在子对话框IDD_R1上面有个button,点击这个button后,要求上述三个Groupbox控件区域的子对话框(IDD_R1,IDD_R2,IDD_R3)由第3步中创建的IDD_R1_CHILD,IDD_R2_CHILD,IDD_R3_CHILD这个三个对话框资源分别取代显示(比如Groupbox控件的区域R1,现在显示的是IDD_R1_CHILD的内容,IDD_R1的内容将被隐藏).目前,问题就是,button按钮的消息处理是在子对话框IDD_R1中定义的,利用如下代码:
CRect rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
Dlg->Create(IDD_R1_CHILD, this);
Dlg->MoveWindow(rect.left, rect.top, rect.Width(), rect.Height());
Dlg->ShowWindow( SW_SHOW );
IDD_R1_CHILD的资源可以正确地显示在R1区域(略去了IDD_R1相关控件隐藏的代码),现在如何在IDD_R1类中使IDD_R2_CHILD显示在R2区域上呢?我在IDD_R1的类中实例化了一个IDD_R2的对象,利用上述相似的代码无法在R2区域正常显示。
我又将MoveWindow中的区域坐标上移,发现IDD_R2_CHILD在R1区域的内容可以显示,但在R2区域的内容无法显示。请问这是什么原因?问题归结于如何在IDD_R1类中的button按钮响应函数中加载其余想要的子对话框的资源。该如何解决啊,谢谢!
------解决思路----------------------
你还是贴个图出来看看吧,文字太多了~
------解决思路----------------------
先看对话框有没有创建成功,返回值什么,是不是对话框创建失败了
------解决思路----------------------
CRect rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
跟踪一下,坐标转换,估计是移动你看不见的地方去了?
------解决思路----------------------
建议最好在子对话框中发消息给父对话框
由父对话框统一管理所有自对话框显示和隐藏
------解决思路----------------------
楼主,有个问题,有“返回” “订单表格” 等三个按钮的边框颜色为蓝色,不知道你点击的是哪个;我的意思是点击其中一个按钮,该按钮的边框显示为蓝色,其他的按钮恢复原来的初始状态,怎么做?
------解决思路----------------------
隐藏窗体不要隐藏控件,并且把最新的控件做置顶处理