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。