none
IContextMenu:QueryContextMenu() После добавления пункта меню, некоторые пункты не отображаются. RRS feed

  • Вопрос

  • Доброго времени суток! Подскажите пожалуйста.

    Возникла необходимость внедрить свой пункт в контекстное меню каталога. Для этого мной был создан COM-объект, в котором реализован интерфейс IContextMenu. После регистрации объекта в системе пункт меню появился, все работает отлично. Но вот проблема: из меню пропали пункты "первого блока" (Open, Explore, Search, и т.д.). Также, некоторые оставшиеся пункты меню перестали работать (они есть в меню, но при клике на них ничего не происходит).

    P.S.: Выложить код, к сожалению, не имею возможности. При написании кода пользовался этой статьей - http://www.theserverside.net/tt/articles/showarticle.tss?id=ShellExtensions#figure3

    • Изменено DimPsu 20 октября 2011 г. 10:53
    20 октября 2011 г. 10:51

Ответы

  • Проблему решил! Все дело оказалось в возвращаемом значении функции QueryContextMenu(). Если оно некорректно, то с контекстным меню происходят чудесные вещи :) В общем, все должно выглядеть так: Return value Type: HRESULT If successful, returns an HRESULT value that has its severity value set to SEVERITY_SUCCESS and its code value set to the offset of the largest command identifier that was assigned, plus one. For example, if idCmdFirst is set to 5 and you add three items to the menu with command identifiers of 5, 7, and 8, the return value should be MAKE_HRESULT(SEVERITY_SUCCESS, 0, 8 - 5 + 1). Otherwise, it returns a COM error value. (Взято из MSDN)
    • Изменено DimPsu 21 октября 2011 г. 8:07
    • Помечено в качестве ответа Abolmasov Dmitry 21 октября 2011 г. 9:13
    21 октября 2011 г. 8:06