【问题标题】:Removing Icon and System Menu from TitleBar从 TitleBar 中删除图标和系统菜单
【发布时间】:2012-02-19 08:37:12
【问题描述】:

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

我尝试过使用 SetIcon(NULL, TRUE), SetIcon(NULL,FALSE) 希望这会删除图标。然而,这并没有奏效。图标仍然显示,虽然有点乱,我认为该应用程序只是采用了主框架图标并调整了它的大小。

谁能帮我解决这个问题。我正在使用 VC++ 2010 SP1

谢谢

【问题讨论】:

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


    【解决方案1】:

    标题栏图标也可以独立地从最小/最大/退出按钮中删除,通过使用扩展样式(仅在对话框上测试,不知道它在 Windows 上的表现如何)。 p>

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 允许最小化对话框是没有意义的。应用程序中不会留下任何用户可以切换回的窗口。最大化它也没有什么意义,但至少它不是致命的。
      • 我不明白最大化和最小化对话框是多么没有意义。而且,我真的不明白这与我的问题有什么关系?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 2011-03-06
      • 2018-04-25
      • 1970-01-01
      相关资源
      最近更新 更多