从标题栏中移除图标和系统菜单

3
我需要在保留最大化、最小化和关闭按钮的同时,从我的MFC对话框标题栏中移除系统菜单和图标。
我尝试使用SetIcon(NULL, TRUE),SetIcon(NULL,FALSE)来移除图标。然而,这并没有起作用。图标仍然显示在那里,有点混乱,我认为应用程序只是将主框架图标调整大小。
有人能帮帮我吗?我正在使用VC++ 2010 SP1。
谢谢
2个回答

9

标题栏图标也可以独立于最小化/最大化/关闭按钮而被移除,只需使用扩展样式(仅在对话框上测试过,不知道在窗口上表现如何)。

将以下代码粘贴到您的对话框的 OnInitDialog() 方法中,它应该可以运行:

// Disable default titlebar icon 
int extendedStyle = GetWindowLong(m_hWnd, GWL_EXSTYLE);
SetWindowLong(m_hWnd, GWL_EXSTYLE, extendedStyle | WS_EX_DLGMODALFRAME);

// Update non-client area of the dialog, for the changes to take effect
SetWindowPos(NULL, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER);

我也曾经尝试过SetIcon()方法以及许多其他提出的解决方案/技巧,除了上面提到的(即扩展样式)之外,没有一个可行。

编辑:

我刚刚偶然发现了一个更简单的代码等效方法:

只需将DS_MODALFRAME添加到对话框样式中,再加上WS_CAPTIONWS_SYSMENU

https://msdn.microsoft.com/en-us/library/windows/desktop/ff729172%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396


尝试了扩展样式版本的WPF“窗口”。没有效果。尚未在对话框上进行测试。 - AndresRohrAtlasInformatik
问题和答案仅涉及MFC,与WPF、WinForms等无关。 - Teodor Tite

1
在资源编辑器中,编辑对话框的属性:将“系统菜单”设置为false。这将删除您的对话框的WS_SYSMENU windows style
编辑:糟糕!我刚刚重新阅读了您的问题,并意识到您想保留最小化和最大化框。我的解决方案无法做到这一点。这是一个不寻常的要求。

1
允许对话框最小化没有意义。在应用程序中将不会有任何窗口供用户切换回去。最大化它也没有太多意义,但至少不会致命。 - Hans Passant
4
我不明白如何最大化和最小化对话是没有意义的。而且,我真的不明白这与我的问题有什么关系? - Zaid Amir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接