繁体   English   中英

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

[英]Hide main MFC window while modal dialog is active?

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

我该怎么做?

如果隐藏主窗口(ShowWindow(SW_HIDE)),任务栏图标将消失。 如果我最小化主窗口(SW_MINIMIZE),该图标将保留。 但是,由于对话框归主窗口所有,因此这也隐藏了该对话框。

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

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

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

在WinXP32下使用Windows VS2005。

在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);

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM