现在把我最新研究的对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)效果图
大概写完了,以后会更新的。