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那些事

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