1. 程式人生 > >MFC刪除工具欄上的關閉按鈕

MFC刪除工具欄上的關閉按鈕

MFC的工具欄,在浮動的時候,會有一個關閉按鈕,有時候要去掉這個關閉按鈕,要怎麼做呢?

方法為:

從CToolBar派生一個類,比如CToolBarEx,然後新增訊息WM_WINDOWPOSCHANGED的響應函式。

在函式中新增如下程式碼:

void CToolBarEx::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) 
{
CToolBar::OnWindowPosChanged(lpwndpos);

// TODO: Add your message handler code here
if(IsFloating())
{
CWnd* pParent = GetParentFrame();    //當浮動的時候,獲得框架,選單都是存在於框架上的。
if(pParent->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd))) 
{
pParent->ModifyStyle(WS_SYSMENU, 0, 0 ); //刪除選單。
}
}
}

上面這種方法是簡單的方法,有一點冗餘,就是在工具條被重新停靠在框架上的時候,也會執行一遍,雖然沒有什麼影響,但是從邏輯上說,這不是一個科學的程式,所以我們再新增一個變數,用來儲存選單的刪除狀態。

在標頭檔案中新增變數:

private:
BOOL m_bDeleteMenu;//記錄是否刪除了選單,初始化為false

然後在訊息響應函式中,新增下面的程式碼:

void CToolBarEx::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) 
{
CToolBar::OnWindowPosChanged(lpwndpos);

// TODO: Add your message handler code here
if(IsFloating())
{
if(!m_bDeleteMenu)
{
CWnd* pParent = GetParentFrame();
if(pParent->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)))
{
pParent->ModifyStyle(WS_SYSMENU, 0, 0 );
m_bDeleteMenu = TRUE;
}
}
}
else if(m_bDeleteMenu)
{
m_bDeleteMenu = FALSE;
}
}

//這就是一個比較科學的方式了。