首页 > 解决方案 > MFC:默认情况下使用什么方法将工具栏按钮设置为全部工具栏按钮的子集?

问题描述

我想将所有内容添加menu items到其中,toolbar但默认情况下只显示其中的一个子集(无需用户自定义)。这样,所有菜单项旁边都会有图标,但工具栏不会包含很少使用的项目,除非用户添加它们。

如果可能的话,那是怎么做的CMFCToolBar

标签: visual-c++mfccmfctoolbar

解决方案


如果可能的话,CMFCToolBar 是如何做到的?

您可以在程序的资源脚本中定义任意数量的“虚拟”工具栏资源,如下例所示,ID_DUMMY1工具栏/位图资源 ID 在哪里(资源编译器和C++ 编译器都必须可用),三个ID 定义图像对应的菜单命令:ID_COMMAND_x

ID_DUMMY1 BITMAP   L"DummyToolbar.bmp" // 16 x 48 bitmap for three 'buttons
ID_DUMMY1 TOOLBAR  16, 16
{
    BUTTON    ID_COMMAND_A // Three commands corresponding to the three button
    BUTTON    ID_COMMAND_B // images in the above bitmap
    BUTTON    ID_COMMAND_C
}

然后,在您的程序中(通常,在您初始化主框架窗口之后),您可以调用该类的静态成员,以从那些虚拟工具栏加载图像。以下将在上述定义的资源中加载这些图像:CMFCToolBarAddToolBarForImageCollection

    CMFCToolBar::AddToolBarForImageCollection(ID_DUMMY1, ID_DUMMY1);

在此之后,具有给定命令的每个菜单项都将显示在虚拟工具栏资源中定义的关联图像。您可以根据需要拥有尽可能多的此类工具栏资源,并且只需AddToolBarForImageCollection为每个资源调用。


注意:虽然我对工具栏和位图资源使用了相同的资源 ID,但您也可以使用不同的ID。只要调用中给出的参数得到AddToolBarForImageCollection适当的协调,该方法仍然可以工作。


推荐阅读