MFC 对话框 添加 工具栏
MFC 對話框 添加 工具欄
Toolbar
MFC中如何刪除工具欄中多余的圖標
剛學習MFC的時候,發現在MFC資源視圖里面編輯工具欄的時候,多余的圖標沒有刪除鍵,其實只要把你要刪除的圖標按住并往外拖就可以了。
工具欄資源的最右邊總是會有一個待編輯的按鈕,我們對其進行編輯后,工具欄資源會自動增加一個新的空白按鈕,這也實現了按鈕的添加操作。如果我們想要刪除某個按鈕,就可以用鼠標左鍵點住它,拖出工具欄資源的范圍即可。
刪除分割線
可以用鼠標左鍵拖住右邊的按鈕往左移動到快覆蓋左邊的按鈕的時候松開就可以了。
如果 按鈕 之間 有分割線 ,分割線 也會占用一個index 序號, 就是 本來 0123456 現在是01234567
通過Toolbar 添加 ID
如果 事件處理函數 已經定義了,建立關聯 需要手動添加關聯
如果 事件處理函數 沒有定義,建立關聯 可以通過類向導
這個圖中代碼 有點問題.
VC 自動生成的ID 不一定正好是按照順序的
看下面的例子
Resource.h VC 自動生成的,每次重新編譯 都會自動生成
廣州大學MFC實驗報告——學生成績管理系統
https://blog.csdn.net/weixin_43999137/article/details/91184179
https://github.com/wujiekd/MFC-student-performance-management-system
VS2013/MFC編程入門之三十四(工具欄:工具欄資源及CToolBar類)
https://blog.csdn.net/zhaoyinhui0802/article/details/53471257
上一節中講了菜單及CMenu類的使用,這一節講與菜單有密切聯系的工具欄。
工具欄簡介工具欄一般位于主框架窗口的上部,菜單欄的下方,由一些帶圖片的按鈕組成。當用戶用鼠標單擊工具欄上某個按鈕時,程序會執行相應的操作,如果鼠標沒有點擊,只是停留在某個按鈕上一會后,會彈出一個小窗口顯示提示信息。一般工具欄中的按鈕在菜單欄中都有對應的菜單項中,即點擊工具欄按鈕與點擊菜單項的效果相同。但工具欄中的按鈕都顯式的排列出來,操作很方便,而且按鈕上的圖片描述功能更直觀,所以工具欄作為用戶操作接口來說比菜單更加便捷。VS2013工具欄資源詳解本節仍然以VS2013/MFC編程入門之三十二(菜單:VS2010菜單資源詳解)中創建的單文檔工程Example32為基礎,講解工具欄資源。在Example32工程中,打開資源視圖,展開Example32->Example32.rc->Toolbar,我們可以看到有一個ID為IDR_MAINFRAME的工具欄資源,雙擊打開,工具欄資源顯示如下:
以IDR_MAINFRAME工具欄的第一個按鈕為例說明工具欄按鈕的各項屬性。用鼠標單擊工具欄資源上的第一個按鈕,屬性頁中就會顯示其屬性。下面分別講解各項屬性。
工具欄的使用
一般情況下工具欄中的按鈕在菜單欄中都有對應的菜單項,兩者實現的功能相同,要想實現這種效果,只需要將工具欄按鈕的ID與對應的菜單欄中菜單項的ID設置為相同值即可。在實際使用工具欄時,除了前面講的資源編輯外,其他使用與菜單類似。例如,對COMMAND消息和UPDATE_COMMAND_UI消息,可以像VS2013/MFC編程入門之三十三(菜單:菜單及CMenu類的使用)中的菜單應用實例那樣為工具欄按鈕添加消息處理函數。如果工具欄按鈕對應的菜單項已經添加了消息處理函數,那么就不必再為它添加了,因為它的ID與菜單項相同,所以會調用同樣的消息處理函數。這樣點擊工具欄按鈕與點擊相應菜單項執行相同的功能,在菜單項為選中、激活或禁用等狀態時,工具欄按鈕會有一樣的狀態。工具欄的創建大家在第三十二講創建的Example32工程的CMainFrame類中看到,它創建工具欄所使用的類并不是常用的CToolBar類,而是CMFCToolBar類。CMFCToolBar類是自VS2008以來MFC提供的類,它與CToolBar類有些類似,但功能更豐富。這里要注意,CMFCToolBar類與CToolBar類并沒有任何派生關系。本教程就以CMFCToolBar類來講講工具欄的創建步驟:1. 創建工具欄資源。2. 構造CMFCToolBar類的對象。3. 調用CMFCToolBar類的Create或CreateEx成員函數創建工具欄。4. 調用LoadToolBar成員函數加載工具欄資源。大家可以對應著看看Example32的CMainFrame類自動生成的代碼中創建工具欄的過程。工具欄IDR_MAINFRAME的資源已經自動創建好。在MainFrm.h文件對CMainFrame類的聲明中,定義了CMFCToolBar類的對象作為成員對象:CMFCToolBar m_wndToolBar;。然后在CMainFrame::OnCreate函數的實現中可以看到工具欄的創建以及加載工具欄資源的代碼,如下: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWndEx::OnCreate(lpCreateStruct) == -1) return -1; ......略 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(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME)) { TRACE0("未能創建工具欄\n"); return -1; // 未能創建 }......略 return 0; }因為創建框架窗口時需要調OnCreate函數,所以工具欄的創建也是在OnCreate中完成的。
工具欄的停靠在創建好工具欄后,如果想要停靠工具欄,也需要添加相應的停靠代碼。工具欄停靠的步驟及需要調用的函數如下(前兩個步驟可以顛倒順序):1. 在框架窗口中啟用停靠。若要將工具欄停靠到某個框架窗口,則必須啟用該框架窗口(或目標)以允許停靠。可以在CFrameWndEx類中調用下面的成員函數來實現:BOOL EnableDocking(DWORD dwDockStyle);該函數采用一個DWORD參數,用來指定框架窗口的哪個邊可以接受停靠,可以有四種取值:CBRS_ALIGN_TOP(頂部)、CBRS_ALIGN_BOTTOM(底部)、CBRS_ALIGN_LEFT(左側)、CBRS_ALIGN_RIGHT(右側)。如果希望能夠將控制條停靠在任意位置,將CBRS_ALIGN_ANY作為參數傳遞給EnableDocking。2. 工具欄啟用停靠。框架窗口啟用停靠準備好后,必須以相似的方式準備工具欄。為想要停靠的每一個工具欄CMFCToolBar對象調用下面的函數:virtual void EnableDocking(DWORD dwAlignment);允許工具欄停靠到框架窗口,并指定工具欄應停靠的目標邊。此函數指定的目標邊必須與框架窗口中啟用停靠的邊匹配,否則工具欄無法停靠,為浮動狀態。3. 停靠工具欄。當用戶試圖將工具欄放置在允許停靠的框架窗口某一邊時,需要框架CFrameWndEx類調用以下函數:void DockPane(CBasePane* pBar,UINT nDockBarID=0,LPCRECT lpRect=NULL);參數pBar為要停靠的控制條的指針,參數nDockBarID為要停靠的框架窗口某條邊的ID,可以是以下四種取值:AFX_IDW_DOCKBAR_TOP、AFX_IDW_DOCKBAR_BOTTOM、AFX_IDW_DOCKBAR_LEFT、AFX_IDW_DOCKBAR_RIGHT。下面我們接著看Example32的CMainFrame類的OnCreate函數實現中,工具欄的停靠過程: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWndEx::OnCreate(lpCreateStruct) == -1) return -1; ......略 // 調用CreateEx函數創建工具欄,并調用LoadToolBar函數加載工具欄資源 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(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } ......略 // TODO: 如果您不希望工具欄和菜單欄可停靠,請刪除這五行 m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndMenuBar); DockPane(&m_wndToolBar);......略 return 0; }關于工具欄的知識就講到這里了,最近由于要準備期末考試,每天更新的內容比較少,希望大家諒解,謝謝。。感謝大家長期以來的支持。
工具欄 例子 代碼 vs2017
https://download.csdn.net/download/wowocpp/33353202
總結
以上是生活随笔為你收集整理的MFC 对话框 添加 工具栏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 那么如何成为优秀的机械工程师,如何提升自
- 下一篇: Win_Server_2003-2016