c++ - EnableMenuItem 函数无法使用参数 MF_GRAYED

标签 c++ windows menuitem shell-extensions

创建了一个 ATL COM 项目,通过它我将菜单项插入到右键菜单中,如下所示:

STDMETHODIMP CSimpleShlExt::QueryContextMenu (
                      HMENU hmenu, UINT uMenuIndex, UINT uidFirstCmd,
                      UINT uidLastCmd, UINT uFlags )
{
    gHMenu=hmenu;
    UINT uCmdID = uidFirstCmd;

    // If the flags include CMF_DEFAULTONLY then we shouldn't do anything.

    if ( uFlags & CMF_DEFAULTONLY )
        return MAKE_HRESULT ( SEVERITY_SUCCESS, FACILITY_NULL, 0 );

    InsertMenu ( hmenu, uMenuIndex,  MF_BYPOSITION, uCmdID++, _T("Connect To Server") );
    uMenuIndex++;
    InsertMenu ( hmenu, uMenuIndex, MF_BYPOSITION, uCmdID++,
               _T("DisConnect From Server") );
    return MAKE_HRESULT ( SEVERITY_SUCCESS, FACILITY_NULL, 2 );
}

现在我想在用户单击Connect子菜单时立即禁用它,为此我使用 EnableSubMenuItem ,

STDMETHODIMP CSimpleShlExt::InvokeCommand ( LPCMINVOKECOMMANDINFO pCmdInfo )
{
    // If lpVerb really points to a string, ignore this function call and bail out.
    if ( 0 != HIWORD( pCmdInfo->lpVerb ) )
        return E_INVALIDARG;


    switch ( LOWORD( pCmdInfo->lpVerb) )
        {
        case 0:
            {

            TCHAR szMsg [MAX_PATH + 32];

            wsprintf ( szMsg, _T("The selected file was:\n\n%s"), m_szFile );

            MessageBox ( pCmdInfo->hwnd, "Connected", _T("SimpleShlExt"),
                         MB_ICONINFORMATION );

             //InsertMenu ( hmenu, uMenuIndex, MF_STRING | MF_BYPOSITION, uCmdID++, _T("Connect => NDS") );
            //EnableMenuItem(gHMenu,0,MF_GRAYED);

编辑:

EnableMenuItem(gHMenu,0,MF_DISABLED | MF_GRAYED | MF_BYPOSITION);


            return S_OK;
            }
            break;

.....
....
...
}

但这对禁用菜单项没有帮助。我做错了什么??

最佳答案

试试这个:

EnableMenuItem(gHMenu,ITEM_ID,MF_DISABLED | MF_GRAYED);

ITEM_ID 应该是菜单项的资源 ID。

或者:

EnableMenuItem(gHMenu,ITEM_POSITION,MF_DISABLED | MF_GRAYED | MF_BYPOSITION);

其中 ITEM_POSITION 是菜单项的零索引位置。

请注意,调用 EnableMenuItem 后,您可能需要调用 DrawMenuBar 以确保显示已更新。

关于c++ - EnableMenuItem 函数无法使用参数 MF_GRAYED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3776272/

相关文章:

windows - 如何防止 DLL 注入(inject)

css - 如何设置菜单按钮和菜单项的样式

android-support-library - 安卓导航 View : not show full item and not truncate

android - 方向更改后,菜单中的 TextView 始终为 null

c++ - 获取在 C++ 中创建/修改注册表项的日期

c++ - 解引用指针给出一个地址

c++ - 初始化后的 vector at() 超出范围错误

c++ - 为什么在抛出异常指针时我应该使用引用捕获

windows - 用于在子文件夹中查找文件夹并获取路径的批处理脚本

c - 如果我使用linux库用C编译程序,我可以在windows上使用它吗?