系统托盘区右键菜单问题

hulehu 2002-07-06 08:26:31
在任务栏托盘区,添加程序的右键弹出菜单
HMENU hMenu=LoadMenu(AfxGetResourceHandle(),MAKEINTRESOURCE(IDR_POP));
HMENU hSub=GetSubMenu(hMenu,0);
SetForegroundWindow();
POINT pt;
GetCursorPos(&pt);
DWORD dwID=TrackPopupMenu(hSub,TPM_RIGHTALIGN|TPM_BOTTOMALIGN|TPM_RETURNCMD,pt.x,pt.y,0,m_hWnd,0);
可是弹出的并不是我在IDR_POP中设计的菜单,而是其最大化时的第一列菜单也就是IDR_MAINFRAME的菜单项
...全文
131 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fang_jb 2002-07-09
  • 打赏
  • 举报
回复
确认名字没弄错
darkstar_w 2002-07-09
  • 打赏
  • 举报
回复
罗嗦,直接用API
htaskmenu=LoadMenu(hInstance,szAppName);//读入菜单,获得菜单句柄。 htaskmenu=GetSubMenu(htaskmenu,0); //设置为点击弹出菜单
。。。。
参考vc之路有关文章
hulehu 2002-07-09
  • 打赏
  • 举报
回复
试过楼上各位的,但还是装入了IDR_MAINFRAME
zxjmm 2002-07-06
  • 打赏
  • 举报
回复
用你的IDR_POP代替上面的IDR_MENU2
zxjmm 2002-07-06
  • 打赏
  • 举报
回复
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class

switch(message)
{
case MYWM_NOTIFYICON:
//如果是用户定义的消息
{
if(lParam==WM_LBUTTONDBLCLK)
{ //鼠标双击时主窗口出现
AfxGetApp()->m_pMainWnd->
ShowWindow(SW_SHOWMAXIMIZED);
::Shell_NotifyIcon(NIM_DELETE ,&m_tnid);


}
else
if(lParam==WM_RBUTTONDOWN)
{
//鼠标右键单击弹出菜单
CMenu menu;


//载入事先定义的菜单
if (!menu.LoadMenu(IDR_MENU2))//你必须确定资源中有ID为IDR_POPUP的菜单
{
MessageBox("菜单装载错误","错误",MB_ICONEXCLAMATION|MB_OK);
return 0;
}



CMenu* pMenu=menu.GetSubMenu(0);
CPoint pos;
GetCursorPos(&pos);

// SetForegroundWindow();
pMenu->TrackPopupMenu(TPM_RIGHTBUTTON,pos.x,pos.y,AfxGetMainWnd());
}
break;
}
case WM_SYSCOMMAND:
//如果是系统消息
if(wParam==SC_MINIMIZE)
{
//接收到最小化消息时主窗口隐藏
AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
::Shell_NotifyIcon(NIM_ADD ,&m_tnid);
return 0;
}
break;
}
return CFrameWnd::WindowProc(message, wParam, lParam);
}
hawkview 2002-07-06
  • 打赏
  • 举报
回复
将你的菜单id置为“IDR_POP”,(注意有引号)
再用以下语句
HMENU hMenu=LoadMenu(AfxGetResourceHandle(),"IDR_POP");

你试试看。
zhuwenzheng 2002-07-06
  • 打赏
  • 举报
回复
case WM_RBUTTONDOWN:
if( m_PopmenuID )
{
CMenu menu;
CMenu* pPopup;
VERIFY(menu.LoadMenu(m_PopmenuID));
pPopup = menu.GetSubMenu(0);
ASSERT( pPopup != NULL );

//::SetMenuDefaultItem( pPopup->m_hMenu, 0, TRUE );
CPoint pos;
GetCursorPos(&pos);
::SetForegroundWindow( hWnd );
TrackPopupMenu( pPopup->m_hMenu, 0,
pos.x, pos.y, 0, hWnd, NULL );
}
prog_st 2002-07-06
  • 打赏
  • 举报
回复
用CMenu 的LoadMenu试试

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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