2014-10-02 307 views
2

我一直在環顧四周,我一直無法找到任何可行的解決方案。如何在MDI框架上顯示和隱藏標題欄?

我試着使用所有這些都沒有成功:

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絲帶,因爲它明顯地改變了它的渲染方式。

+0

你是什麼意思的「對飛」?你能展示你想要的東西嗎? – rrirower 2014-10-03 12:44:12

+0

@rrirower:「在飛行中」,首先定義[here](http://idioms.thefreedictionary.com/on+the+fly)__同時某人或某人正在操作或移動。 *我將盡力捕捉數據* .__。一個圖像?我想要一個MDI框架(MDI應用程序的主窗口)有一個標題欄,下一個沒有標題欄。圖像真的有必要嗎? – Adrian 2014-10-03 14:58:01

+1

取決於您是否需要幫助。你想刪除標題文本並保留框架樣式,或者改變框架樣式並刪除文本?您的描述不清楚。至少,不是我...... – rrirower 2014-10-03 15:42:51

回答

1

我的答案是唯一有效的。 風格標記不影響色帶條實施的主要原因是色帶條繪製自己的NC區域。實際上沒有「窗口標題」。

您需要初始化您的CMFCRibbonBar並將bReplaceFrameCaption設置爲FALSE。

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

+0

但是我可以隨意打開和關閉嗎?我怎樣才能做到這一點? – Adrian 2014-10-06 14:12:28

+0

對不起,但簡單的答案是:不!(據我所見)看看源代碼(BCG + MFC),變量m_bReplaceFrameCaption被聲明爲const BOOL,所以它只能在構造時定義一次。因此,您可以在構建程序期間打開或關閉它...我從未試圖摧毀已經構建好的色帶欄並嘗試重新創建它。這將是解決這個問題的唯一機會。另外功能IsReplaceFrameCaption是不是虛擬的,不可覆蓋... – xMRi 2014-10-06 14:19:28

+0

Hrm。不管怎麼說,還是要謝謝你。 :( – Adrian 2014-10-06 14:51:46

0

這會嗎?以下代碼將生成您在下圖中看到的內容。我在子窗口中選擇了一個事件來演示代碼。如果您使用MFC功能條執行或執行BCG

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

+0

不,不是。我根本不需要標題欄。不只是空白。 – Adrian 2014-10-03 20:22:58

+0

我想你可能會走運。修改其他樣式往往會破壞窗口(例如,主菜單丟失)。 – rrirower 2014-10-03 20:24:10

+0

實際上,您可能可以嘗試重新調整窗口矩形的大小以刪除標題欄的空間。工作足夠瘋狂。 – rrirower 2014-10-03 20:26:00