mfc 窗体间的跳转! 急 ……………………
答案:5 悬赏:80 手机版
解决时间 2021-02-12 07:52
- 提问者网友:风月客
- 2021-02-12 04:18
有2个窗体 每个窗体有 个按钮, 点击A窗口的 a 按钮跳转到B 窗体,点击B 窗体的b按钮 跳转到A窗体 实现 窗体间的跳转、。。。高分 等 。追加 50分 。
最佳答案
- 五星知识达人网友:千杯敬自由
- 2021-02-12 05:06
要实现这个功能。
最少有一个为 对话框 为非模式 对话框。
方法:
新建一个对话框 程序 A 类就是 CADlg
添加一个 对话框资源B ,ID为 IDD_DIALOGB ,类为CBDlg
把 CBDlg 的头文件 bdlg.h 包含到 CADlg 的头文件,并在CADlg类中定义一个
CBDlg对象.
#include "bdlg.h" //这是新加代码。
/////////////////////////////////////////////////////////////////////////////
// CADlg dialog
class CADlg : public CDialog
{
// Construction
public:
CADlg(CWnd* pParent = NULL); // standard constructor
CBDlg bdlg; //这是新加代码。
// Dialog Data
//{{AFX_DATA(CADlg)
enum { IDD = IDD_A_DIALOG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
。。。。。。
在CADlg的初始化函数中加入代码
BOOL CADlg::OnInitDialog()
{
。。。。。。。
bdlg.Create(IDD_DIALOGB);//这是新加代码。
return TRUE;
}
在对话框A上放置一个按钮a,双击添加事件如下
void CADlg::OnButton1()
{
// TODO: Add your control notification handler code here
ShowWindow(0);
bdlg.ShowWindow(1);
}
以上是对A的处理。
在对话框B上放置一个按钮 ,双击添加事件如下
void CBDlg::OnButton1()
{
// TODO: Add your control notification handler code here
ShowWindow(0);
GetParent()->ShowWindow(1);
}
到这里已经可以实现切换窗口了,但是 当显示B窗口时,如果点击了 关闭按钮,那么由于A处于隐藏状态,程序就无法控制了。
最好的方法是 B窗口关闭后,发送消息 整个程序结束。
void CBDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
::PostQuitMessage(0);
CDialog::OnClose();
}
BOOL CBDlg::DestroyWindow()
{
::PostQuitMessage(0);
// TODO: Add your specialized code here and/or call the base class
return CDialog::DestroyWindow();
}
void CBDlg::OnOK()
{
// TODO: Add extra validation here
::PostQuitMessage(0);
CDialog::OnOK();
}
void CBDlg::OnCancel()
{
// TODO: Add extra cleanup here
::PostQuitMessage(0);
CDialog::OnCancel();
}
最少有一个为 对话框 为非模式 对话框。
方法:
新建一个对话框 程序 A 类就是 CADlg
添加一个 对话框资源B ,ID为 IDD_DIALOGB ,类为CBDlg
把 CBDlg 的头文件 bdlg.h 包含到 CADlg 的头文件,并在CADlg类中定义一个
CBDlg对象.
#include "bdlg.h" //这是新加代码。
/////////////////////////////////////////////////////////////////////////////
// CADlg dialog
class CADlg : public CDialog
{
// Construction
public:
CADlg(CWnd* pParent = NULL); // standard constructor
CBDlg bdlg; //这是新加代码。
// Dialog Data
//{{AFX_DATA(CADlg)
enum { IDD = IDD_A_DIALOG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
。。。。。。
在CADlg的初始化函数中加入代码
BOOL CADlg::OnInitDialog()
{
。。。。。。。
bdlg.Create(IDD_DIALOGB);//这是新加代码。
return TRUE;
}
在对话框A上放置一个按钮a,双击添加事件如下
void CADlg::OnButton1()
{
// TODO: Add your control notification handler code here
ShowWindow(0);
bdlg.ShowWindow(1);
}
以上是对A的处理。
在对话框B上放置一个按钮 ,双击添加事件如下
void CBDlg::OnButton1()
{
// TODO: Add your control notification handler code here
ShowWindow(0);
GetParent()->ShowWindow(1);
}
到这里已经可以实现切换窗口了,但是 当显示B窗口时,如果点击了 关闭按钮,那么由于A处于隐藏状态,程序就无法控制了。
最好的方法是 B窗口关闭后,发送消息 整个程序结束。
void CBDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
::PostQuitMessage(0);
CDialog::OnClose();
}
BOOL CBDlg::DestroyWindow()
{
::PostQuitMessage(0);
// TODO: Add your specialized code here and/or call the base class
return CDialog::DestroyWindow();
}
void CBDlg::OnOK()
{
// TODO: Add extra validation here
::PostQuitMessage(0);
CDialog::OnOK();
}
void CBDlg::OnCancel()
{
// TODO: Add extra cleanup here
::PostQuitMessage(0);
CDialog::OnCancel();
}
全部回答
- 1楼网友:慢性怪人
- 2021-02-12 08:26
findwinow();
showwindow();
- 2楼网友:三千妖杀
- 2021-02-12 07:00
不知道你要在什么情况下使用,如果是一个窗口中的数据要用到令一个窗口,你可以在按钮点击事件中定义窗口然后显示它并传值
- 3楼网友:長槍戰八方
- 2021-02-12 06:09
你好!
在两个对话框中分别写入两个按钮的响应事件。
如下:
CDialog dlg;//创建对象
if(dlg.m_hwnd==NULL)//判断创建对话框没有,如果创建了,再次创建就会出错。
dlg.creat();//创建窗口
dlg.showwindow();//显示窗口
如有疑问,请追问。
- 4楼网友:春色三分
- 2021-02-12 05:16
哈哈,可以肯定,你的C++水平相当的菜啊。。。。
没有C++的基础,就不来弄这些了。
你说的这个问题就是两个类之间的通信问题,
你可以构造另一个窗口类时,传一个当前类的窗口指针进去就行了啊。
好好学基础吧,虽然不懂MFC,但劝你还是去学C语言呢,C语言就没有这种问题了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯