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