C++ 正在调用IContextMenu::QueryContextMenu,但IContextMenu::InvokeCommand不';T

C++ 正在调用IContextMenu::QueryContextMenu,但IContextMenu::InvokeCommand不';T,c++,windows,com,atl,com-server,C++,Windows,Com,Atl,Com Server,在我的COM服务器实现中,调用了GET(可以通过日志查看),但没有。这是QueryContextMenu: HRESULT ContexMenuImp::QueryContextMenu(HMENU hmenu,UINT indexMenu,UINT idCmdFirst, UINT idCmdLast,UINT uFlags) { if (uFlags & CMF_DEFAULTONLY) { // shouldn't handle this situa

在我的COM服务器实现中,调用了GET(可以通过日志查看),但没有。这是
QueryContextMenu

HRESULT ContexMenuImp::QueryContextMenu(HMENU hmenu,UINT indexMenu,UINT idCmdFirst,
    UINT idCmdLast,UINT uFlags)
{
    if (uFlags & CMF_DEFAULTONLY) {
        // shouldn't handle this situation:
        LOG("IContextMenu::QueryContextMenu:    (...,CMF_DEFAULTONLY)");
        return MAKE_HRESULT(SEVERITY_SUCCESS,FACILITY_NULL,0);
    }else if (InsertMenuItem(hmenu,indexMenu,TRUE,&globals.menuItemInfo) == FALSE){
        // error occurred:
        LOG("IContextMenu::QueryContextMenu:    Error: %d",GetLastError());
        return MAKE_HRESULT(SEVERITY_SUCCESS,FACILITY_NULL,0);
    } else{
        // the desired situation: add item to the menu:
        LOG("IContextMenu::QueryContextMenu(hMenu,indexMenu:%u,idCmdFirst:%u,idCmdLast:%u,0x%x):    All set...",
            indexMenu,idCmdFirst,idCmdLast,uFlags);
        return MAKE_HRESULT(SEVERITY_SUCCESS,FACILITY_NULL,1/*handle only a single item*/);
    }
}

你知道为什么吗?

当你插入菜单时,你忘了首先遵守
idcmd

globals.menuItemInfo.wID = idCmdFirst;
globals.menuItemInfo.fMask |= MIIM_ID;
(所以我是对的:你用错误的ID添加了菜单项。)


请注意,由于每个上下文菜单可能具有不同的ID,因此不应使用全局ID。

插入菜单时,您忘记遵守
idCmdFirst

globals.menuItemInfo.wID = idCmdFirst;
globals.menuItemInfo.fMask |= MIIM_ID;
(所以我是对的:你用错误的ID添加了菜单项。)


请注意,由于每个上下文菜单可能有不同的ID,因此不应使用全局ID。

不知道。你的代码是什么样子的?我的灵力告诉我你返回了S_OK而不是所需的MAKE_HRESULT,或者你用错误的ID添加了菜单项。@DavidHeffernan:添加了代码。@RaymondChen:这里的错误直觉:-)会很高兴再尝试一次。不知道。你的代码是什么样子的?我的灵力告诉我,你返回了S______HRESULT,而不是所需的MAKE___HRESULT,或者你用错误的ID添加了菜单项。@DavidHeffernan:添加了代码。@RaymondChen:这里的错误直觉:-)会很高兴再尝试一下。我错过了那个位置。。我在此承认你的通灵能力;-)我错过了那个位置。。我在此承认你的通灵能力;-)