转换一个无模式对话框在运行时莫代尔(Convert a modeless dialog to mod

2019-07-31 08:50发布

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

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

现在他们与一些区别两种不同的对话,我想有只想对话框,让编程模式和编辑模式之间的用户的变化只是由对话框中的按钮。

所以,我需要将无模式对话框转换成一个模式对话框,反之亦然在运行时。 有没有办法才达到的?

谢谢。

Answer 1:

作为也许有人可能有意这样做,今后类似的东西,这是我最终做到了方式:

我用主框架的这两个功能: 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();
}

谢谢你的帮助。



Answer 2:

这不能在没有关闭并重新打开的对话框中轻松完成。 然后,你可以调用的ShowWindow或作为的DoModal合适。



Answer 3:

这是不正确的。 这是可以做到,如果你看一下MFC的源代码,你会发现,它的模式对话框是不是技术上连模式。 你将不得不做混日子,使这项工作正确的很多,但基本上你只需要禁用“模式”窗口的父窗口,并重新启用它时,“模式”窗口关闭。

我已经这样做了亲自所以这可能为你工作,虽然我不完全知道你正在尝试做的。



文章来源: Convert a modeless dialog to modal at runtime