MFC程序隐藏到托盘后显示

s_wenze 2012-09-06 12:07:38
刚学MFC,写了一个最小化到系统托盘的MFC程序,托盘中菜单想显示“打开”和“退出”两项,“打开”相关函数是用的自定义消息,最后点击退出有效而打开却无效,怎样才能点击“打开”让隐藏的对话框显示,谢谢了!

LRESULT CAaaaaaaaaaDlg::OnShowTask(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_OUT, "打开");
menu.AppendMenu(MF_STRING, WM_DESTROY, "退出");
menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x ,lpoint->y, this);
HMENU hmenu = menu.Detach();
menu.DestroyMenu();
delete lpoint;
}
break;
case WM_LBUTTONDBLCLK:
{
this->ShowWindow(SW_SHOWNORMAL);
this->SetForegroundWindow();
}
break;
}
return 0;
}


自定义消息函数:

void CAaaaaaaaaaDlg::onOut()
{
ShowWindow(SW_SHOWNORMAL);
SetForegroundWindow();
}
...全文
142 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gloveing 2012-09-06
  • 打赏
  • 举报
回复
来一个实例:
/*托盘区图标消息处理函数,该函数实现功能为:在托盘区图标上单击右键
时在鼠标位置弹出一个菜单,如果不选择菜单选项,在其他地方单击鼠标,
菜单消失;当双击左键时,程序主窗口重新弹出显示。*/
void CNotifyiconDlg::OnWM_NOTIFYICON(WPARAM wParam,LPARAM lParam)
{
UINT nID = (UINT)wParam;
UINT uMouseMsg = (UINT)lParam;
switch(uMouseMsg)
{
case WM_LBUTTONDBLCLK:
case WM_LBUTTONDOWN:
if(m_bIsMinimized == TRUE)
{
ShowWindow(SW_SHOW);
m_bIsMinimized = !m_bIsMinimized;
}
break;
case WM_RBUTTONDOWN:
CMenu menu;
CPoint curpos;
GetCursorPos(&curpos);
if(menu.LoadMenu(IDR_MENU1))
{
CMenu* pPopup;
pPopup=menu.GetSubMenu(0);
// pPopup->CreatePopupMenu();
// pPopup->AppendMenu(MF_STRING,ID_MINIMIZE,"最小化");
ASSERT(pPopup!=NULL);
SetForegroundWindow();
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,curpos.x,curpos.y,AfxGetMainWnd());
}
}
}
lxw_it 2012-09-06
  • 打赏
  • 举报
回复
帮顶,我也试过不行,没找到解决办法,后来用一个做好菜单加载进来显示了。
后面没再去研究,我也想知道这是为什么。
s_wenze 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

menu.AppendMenu(MF_STRING, WM_OUT, "打开");
既然菜单ID是WM_OUT, 那得添加ON_COMMAND(WM_OUT,……响应消息,或者在WM_COMMAND中判断处理
[/Quote]
的确是没有添加ON_COMMAND(),现在已经正常运行了,3Q!
zgl7903 2012-09-06
  • 打赏
  • 举报
回复
menu.AppendMenu(MF_STRING, WM_OUT, "打开");
既然菜单ID是WM_OUT, 那得添加ON_COMMAND(WM_OUT,……响应消息,或者在WM_COMMAND中判断处理

15,979

社区成员

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

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