1. 程式人生 > >MFC單文件生成多個CMFCToolbar時需要解決的問題

MFC單文件生成多個CMFCToolbar時需要解決的問題

1. 單文件預設生成的工具欄只有一個,但很多時候我們需要新增多個工具欄,比如:


m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndFileToolBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndCalibrateToolBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndDrawToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndMenuBar);
DockPane(&m_wndFileToolBar);
DockPane(&m_wndCalibrateToolBar);
DockPane(&m_wndDrawToolBar);

這不是我們想要的樣子,我們希望能把這三個工具欄並排在一起這樣可以節省很多空間,比如:


這時候我們需要改變下程式碼

EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndMenuBar);
DockPane(&m_wndDrawToolBar);
DockPaneLeftOf(&m_wndCalibrateToolBar, &m_wndDrawToolBar);
DockPaneLeftOf(&m_wndFileToolBar, &m_wndCalibrateToolBar);

先讓最後一個繪圖工具欄DockPane(&m_wndDrawToolBar);然後我們呼叫函式DockPaneLeftOf()依次往m_wndDrawToolBar的左邊停靠


2.  系統預設生成的工具欄只有一個,所以檔案選單裡的檢視->工具欄和停靠視窗 的子選單也只有系統預設生成的一個選單項,就算我們的所有工具欄都顯示上去了但是系統不會自動給我們新增到子選單項,比如:


這時候就需要我們在建立工具欄時做處理:




看到有什麼不同了嗎,沒錯就是給他們加上一個ID,否則的話三個工具欄都是使用相同的ID所以顯示不出來,因為三個相同的ID都佔用了同一個子選單項,看看修改後的樣子:



3. 如果你覺得不需要 檔案選單裡的檢視->工具欄和停靠視窗 的子選單裡的 自定義... 項可以把

EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR);

改為

EnablePaneMenu(TRUE, 0, strCustomize, ID_VIEW_TOOLBAR);