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

Zai*_*mir 2 windows mfc visual-studio visual-c++

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

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

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

谢谢

Teo*_*ite 6

标题栏图标也可以通过使用扩展样式独立于最小/最大/退出按钮删除(仅在对话框上测试,不知道它在窗口上的行为).

将以下代码粘贴到对话框的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);
Run Code Online (Sandbox Code Playgroud)

我也没有成功尝试过该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