MFC 中创建Dlg的问题
已知在MFC中从一个Dlg中调用另一个Dlg为NewDlgmyDlg;myDlg.DoModal();但是这样的话,子窗口不关闭,主窗口上的button都是无效的有没有方...
已知在MFC中从一个Dlg中调用另一个Dlg为NewDlg myDlg;myDlg.DoModal();但是这样的话,子窗口不关闭,主窗口上的button都是无效的有没有方法使得子窗口保持在主窗口最上层,但是主窗口的button有效呢然后设置子窗口的位置时刻和主窗口相对一致,这样可以实现主窗口移动时子窗口跟着相对移动,高手帮忙 其实我想实现c#中的Panel功能,设置好多Panel,可见性=false;单击不同的 button 显示不同的panelMFC中的Panel没有类似的功能,我用Dlg代替但是不知道具体怎么做,求高手帮忙,高分送上
展开
4个回答
2013-08-01
展开全部
有办法!! 使用非模态对话框...
假设你要显示的对话框的类名为: CNewDlg;
首先: 在主窗口的头文件中做提前声明 class CNewDlg;
为主窗口类添加成员变量: CNewDlg *m_pDlg;
在主窗口构造函数中复初值: m_pDlg = new CNewDlg(this);
其次: 在需要弹出该窗口的地方加入代码:
if (m_pDlg->GetSafeHwnd()==0)
{
m_pDlg->Create(); //注意:非模态对话框必须调用Create创建产生(原因参见实验指导书P65)
}
else
{
m_pDlg->SetActiveWindow();
}
最后: 就是销毁窗口了.
非模态对话框必须使用函数DestroyWindow()来销毁窗口. 这个工作,最好通过下面的步骤来做:
对CNewDlg类响应 IDOK 消息. 在消息响应函数中, 发送一个自定义消息给m_pDlg 父窗口, 也就是
你的主窗口, 在主窗口中对消息进行响应, 执行代码: m_pDlg->DestroyWindow(); 即可.
还需要在主对话框的析构函数中进行资源的释放:
delete m_pDlg;
希望对你能有帮助..如果不会添加自定义消息,随时可以联系我....
假设你要显示的对话框的类名为: CNewDlg;
首先: 在主窗口的头文件中做提前声明 class CNewDlg;
为主窗口类添加成员变量: CNewDlg *m_pDlg;
在主窗口构造函数中复初值: m_pDlg = new CNewDlg(this);
其次: 在需要弹出该窗口的地方加入代码:
if (m_pDlg->GetSafeHwnd()==0)
{
m_pDlg->Create(); //注意:非模态对话框必须调用Create创建产生(原因参见实验指导书P65)
}
else
{
m_pDlg->SetActiveWindow();
}
最后: 就是销毁窗口了.
非模态对话框必须使用函数DestroyWindow()来销毁窗口. 这个工作,最好通过下面的步骤来做:
对CNewDlg类响应 IDOK 消息. 在消息响应函数中, 发送一个自定义消息给m_pDlg 父窗口, 也就是
你的主窗口, 在主窗口中对消息进行响应, 执行代码: m_pDlg->DestroyWindow(); 即可.
还需要在主对话框的析构函数中进行资源的释放:
delete m_pDlg;
希望对你能有帮助..如果不会添加自定义消息,随时可以联系我....
2013-08-01
展开全部
你应该创建一个窗体,而不是对话框,创建完窗体后将窗体的OnTop属性设置就可以了,相关函数为
CreateWindow
ShowWindow
CreateWindow
ShowWindow
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-01
展开全部
在mfc中创建对话框
对话框样式分两种,一种是模式对话框,另一种是非模式对话框.当打开对话框时需要阻塞进程时,使用模式对话框,当打开对话框需可以进行其它操作时,使用非模式对话框.
一般在菜单中选择某菜单项,当选择后直接打开对话框,
例如显示模态对话框CxxxDlg mydlg; mydlg.DoModal();
例如显示非模态对话框CxxxDlg* pmydlgp = new CxxxDlg;
if ( pmydlgp)
{
pmydlgp->Create(IDD_MYDIALOG,this);
}
pmydlgp->ShowWindow(SW_SHOW);
对话框样式分两种,一种是模式对话框,另一种是非模式对话框.当打开对话框时需要阻塞进程时,使用模式对话框,当打开对话框需可以进行其它操作时,使用非模式对话框.
一般在菜单中选择某菜单项,当选择后直接打开对话框,
例如显示模态对话框CxxxDlg mydlg; mydlg.DoModal();
例如显示非模态对话框CxxxDlg* pmydlgp = new CxxxDlg;
if ( pmydlgp)
{
pmydlgp->Create(IDD_MYDIALOG,this);
}
pmydlgp->ShowWindow(SW_SHOW);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-01
展开全部
DoModal是创建模态对话框
Show是创建非模态对话框
myDlg.Show();
Show是创建非模态对话框
myDlg.Show();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询