EnableMenuItem 函数无法使用参数 MF_GRAYED
创建了一个 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;
.....
....
...
}
但这对禁用菜单项没有帮助。我做错了什么?
Have created a ATL COM project through which I am inserting Menu Items to The rightclick menu like this:
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 );
}
Now I wan to Disable the Connect submenu as soon as the user clicks on it and for this I am using 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);
Edit:
EnableMenuItem(gHMenu,0,MF_DISABLED | MF_GRAYED | MF_BYPOSITION);
return S_OK;
}
break;
.....
....
...
}
But this is not helping with disabling the Menu Item. What am I doing Wrong??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
试试这个:
ITEM_ID
应该是菜单项的资源 ID。或者:
其中
ITEM_POSITION
是菜单项的零索引位置。请注意,调用
EnableMenuItem
后,您可能需要调用DrawMenuBar
以确保显示已更新。Try this:
ITEM_ID
should be the resource ID of the menu item.Or:
where
ITEM_POSITION
is the zero-indexed position of the menu item.Note that after calling
EnableMenuItem
, you may need to callDrawMenuBar
to ensure that the display has been updated.