MFC:用什么方法设置工具栏按钮默认为全部工具栏按钮的子集?

MFC: What method is used to set the toolbar buttons to be a subset of the total toolbar buttons by default?

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

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

If possible, how is that done with CMFCToolBar?

您可以在程序的资源脚本中定义任意数量的 'dummy' 工具栏资源,如下例所示,其中 ID_DUMMY1 是 toolbar/bitmap 资源 ID(必须 对资源编译器 C++ 编译器可用)和三个 ID_COMMAND_x ID 定义图像对应的菜单命令:

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
}

然后,在您的程序中(通常是在您初始化主框架 window 之后),您可以调用 [=14= 的 static 成员] class、AddToolBarForImageCollection 从那些虚拟工具栏加载图像。以下将在 above-defined 资源中加载这些图像:

    CMFCToolBar::AddToolBarForImageCollection(ID_DUMMY1, ID_DUMMY1);

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


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