从TitleBar中删除图标和系统菜单

时间:2012-01-26 07:16:07

标签: windows visual-studio mfc visual-c++

我需要从MFC对话框的标题栏中删除系统菜单和图标,同时保持最大化,最小化和关闭按钮。

我尝试过使用SetIcon(NULL,TRUE),SetIcon(NULL,FALSE),希望这会删除图标。但是,这不起作用。图标仍然显示有点凌乱,我认为应用程序只是采用主框架图标并调整大小。

任何人都可以帮我解决这个问题..我正在使用VC ++ 2010 SP1

由于

2 个答案:

答案 0 :(得分:6)

标题栏图标也可以通过使用扩展样式(仅在对话框上测试,不知道它在Windows上的行为方式)从min / max / exit按钮独立删除。

将以下代码粘贴到对话框的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

答案 1 :(得分:1)

在资源编辑器中,编辑对话框的属性:将“系统菜单”设置为false。这将删除对话框的WS_SYSMENU windows style

编辑:哎呀!我只是重新阅读你的问题并意识到你想保留最小和最大的盒子。我的解决方案不会这样做。这是一个不寻常的要求。