В настоящее время я пишу расширение оболочки проводника 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
вместо uMenuIndex
не работает. Элементы меню действительно размещаются в конце, но растровые изображения не отображаются.
Любые идеи?
Как правило, вы не можете контролировать, где будут размещаться ваши предметы. Могут быть другие расширения контекстного меню, которые добавляют элементы LATER, чем ваш код. – Kerido