La fonction EnableMenuItem ne fonctionne pas avec le paramètre MF_GRAYED

J’ai créé un projet ATL COM par lequel j’insère des éléments de menu dans le menu contextuel comme ceci:

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 ); } 

Maintenant, je veux désactiver le sous-menu Connecter dès que l’utilisateur clique dessus et j’utilise pour cela EnableSubMenuItem,

 STDMETHODIMP CSimpleShlExt::InvokeCommand ( LPCMINVOKECOMMANDINFO pCmdInfo ) { // If lpVerb really points to a ssortingng, 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); 

Modifier:

 EnableMenuItem(gHMenu,0,MF_DISABLED | MF_GRAYED | MF_BYPOSITION); return S_OK; } break; ..... .... ... } 

Mais cela n’aide pas à désactiver l’élément de menu. Qu’est-ce que je fais mal??

Essaye ça:

 EnableMenuItem (gHMenu, ITEM_ID, MF_DISABLED | MF_GRAYED);

ITEM_ID doit être l’ID de l’élément de menu de la ressource. Ou:

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

ITEM_POSITION – Index de l’élément de menu.