MFC加入了新窗口元素:窗格。嶄新的工具欄和狀態欄都是一種窗格。
一、窗格
窗格是MFC在2008年新加入的,它由類CPane和其基類CBasePane實現。窗格就是用來在主框架窗口上佔據邊框位置的窗口,例如工具欄和狀態欄。
CBasePane實現了窗格的基本功能和屬性:停靠、浮動以及基本的窗口消息處理。CPane在CBasePane的基礎上,實現了抓取的功能,可以用鼠標把窗格從停靠狀態變爲浮動狀態。只要你的窗口從CPane派生,就能具有這樣的功能。CBasePane和CPane提供了非常多的虛函數,派生類需要考慮自己如何去重寫或實現。
二、工具欄
MFC的新工具欄是一個窗格。工具欄由CMFCToolBar實現。CMFCToolBar的基類是CMFCBaseToolBar,而CMFCBaseToolBar的又是從CPane派生的。CMFCToolBar和CToolBar沒有任何關係,它不是用Win32的窗口類TOOLBARCLASSNAME創建的,也不是TOOLBARCLASSNAME的超類,所以不能向CMFCToolBar發送和公共控件特有的Windows消息。CMFCToolBar的所有功能,包括按鈕的顯示已經按鈕事件的產生都是CMFCToolBar自己實現的。
CMFCToolBarButton實現工具按鈕,它類似於Win32的TBBUTTON和TBBUTTONINFO,有類似的數據成員。CMFCToolBar在使用習慣上和CToolBar是類似的,它有一些和CToolBar類似的函數:
LoadBitmap、LoadToolBar、LoadBitmapEx、LoadToolBarEx從資源中讀取工具欄;
SetButtons、InsertButton、InsertSeparator、ReplaceButton、RemoveButton、RemoveAllButtons修改工具欄上的按鈕;
三、菜單欄
菜單欄是用工具欄實現的,菜單按鈕也就是工具按鈕嘛。MFC實現菜單欄的類是CMFCMenuBar。
函數CreateFromMenu從HEMNU中創建菜單欄;
函數GetMenuItem獲取菜單項。
四、狀態欄
MFC的新狀態欄也是一個窗格,它是由CMFCStatusBar實現的。CMFCStatusBar從CPane派生。CMFCStatusBar和CStatusBar沒有任何關係,它不是用Win32的窗口類STATUSCLASSNAME創建,也不是STATUSCLASSNAME的超類,所以不能向CMFCStatusBar發送和公共控件特有的Windows消息。CMFCStatusBar的所有功能自己實現的。
類CMFCStatusBarPaneInfo保存狀態欄窗格的信息,但主要在CMFCStatusBar內部使用。CMFCStatusBar提供了類似於CStatusBar的函數:
SetIndicators:從資源中讀取狀態欄;
CommandToIndex:從窗格的命令ID查詢序號;
GetItemID、GetItemRect、GetPaneText、GetPaneInfo等等都和CStatusBar的含義是一樣的。
五、REBAR
MFC用CMFCReBar替代了原來的CReBar,它也是一個窗格,從CPane派生。CRebar是用Win32的窗口類REBARCLASSNAME創建,因而可以在CMFCReBar中使用Win32中有關REBAR的宏和消息。
GetReBarCtrl:在REBAR創建後,可以獲取CReBarCtrl控件對象,並操縱REBAR控件;
AddBar:增加一個band;
SetPaneAlignment:設置bands在REBAR中的對齊方式
文章出處:DIY部落(http://www.diybl.com/course/3_program/c++/cppsl/2008825/137415.html)