C++-MFC(12)-CMFCToolbar-CMFCToolBarImages

工具欄,默認創建時,VC6.0是CToolbar ,但從VS某個版本(網上說VS2008SP1,筆者並未考證)開始就是CMFCToolbar了。
兩者用法上區別還是蠻大的。本文給出一個基本用法。
1.創建一個工具條ID資源,IDR_TOOLBAR1 
2.m_mfcToolbarImage 設置SetImageSize 大小
3.把m_ToolbarImageNew顯示在m_ToolBarNew上
4.插入按鈕
5.添加映射消息

上代碼,筆者親測有效。

CMFCToolBar m_ToolBarNew;
CMFCToolBarImages m_ToolbarImageNew;

//1.創建一個工具條ID資源,IDR_TOOLBAR1 
m_ToolBarnew.CreateEx(this, TBSTYLE_FLAT, dwStyle, CRect(1, 1, 1, 1), 1000);
m_ToolBarnew.AddToolBarForImageCollection(IDR_TOOLBAR1, IDB_BITMAP1);//可有可無
CString name;
bNameValid = name.LoadString(IDS_MyToolBar);
ASSERT(bNameValid);
m_ToolBarNew.SetWindowText(name);//給工具條命名
m_ToolBarNew.SetSizes(CSize(23, 22), CSize(16, 15));//設置大小(按鈕和圖片)

//2.m_mfcToolbarImage 設置SetImageSize 大小
m_mfcToolbarImage.SetImageSize(CSize(16, 15), TRUE);//默認圖片大小
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1);                        //裝載資源欄中的Bitmap
m_mfcToolbarImage.AddImage(bmp);
bmp.DeleteObject();
//3.把m_ToolbarImageNew顯示在m_ToolBarNew上
int aa = m_myToolBar.SetUserImages(&m_mfcToolbarImage);
m_myToolBar.RemoveAllButtons();

// 4.插入按鈕:按鈕id,index,text,TRUE表示重繪.
//ID_BUTTON1是需要實現
m_ToolBarNew.InsertButton(CMFCToolBarButton(ID_BUTTON1, 0, _T("提示?"), TRUE, 0));
...
m_ToolBarNew.AdjustSizeImmediate();

//5.添加映射消息
afx_msg void OnToolButtonCmd(UINT id); //按鈕觸發函數

void CMainFrame::OnToolButtonCmd(UINT id)
{
 
}
 //響應ID_BUTTON1-ID_BUTTON20的消息
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
        ON_COMMAND_RANGE(ID_BUTTON1, ID_BUTTON20, &OnToolButtonCmd)
END_MESSAGE_MAP()

2.注意點:
  2.1 m_ToolBarNew 和m_ToolbarImageNew 都有圖片大小的設置,setsize()。設置不當會出各種錯。如果發現圖片顯示異常,從大小入手.
2.2setsize()值爲像素值。bitmap存儲默認爲4通道,32位,64位,等顯示不同。bitmap默認函數中存的都是4的倍數

2.3.CMFCToolBarImages 有個函數是count(),
     如果你設置的m_mfcToolbarImage的值爲16,//   m_mfcToolbarImage.SetImageSize(CSize(16, 15), TRUE);,
     但是加載的Bitmap                       的值是   48     //m_mfcToolbarImage.AddImage(bmp);
     雖然你只AddImage一次,但是m_mfcToolbarImage認爲你加了3張圖片(48/16)
有篇值得借鑑 CMFCToolBar那些事

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章