VS2015 MFC 工具欄編程


一 一般地,工具欄是菜單欄中菜單命令的圖標按鈕形式。

二 工具欄刪除 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()); //設置復選標記
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM