MFC非模态对话框中如何通过按钮打开另一个对话框

2017-05-06 02:25
对按钮添加了处理程序之后,点击按钮无响应。
看了好多类似的问题还是没有明确答案,希望提供一个便捷方法,最好有实例。

回复讨论(解决方案)

另一个对话框要什么模式?模态的话直接DoModal
非模态的话,需要new一个,然后create
对话框无非就两种方式创建,  

你说"对按钮添加了处理程序之后,点击按钮无响应。"
按钮无响应是指按钮的点击事件没响应, 还是说对话框没有弹出来?  
点击事件没响应, 一般是事件关联没做对. 
如果是对话框没有弹出来, 那多半是代码有问题.  

记着下断点, F5调试运行, 跟踪代码执行.
直接创建对话框调用显示,或者给另一个对话框发送消息,让它来显示
对应的按钮添加BN_CLICKED通知,在响应函数中DoModal()你的对话框即可。
void CModallessDlg::OnBnClickedFont()
{
// TODO: 在此添加控件通知处理程序代码
CFontDialog fontdlg;
fontdlg.DoModal();
if(fontdlg.DoModal()==IDOK)
{
CMainFrame* pMainFrm=(CMainFrame*)AfxGetMainWnd();
fontdlg.GetCurrentFont(&pMainFrm->logft);
}
}
我在非模态对话框的源文件添加了那个按钮的消息响应函数,但是非模态对话框调用后单击按钮还是没反应,同样的代码在模态对话框下可以实现。据说是因为非模态对话框没有自己的消息循环,但是具体的代码要怎样实现呢

我是已经调用出非模态对话框窗口了,但是内部的自己设置按钮没有响应
void CModallessDlg::OnBnClickedFont()
{
// TODO: 在此添加控件通知处理程序代码
CFontDialog fontdlg;
fontdlg.DoModal();
if(fontdlg.DoModal()==IDOK)
{
CMainFrame* pMainFrm=(CMainFrame*)AfxGetMainWnd();
fontdlg.GetCurrentFont(&pMainFrm->logft);
}
}
我在非模态对话框的源文件添加了那个按钮的消息响应函数,但是非模态对话框调用后单击按钮还是没反应,同样的代码在模态对话框下可以实现。据说是因为非模态对话框没有自己的消息循环,但是具体的代码要怎样实现呢


非模态对话框一样有自己的消息循环
有个没有问题的。
非模态对话框要设置父窗口,setparent()
void CAboutDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
CFontDialog fontdlg;
// fontdlg.DoModal(); // 多余 !
if(fontdlg.DoModal()==IDOK)
{
// CMainFrame* pMainFrm=(CMainFrame*)AfxGetMainWnd();
// fontdlg.GetCurrentFont(&pMainFrm->logft);
AfxMessageBox("OK");
}
}
// 
void CListCtrl3Dlg::OnButton() 
{
CAboutDlg *pdlg=new CAboutDlg; // modless "about"  !!!
pdlg->Create(IDD_ABOUTBOX);
pdlg->ShowWindow(SW_SHOW);
}
把你代码贴出来,是点击按钮没进按钮响应函数还是根本没进函数
这个跟是不是模态对话框没半毛钱关系
模态和非模态,和源文件没有关系,只是看你怎么创建的实例。DoModal就是模态的,new,并且create就时非模态的。