托盘菜单的禁用

catssyao 2008-12-24 04:53:08
vc.net开发环境,MFC工程。做了个托盘菜单,点击图标右键出现。现在想禁用菜单里的某个选项可是不成功,期待高手帮忙代码如下:
LRESULT CMainFrame::ShowMsgDlg(WPARAM wParam, LPARAM lParam)
{

if(wParam!=IDR_MAINFRAME)

return 1;

switch(lParam)

{

case WM_RBUTTONUP://右键起来时弹出快捷菜单
{

LPPOINT lpoint=new tagPOINT;

::GetCursorPos(lpoint);//得到鼠标位置

CMenu menu;

menu.CreatePopupMenu();//声明一个弹出式菜单


/*menu.AppendMenu(MF_STRING,WM_DESTROY,_T("关闭")); */
menu.AppendMenu(MF_STRING | MF_BYCOMMAND | MF_GRAYED,ID_ShowMsg,_T("历史记录")); //MF_GRAYED没用,不知道原因 ID_ShowMsg是我工程资源菜单里的一个选项的ID.
/*menu.EnableMenuItem(ID_ShowMsg , MF_BYCOMMAND | MF_GRAYED );*/ //这样写也没用


//确定弹出式菜单的位置

menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);

//资源回收

HMENU hmenu=menu.Detach();

menu.DestroyMenu();

delete lpoint;

}

break;

case WM_LBUTTONDBLCLK://双击左键的处理

{

this->ShowWindow(SW_HIDE);//简单的显示主窗口完事儿

}

break;

}


return 0;
...全文
108 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
catssyao 2008-12-26
  • 打赏
  • 举报
回复
谢谢各位关注,结贴了!
ooily 2008-12-24
  • 打赏
  • 举报
回复
友情up
Tinary3v0 2008-12-24
  • 打赏
  • 举报
回复
给你一段代码:
void CMyF1Dlg::OnContextMenu(CWnd*  pWnd , CPoint  point )
{
{
if (point.x == -1 && point.y == -1){
CRect rect;
GetClientRect(rect);
ClientToScreen(rect);

point = rect.TopLeft();
point.Offset(5, 5);
}

CMenu subMenu;
subMenu.CreatePopupMenu();
subMenu.InsertMenu( 0, MF_BYPOSITION, IDS_MENU4, _T("E") );
subMenu.InsertMenu( 0, MF_BYPOSITION, IDS_MENU5 ,_T("F") );
subMenu.InsertMenu( 0, MF_BYPOSITION, IDS_MENU6 ,_T("G") );
subMenu.InsertMenu( 0, MF_BYPOSITION, IDS_MENU7 ,_T("H") );

subMenu.EnableMenuItem( IDS_MENU4, MF_BYCOMMAND|MF_GRAYED ); //禁用

CMenu pMenu;

pMenu.CreatePopupMenu();
pMenu.AppendMenu( MF_STRING, IDS_MENU1, _T("A") );
pMenu.AppendMenu( MF_STRING, IDS_MENU2, _T("B") );
pMenu.AppendMenu( MF_STRING, IDS_MENU3, _T("C") );
pMenu.AppendMenu( MF_POPUP,( UINT_PTR )subMenu.m_hMenu,_T( "M") );

pMenu.DeleteMenu( IDS_MENU1, MF_BYCOMMAND );
pMenu.DeleteMenu( IDS_MENU5, MF_BYCOMMAND );

pMenu.EnableMenuItem( IDS_MENU2, MF_BYCOMMAND|MF_GRAYED ); //禁用

pMenu.TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );

}
}

效果图:
我的菜单是一个动态的 没有使用资源中创立的菜单 而是直接通过ID创建的 如果是使用资源中创建好的菜单应该比这个更容易。
海倍娜楽 2008-12-24
  • 打赏
  • 举报
回复

这个不明白,只知道WinForm中有个托盘控件(NotifyIcon)

http://download.csdn.net/source/903611

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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