如何把ON_UPDATE_COMMAND_UI应用到自己的弹出式菜单?

不录 2003-09-24 06:56:42
其实这个弹出式菜单就是SDI文档的IDR_MAINFRAM菜单的一个下拉菜单,
但是
pSubMenu = ::AfxGetMainWnd()->GetMenu()->GetSubMenu(nPos);
pSubMenu->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN,....
弹出来的菜单却无法收到ON_UPDATE_COMMAND_UI。应该怎么办呢?
...全文
82 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
powerbeing 2003-09-25
  • 打赏
  • 举报
回复
是的,因为弹出式菜单不支持UI,所以你得用一个变量来保存状态,并在TrackPopupMenu之前这个变量来设置菜单的状态。
Phourm 2003-09-25
  • 打赏
  • 举报
回复
弹出式菜单不要用那个自己搞就行了:
CMenu menu;
menu.LoadMenu(IDR_MENU_POPUP);
CMenu* pPopupMenu = menu.GetSubMenu(1);
if (pPopupMenu)
{
if (...)//enable
{
pPopupMenu->DeleteMenu(0, MF_BYPOSITION);
//pPopupMenu->EnableMenuItem(ID_FILE_NEW, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
pPopupMenu->InsertMenu(0, MF_BYPOSITION | MF_STRING, ID_POPUP_ITEM_OPEN, _T("Open"));
pPopupMenu->SetDefaultItem(ID_POPUP_ITEM_OPEN);
}
else
{
pPopupMenu->EnableMenuItem(ID_POPUP_ITEM_REMOVE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
pPopupMenu->EnableMenuItem(ID_POPUP_ITEM_SYNC, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
pPopupMenu->EnableMenuItem(ID_POPUP_ITEM_PROPERTIES, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
}

CPoint pt;
GetCursorPos(&pt);
pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, pt.x, pt.y, this);
}
wuxfBrave 2003-09-25
  • 打赏
  • 举报
回复
是不是TrackPopupMenu的目标窗口设置的问题啊
lop5712 2003-09-25
  • 打赏
  • 举报
回复
生成一个CCmdUI对象,如下:(下面代码经过实验,证明有效)

CCmdUI ui;
ui.m_pMenu = pSubMenu;
ui.m_nIndexMax = pSubMenu->GetMenuItemCount();
CCmdTarget *pTarget = static_cast< CCmdTarget* >( ::AfxGetMainWnd() );

for( long i = pSubMenu->GetMenuItemCount(); i; --i )
{
ui.m_nIndex = i - 1;
ui.m_nID = pSubMenu->GetMenuItemID( ui.m_nIndex );

ui.DoUpdate( pTarget, TRUE );
}
不录 2003-09-24
  • 打赏
  • 举报
回复
在OnUpdate...()函数中我已经处理了菜单的有效性,我不希望在弹出同样的菜单时再处理一次。
woaini5994 2003-09-24
  • 打赏
  • 举报
回复
ON_UPDATE_COMMAND_UI
这个宏不就是用来判断相应的菜单是否可用么
她可以作出响应不就是判断相应的菜单是否可用么
可以有其他的命令响应么?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧