Mfc 如何动态显示和隐藏MDI框架的标题栏?

Mfc 如何动态显示和隐藏MDI框架的标题栏?,mfc,mdi,win32gui,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

我一直在四处寻找,没有找到任何有效的解决方案

我曾尝试使用所有这些工具,但都没有成功:

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框架的标题栏吗?没有文本或栏(包括没有最小化、最大化和关闭按钮),只有一个厚边框可以调整大小


我还碰巧使用了卡介苗色带,因为这显然会影响它的渲染方式。

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

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);
    }
结果是


我的答案只有在使用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;
}
这会产生您想要的效果

你所说的“在飞”是什么意思?你能展示你想要的图像吗?@rrirower:“在飞行中”,当某物或某人正在操作或移动时的第一个定义。我将尝试在飞行中捕获数据。。图像?我希望有一个MDI框架(MDI应用程序的主窗口)在某一时刻有一个标题栏,而在下一时刻没有标题栏。图像真的有必要吗?取决于你是否需要帮助。是否要删除标题文本并保留框架样式,或更改框架样式并删除文本?你的描述不清楚。至少,对我来说不是…@rrirower,哦,我明白了。我想保留框架样式,但失去标题栏。没有文本或栏(包括没有最小化、最大化和关闭按钮),只有一个厚边框可以调整大小。谢谢。不,不太好。我根本不想要标题栏。我想你可能不走运了。修改其他样式会损坏窗口(例如,主菜单丢失)。实际上,您可以尝试重新调整窗口矩形的大小,以删除标题栏的空间。真是太疯狂了。事实上,我不在乎菜单。我用的是色带,主色带无论如何都要消失。嗯,你说重新调整窗口矩形的尺寸是什么意思?你能解释一下或者举个例子吗?但我能随意打开和关闭它吗?我该怎么做?很抱歉,但简单的回答是:不!(据我所见)查看源代码(BCG+MFC),变量m_bReplaceFrameCaption被声明为const BOOL,因此它只能在构造时定义一次。因此,您可以在程序构建期间打开或关闭它。。。我从来没有试图破坏一个已经建成的色带条,并试图重新创建它。这将是解决这个问题的唯一机会。此外,函数IsReplaceFrameCaption不是虚拟的,不可重写…Hrm。无论如何,谢谢你(等等!这可以为孩子做吗?也就是说,我可以用类似的方式删除孩子的标题栏吗?孩子?你指的是什么孩子?框架是CMainFrame窗口非客户端区域的drwan。