gpt4 book ai didi

c++ - 如何在已添加到上下文菜单末尾的项目上包含位图?

转载 作者:行者123 更新时间:2023-11-30 03:11:18 24 4
gpt4 key购买 nike

我目前正在编写 Windows 资源管理器外壳扩展。到目前为止一切正常,但我无法在上下文菜单的末尾插入带有 MenuItemBitmaps 的菜单项。

这是我在没有位图的情况下使用的代码:

HRESULT CSimpleShlExt::QueryContextMenu(HMENU hmenu, UINT /*uMenuIndex*/, UINT uidFirstCmd, UINT /*uidLastCmd*/, UINT uFlags)
{
InsertMenu(hmenu, -1, MF_SEPARATOR, uidFirstCmd++, _T(""));
InsertMenu(hmenu, -1, MF_STRING | MF_BYPOSITION, uidFirstCmd++, _T("SimpleShlExt Test Item"));
InsertMenu(hmenu, -1, MF_STRING | MF_BYPOSITION, uidFirstCmd++, _T("SimpleShlExt Test Item 2"));
return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 3); // 3 because we do have three menu items!!!
}

这段代码可以满足我的要求。当我在 Windows 资源管理器中右键单击时,它会在上下文菜单的末尾添加一个分隔符和两个菜单项。

我还可以使用以下代码向这些菜单项添加位图:

HRESULT CSimpleShlExt::QueryContextMenu(HMENU hmenu, UINT uMenuIndex, UINT uidFirstCmd, UINT /*uidLastCmd*/, UINT uFlags)
{
// load the bitmap from the resource
HBITMAP hBitmap = (HBITMAP)LoadImage((HMODULE)_AtlBaseModule.m_hInst,
MAKEINTRESOURCE(IDB_BITMAP), IMAGE_BITMAP, 16, 16, 0);
InsertMenu(hmenu, uMenuIndex++, MF_SEPARATOR, uidFirstCmd++, _T(""));
InsertMenu(hmenu, uMenuIndex++, MF_STRING | MF_BYPOSITION, uidFirstCmd++, _T("SimpleShlExt Test Item"));
SetMenuItemBitmaps(hmenu, uMenuIndex - 1, MF_BITMAP | MF_BYPOSITION, hBitmap, hBitmap);
InsertMenu(hmenu, uMenuIndex++, MF_STRING | MF_BYPOSITION, uidFirstCmd++, _T("SimpleShlExt Test Item 2"));
SetMenuItemBitmaps(hmenu, uMenuIndex - 1, MF_BITMAP | MF_BYPOSITION, hBitmap, hBitmap);
return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 3); // 3 because we do have three menu items!!!
}

但现在菜单项被放置在上下文菜单的中间某处,而不是末尾。简单地设置 -1 而不是 uMenuInde​​x 是行不通的。菜单项确实放在最后但未显示位图。

有什么想法吗?

最佳答案

SetMenuItemBitmaps 的文档没有像 InsertMenu 那样接受 -1 作为有效位置。您知道已添加项目的命令 ID,并且知道它们是唯一的,因此按命令而不是按位置添加位图。

InsertMenu(hmenu, -1, MF_STRING | MF_BYPOSITION, uidFirstCmd, _T("SimpleShlExt Test Item"));
SetMenuItemBitmaps(hmenu, uidFirstCmd, MF_BITMAP | MF_BYCOMMAND, hBitmap, hBitmap);
++uidFirstCmd;

您忽略了菜单主持人给您的关于菜单项放置位置的说明。到目前为止,您看到成功的唯一原因是菜单主持人在您添加了您的项目后没有添加任何其他项目,并且所有其他菜单扩展都遵守规则并在他们被告知的地方添加了他们的项目。如果他们决定像您一样无视规则,那么他们可能会在最后结束而不是您的。

关于c++ - 如何在已添加到上下文菜单末尾的项目上包含位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2369802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com