我有一个对话框(CDialog派生类),可以以两种不同的方式使用(编辑模式和编程模式)。
当对话框打开以在编程模式下使用时,它是一个无模式对话框,用于修改主视图(工具栏的种类)。当它在编辑模式下打开时,用户可以更改对话框本身的配置,在这种情况下,它是一个模态对话框。
现在它们是两个不同的对话框,几乎没有差异,我想只需要对话框,让用户只需按对话框中的按钮即可在编程模式和编辑模式之间切换。
所以我需要在运行时在模态对话框中转换无模式对话框,反之亦然。有没有办法实现这个目标?
感谢。
答案 0 :(得分:11)
也许有人可能有兴趣在将来做类似的事情,这是我最终做到的方式:
我使用主框架的这两个功能:CMainFrame::BeginModalState()
和CMainFrame::EndModalState()
。
这些功能的问题与禁用父窗口的问题相同。您要制作模态的窗口也会被禁用。但解决方案很简单,只需在调用BeginModalState
后重新启用窗口。
void CMyDialog::MakeModal()
{
//disable all main window descendants
AfxGetMainWnd()->BeginModalState();
//re-enable this window
EnableWindow(TRUE);
}
void CMyDialog::MakeModeless()
{
//enable all main window descendants
AfxGetMainWnd()->EndModalState();
}
感谢您的帮助。
答案 1 :(得分:2)
如果不关闭并重新打开对话框,则无法轻松。然后您可以根据需要调用ShowWindow或DoModal。
答案 2 :(得分:1)
这是不正确的。这可以做到,如果你看看MFC的源代码,你会发现它的模态对话框在技术上甚至不是模态的。你将不得不做很多事情来使这项工作正常,但基本上你只需要禁用'模态'窗口的父级,并在'模态'窗口关闭时重新启用它。
我亲自完成了这项工作,所以这对你有用,虽然我不确定你要做什么。