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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用cmfctoolbar设置背景颜色需要先通过CFrameWnd::GetControlBar 函数获取到cmfctoolbar控件的指针,然后调用SetPaneStyle 函数设置控件的样式。可以通过如下代码实现: CMFCToolBar* pToolBar = NULL; CFrameWnd* pFrameWnd = AfxGetMainWnd(); if (pFrameWnd != NULL) { pToolBar = (CMFCToolBar*)pFrameWnd->GetControlBar(ID_TOOLBAR); } if (pToolBar != NULL) { pToolBar->SetPaneStyle(pToolBar->GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_GRIPPER | CBRS_BORDER_BOTTOM); pToolBar->SetPaneFillColor(RGB(255, 255, 255)); //背景颜色设置为白色 } 此代码获取到主窗口中ID为ID_TOOLBAR的cmfctoolbar控件,然后设置它的样式和背景颜色。SetPaneFillColor 函数用于设置控件的背景颜色,传入的参数为RGB值。可以自由替换RGB值来设置自己喜欢的颜色。 ### 回答2: 在使用CMFCToolBar控件时,我们可以通过以下步骤来设置它的背景颜色: 1. 在工程中添加头文件afxcontrolbars.h。 2. 在创建CMFCToolBar对象之前,设置其颜色属性。例如: CMFCToolBar m_wndToolBar; m_wndToolBar.SetBackgroundColor(RGB(0, 255, 0)); 其中,RGB(0, 255, 0)表示绿色的RGB值。 3. 如果需要在运行时改变背景颜色,我们可以在程序中捕捉WM_PALETTECHANGED消息,并调用CMFCToolBar的Invalidate()方法来更新界面,例如: void CMainFrame::OnPaletteChanged(CWnd* pFocusWnd) { CMDIFrameWnd::OnPaletteChanged(pFocusWnd); if (m_wndToolBar.GetSafeHwnd() != NULL) { // 重新绘制工具栏 m_wndToolBar.Invalidate(); } } 通过以上步骤,我们可以轻松地为CMFCToolBar设置背景颜色,让界面变得更加美观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值