从VC2008的SP1开始,新加入了很多MFC控件,其界面效果虽然比不上WPF,但与之前的控件相比,也已经是飞越了。无奈目前大家对它的研究还是比较少,虽然自带了一些示例程序,仍然不能满足开发的方方面面。貌似C++的高手更喜欢旧版的MFC控件,这也难怪,新版的控件效果,用旧版的也能实现,只是有些麻烦,也可能高手们都不用MFC吧。我是刚从.net转入C++的新兵,用惯了framework提供的简单控件,再用这MFC,别提多别扭了,唉,没办法,工作嘛。
好了,言归正传,这段时间用C++开发应用,使用了最新的VS2010,向导自动生成的MFC框架里便自动应用了新版MFC控件,想实现大尺寸+24位真彩色的工具栏,从网上查到的多是使用CToolbarCtrl实现,在经过了几天的沉淀后,终于找到了一条捷径(估计是目前比较简单就能实现这个功能的方法了),知识碎片都是从网上获得的,成果也应跟大家分享。
第一步:准备图片
不知道大家是如何制作工具栏图片的,我使用的方法是,使用Photoshop将几个32×32的图标横向排成一排,图标之间不需要留间隙,确保背景是透明的,然后保存成png文件。为了让VS能够把该图片做为资源导入,需要转为bmp文件:用画图程序打开png文件,另存为24位位图文件。最后,把bmp文件拷贝到项目的res文件夹中,接下来就可以导入资源了,这里假设导入的资源ID为IDB_BITMAP1(这也是默认的图片资源ID),因为下面会用到。
第二步:修改工具栏按钮大小
这个最简单,只需要选中按钮,在属性栏中输入需要的尺寸即可,尺寸要与图标大小相同,这里是32×32。然后根据需要创建按钮、设置按钮的ID。
(附:工具栏上会一直有一个按钮,你修改它,就又会跑出来一个新的,这也就是创建按钮的操作;删除按钮的方法是:将按钮拖离工具栏,用Delete键不管用,Delete只是删除了按钮上的图像;插入分隔符的方法也很简单:横向右拖动按钮一定距离,就会插入分隔符,反方向再拖一下,就删除分隔符了)
第三步:修改工具栏创建代码
在MainFrame.cpp的OnCreate函数中找到下面的代码:
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
将其改为:
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME_256, 0, 0, TRUE, 0, 0, IDB_BITMAP1))
好了,这三步做完,如果中间没出现什么差错,运行程序应该可以看到效果了,祝大家好运!