一 一般地,工具欄是菜單欄中菜單命令的圖標按鈕形式。
二 工具欄刪除 Delete鍵只是刪除了圖標,要刪除某個工具欄按鈕,只需要鼠標左鍵按下,拖出到工具欄以外即可。如果要添加分隔符,只需要按下該圖標,然后向工具欄右邊輕微拖動,再次運行就可以看到分隔欄。
三 MFC自帶工具欄的創建過程:
MainFrame.h中定義了一個受保護的變量:protected CToolBar m_wndToolBar;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("未能創建工具欄\n"); return -1; // 未能創建 }
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); //設置自己的停靠方式
EnableDocking(CBRS_ALIGN_ANY); //CMainFrame的成員 表示接收哪一種停靠方式
DockControlBar(&m_wndToolBar); //實現主工具欄停靠在主框架上
四 參照MFC自帶工具欄創建屬於自己的工具欄
4.1 添加ToolBar資源
4.2 在CMainFrame中添加一個受保護的CToolBar類型的成員變量m_newToolBar
4.3 調用Create函數與主窗體相關聯
if (!m_newToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_newToolBar.LoadToolBar(IDR_NEWTOOLBAR)) { TRACE0("未能創建自定義的工具欄\n"); return -1; // 未能創建 }
m_newToolBar.EnableDocking(CBRS_ALIGN_ANY);
//EnableDocking(CBRS_ALIGN_ANY); 由於這是在現有基礎上新增的,無需再次調用
DockControlBar(&m_newToolBar); //讓它停靠在主窗口上
至此創建出來的工具欄顯示隱藏不正常,按鈕不顯示,顯示一個空白工具框。
void CMainFrame::OnNewtoolbarbtn() { //if (m_newToolBar.IsWindowVisible()) //{ // m_newToolBar.ShowWindow(SW_HIDE); //} //else //{ // m_newToolBar.ShowWindow(SW_SHOW); //} //RecalcLayout(); //由於工具欄隱藏或顯示 會影響到其他工具或窗口的布局,因此需要調用該函數,否則只隱藏了按鈕,工具欄還在 ////當工具欄按鈕處於浮動狀態時,如果單擊該按鈕,按鈕隱藏了,但是工具欄沒有隱藏。 ////因此需要再次調用DockControlBar(&m_newToolBar); //DockControlBar(&m_newToolBar); ////浮動狀態時,隱藏之后,再顯示的時候,它會出現在頂部位置,而不是原來的位置 ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);//一個函數代替上面多行代碼,且能正常隱藏和顯示 }
void CMainFrame::OnUpdateNewtoolbarbtn(CCmdUI *pCmdUI) //UPDATE_COMMAND_UI 類型的消息 { pCmdUI->SetCheck(m_newToolBar.IsWindowVisible()); //設置復選標記 }
