如何在我的VS08的环境里实现 带图标的工具栏的功能?
发表在C语言图书答疑 2011-03-10
是否精华
版块置顶:
你好, 我在学习VC++程序开发范例宝典 中的第一章:实例009 带图标的工具栏 16, 我的环境是VS2008, 也装了SP1的补丁, 在我的环境里不能实现这个带图标的工具栏, 原因是VS08里不是用CToolBarCtrl, 而是用CMFCToolBar, 我怎么才能在我的环境里实现 带图标的工具栏 这个程序功能呢?  请老师指点,
分享到:
精彩评论 1
蜡笔小新
学分:0 LV1
TA的每日心情
无聊
2023-02-13 19:27:34
2011-03-10
沙发
读者您好:
 很感谢您对我们产品的支持。
CMFCToolBar可以让用户自定义工具栏图标,使用静态成员函数SetUserImages()将一个CMFCToolBarImages对象设置进去,由所有CMFCToolBar对象共享。Wizard自动生成代码中有这样的例子:
 1     if (CMFCToolBar::GetUserImages() == NULL)
 2     {
 3         // load user-defined toolbar images
 4         if (m_UserImages.Load(_T(".\\UserImages.bmp")))
 5         {
 6             m_UserImages.SetImageSize(CSize(16, 16), FALSE);
 7             CMFCToolBar::SetSizes(CSize(16,16), CSize(16,16));
 8             CMFCToolBar::SetUserImages(&m_UserImages);
 9         }
10     }
这个例子加载了工程路径下的一个BMP,其他方法可以查看MSDN,与CImageList有点点类似。
使用CMFCToolBar::ReplaceButton()可以替换已有的工具栏按钮,以下是我的Demo中的代码:
1     m_mybar.ReplaceButton( ID_QTLOGO, CMFCToolBarButton(ID_QTLOGO, 0, _T("123"), TRUE) );
第一个参数ID_QTLOGO为自定义工具栏上的一个按钮,后面是一个CMFCToolBarButton的临时对象。CMFCToolBarButton构造函数第一个参数为替换后的ID,第三个参数为名称,第二个参数为图标的索引(zero-based),第四个参数为m_bUserButton,指明第二个参数是索引工具栏已加载图标(LoadToolBar或LoadBitmap)还是用户自定义图标(SetuserImages),TRUE指用户自定义图标。这里的结果是将ID_QTLOGO上的图标替换为UserImages.bmp上的第一个图标。

GetCmdMgr()->GetCmdImage()可以根据工具栏上图标的ID获取出已加载图标的索引值:
1     m_mybar.ReplaceButton( ID_QTLOGO, CMFCToolBarButton(ID_QTLOGO, GetCmdMgr()->GetCmdImage(ID_PLUS), _T("123")) );
这里将工具栏上ID_QTLOGO的图标替换为ID_PLUS按钮对应的图标。

特别地,如果在你将这些工具栏改来改去但显示结果却没有改变的时候,你可以尝试删除 HKEY_CURRENT_USER\Software\Local AppWizard-Generated Applications\$(你的程序名) 这个键值,当你重启程序后工具栏应该会按你的预想变化的。这是我在查资料时看到的,当时没注意但后来发现挺有用的,出处没有记录下来。

最后,ReplaceButton还可以将按钮替换为其他控件。
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照