天天看点

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

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

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

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

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

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

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

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

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

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

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

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

5)双击右下角通道。

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

6)点击新建通道

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

7)黏贴刚刚复制的图片

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

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

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

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

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

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

11)演示图标

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

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

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进行消息发放。可以设置一个按钮,用于管理工具栏资源。

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

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)效果图

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

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