模态对话框处于活动状态时隐藏主MFC窗口?

时间:2012-04-02 19:37:58

标签: c++ mfc modal-dialog

我有一个原生的C ++ MFC应用程序。它有一个基于CWnd的主窗口,用户操作可以创建一个模态对话框。当对话框处于活动状态时,我希望主窗口消失,对话框可见,主窗口的图标保留在任务栏中。

我该如何做到这一点?

如果我隐藏主窗口(ShowWindow(SW_HIDE)),任务栏图标就会消失。如果我最小化主窗口(SW_MINIMIZE),则图标仍然存在。但是,由于对话框由主窗口拥有,因此也会隐藏对话框。

创建对话框后,单击任务栏图标可使对话框可见。当然,我不想要求用户这样做。

即使我在对话框的OnInit处理程序中插入ShowWindow(SW_SHOW),对话框仍然不可见。但Spy ++显示其可见位已设置。如果我将SetWindowActive添加到OnInit也是如此。

我对更改UI设计不感兴趣。当对话框处于活动状态时,用户仅与其交互,并且对主窗口中的任何内容都不感兴趣。因此,主窗口应该消失。

在WinXP32下使用Windows VS2005。

4 个答案:

答案 0 :(得分:1)

好吧,在您创建对话框并将其显示为模态的代码块中,只要您将桌面窗口设置为您的父级,您就可以对应用程序的主窗口执行任何操作(显示/隐藏)对话。通常,CDialog和衍生物的构造函数为父窗口采用NULL的默认参数,其中框架最终取代AfxGetMainWnd()。而是将CWnd :: GetDesktopWindow()作为对话框的父级传递,然后您应该可以隐藏主窗口。但是,你仍然可能对任务栏有问题 - 但是我会让其他人给出提示,因为我对此一无所知。

答案 1 :(得分:1)

在OnInitDialog中,添加以下代码

//Set windows size zero, the windows disappear.
MoveWindow(0,0,0,0);

//If you want it invisible on taskbar. add following codes.
DWORD dwStyle = GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE);
dwStyle &=~WS_EX_APPWINDOW;   
dwStyle |= WS_EX_TOOLWINDOW;     
SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, dwStyle);

答案 2 :(得分:0)

你正在与操作系统作斗争。根据定义,模态对话框禁用但不隐藏“主”(父)窗口。如果您想要另一个窗口,请创建第二个窗口,但不要告诉操作系统将其视为第一个窗口上的模态对话框。

答案 3 :(得分:0)

也许您可以将主窗口调整为非常小的尺寸,并始终将其保留在模态对话框后面。