读者您好:
很感谢您对我们产品的支持。
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还可以将按钮替换为其他控件。