MFC CMFCToolBar静态工具栏和动态工具栏,加载自定义图片(真彩透明)

现在把我最新研究的对CMFCToolBar心得写在这边。

现在介绍两种加载工具栏的方式:

一种是静态加载工具栏,跟普通的加载工具栏一样,只是用了自定义图片。

一种是动态加载工具栏,这个也是需要静态工具的帮忙,这个的话原因还没有研究,但可以达到动态的效果。

 

还有特别需要介绍的是增加透明工具栏图片的方法。不知道一篇文章写这么多好不好。就算是分享学习了。

 

1、增加透明工具栏按钮图片。

1)获取一张需要插入工具栏的位图bmp;

2)用Adobe Photoshop CS3进行打开(就是图像处理工具,一般都可以)。

3)点击箭头,然后全选图片。

 

4)全选图片,进行拷贝。

5)双击右下角通道。

6)点击新建通道

7)黏贴刚刚复制的图片

 

8)区域选择,用魔棒把图标的外围选中,并填充外围颜色为黑色。

9)点击菜单中选择,点击反向,然后剪切。

10)另存图片。透明图标就做好了。

11)演示图标

这样就不会出现白色底了,透明图标。这图片大小会比普通图片大,因为加了通道。

 

2)CMFCToolBar 加载静态工具栏

1)、设置工具栏按钮数和按钮大小,以上图片是32像素,即宽度和高度设置成32*32

2)、声明成员变量

CMFCToolBar m_toolBar;

3)、加载代码

 

	//加载真彩图片工具栏 方式1.
	m_toolBar.CreateEx(this, TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC);
	m_toolBar.LoadToolBar(IDR_MY_TOOLBAR, 0, 0, TRUE, 0, 0, IDB_TOOL_FIRST_BMP);
	m_toolBar.SetRouteCommandsViaFrame(FALSE);//设置消息以对话框方式传递
	
	//根据对话框大小调整工具栏 包含无菜单位置
	CRect rect;
	GetClientRect(rect);
	if (m_toolBar.GetSafeHwnd() != NULL)
	{
		int cyTlb = m_toolBar.CalcFixedLayout(FALSE, TRUE).cy;

		m_toolBar.SetWindowPos(NULL, rect.left, rect.top+2, rect.Width(), 
			cyTlb, SWP_NOACTIVATE | SWP_NOZORDER);
	}
	//m_toolBar.AdjustSizeImmediate();//根据按钮大小调整工具栏

4)、成果如上图所示。

 

2、CMFCToolBar 动态工具栏

这个设置可变按钮个数工具栏

也要用到静态设置的工具栏长度大小。

1)、设置工具栏按钮大小和工具栏按钮个数,按钮个数为最大工具栏按钮个数。每个按钮id为自定义,因为这个工具资源可重复利用

动态设置按钮的ID跟这静态设置按钮的ID无关,后面会根据动态ID进行消息发放。可以设置一个按钮,用于管理工具栏资源。

3)、声明成员变量

CMFCToolBar m_toolBar;

4)、加载代码

 

m_toolBar.CreateEx(this, TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC);

	m_toolBar.AddToolBarForImageCollection(IDR_EXT_MY_TOOLBAR, IDB_EXIT_BMP);

	m_toolBar.SetSizes(CSize(32,32), CSize(32,32));//设置按钮大小
	m_mfcToolbarImage.SetImageSize(CSize(32, 32), TRUE);

	CBitmap bmp;
	bmp.LoadBitmap(IDB_EXIT_BMP);
	m_mfcToolbarImage.AddImage(bmp);

	bmp.DeleteObject();
	bmp.LoadBitmap(IDB_EDIT_ADD_BMP);
	m_mfcToolbarImage.AddImage(bmp);

	int aa = m_toolBar.SetUserImages(&m_mfcToolbarImage);

	//m_toolBar.image
	m_toolBar.InsertButton(CMFCToolBarButton(ID_FILE_NEW , 0,  "这是提示?", TRUE, 0));// 在这里CMFCToolBarButton()第四个参数需要设置为true,这样在重绘的时候才会,调用自己设置的图像。  
	m_toolBar.InsertButton(CMFCToolBarButton(ID_FILE_OPEN , 1,  "这是提示1?", TRUE, 0));

	m_toolBar.AdjustSizeImmediate();//根据按钮大小调整工具栏

5)效果图

 

 

大概写完了,以后会更新的。

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答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设置背景颜色,让界面变得更加美观。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值