9

我有一个对话框(CDialog 派生类),可以以两种不同的方式(编辑模式和编程模式)使用。

当对话框打开以在编程模式下使用时,它是一个无模式对话框,用于修改主视图(一种工具栏)。当它以编辑模式打开时,用户可以更改对话框本身的配置,在这种情况下它是一个模态对话框。

现在它们是两个不同的对话框,几乎没有区别,我只想有一个对话框,让用户只需按下对话框中的一个按钮就可以在编程模式和编辑模式之间切换。

所以我需要在模式对话框中转换无模式对话框,反之亦然。有没有办法做到这一点?

谢谢。

4

3 回答 3

13

也许有人可能有兴趣在未来做类似的事情,这就是我最终做到的方式:

我使用主机的这两个功能:CMainFrame::BeginModalState()CMainFrame::EndModalState()

The problem with these functions is the same that with disabling the parent window. The window you want to make modal also gets disabled. But the solution is easy, just re-enable the window after calling 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();
}

Thanks for your help.

于 2009-08-06T09:52:12.667 回答
2

如果不关闭并重新打开对话框,这将无法轻松完成。然后您可以根据需要调用 ShowWindow 或 DoModal。

于 2009-08-04T06:43:22.910 回答
1

这是不正确的。这可以做到,如果您查看 MFC 的源代码,您会意识到它的模态对话框在技术上甚至不是模态的。您必须做很多工作才能使其正常工作,但基本上您只需禁用“模态”窗口的父级,并在“模态”窗口关闭时重新启用它。

我亲自完成了此操作,因此这可能对您有用,尽管我不确定您要做什么。

于 2009-08-04T20:22:37.900 回答