如何在MDI框架上显示和隐藏标题栏?

时间:2014-10-02 20:13:27

标签: mfc mdi win32gui

我一直在四处寻找,但我找不到任何可行的解决方案。

我试图使用所有这些但没有成功:

GetMDIFrame()->ModifyStyle(WS_CAPTION, 0);
GetMDIFrame()->ModifyStyle(WS_CAPTION, 0, SWP_DRAWFRAME|SWP_FRAMECHANGED);
SetWindowLong(hwnd, GWL_STYLE, ::GetWindowLong(hwnd, GWL_STYLE) & ~(WS_BORDER | WS_DLGFRAME | WS_THICKFRAME));
SetWindowLong(hwnd, GWL_EXSTYLE, ::GetWindowLong(hwnd, GWL_EXSTYLE) & ~WS_EX_DLGMODALFRAME)

有谁知道如何摆脱MDI框架的标题栏?没有文字或栏(这包括没有最小化,最大化和关闭按钮),只有一个厚边框才能调整大小。

我也碰巧使用BCG色带,显然会对它的呈现方式产生影响。

2 个答案:

答案 0 :(得分:1)

我的回答仅在您使用MFC功能区栏实施或BCG实施时才有效。 样式标志不影响色带条实现的主要原因是色带条绘制了自己的NC区域。实际上没有“窗口标题”。

您需要在bReplaceFrameCaption设置为FALSE的情况下初始化CMFCRibbonBar。

CMainFrame::CMainFrame()
     : m_wndRibbonBar(FALSE)
{

覆盖CMainFrame:PreCreateWindow并设置所需的样式。

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
  if( !CBCGPMDIFrameWnd::PreCreateWindow(cs) )
    return FALSE;

  cs.style = WS_POPUPWINDOW;

  return TRUE;
}

这会产生您想要的效果 enter image description here

答案 1 :(得分:0)

这会吗?以下代码生成您在下图中看到的内容。我在子窗口中选择了一个事件来演示代码。

void CChildFrame::OnSysCommand(UINT nID, LPARAM lParam)
    {
    // TODO: Add your message handler code here and/or call default

    CMDIChildWnd::OnSysCommand(nID, lParam);

    CMDIFrameWnd* pFrame = GetMDIFrame();
    pFrame->SetWindowTextW(_T(""));
    pFrame->ModifyStyle(WS_MAXIMIZEBOX, 0);
    pFrame->ModifyStyle(WS_MINIMIZEBOX, 0);
    pFrame->ModifyStyle(WS_SYSMENU, 0);
    }

结果是......

enter image description here