--《VC编程知识总结》之四
在《VC编程知识总结》之二中总结了如何添加系统托盘图标,但是没有研究如何添加点击系统托盘图标时弹出菜单,下面就总结一下如何在基于Dialog的MFC中添加菜单。
1、添加一个菜单(menu),方法:insert->resource->menu,或者在resource界面下,直接右键选insert->menu;
2、设置新添加的menu的属性,如设定ID为IDR_MENU1,并在其中添加菜单项目,如“显示主界面”,指定该项目的ID为ID_MAIN_SHOW;
3、在Dlg类的声明中添加CMenu m_Menu和afx_msg void OnMainShow();
4、在Dlg的Message表中添加ON_COMMAND(ID_MAIN_SHOW,OnMainShow);
5、在Dlg的OnInitDialog方法中添加m_Menu.LoadMenu(IDR_MENU1),也可以等到要出现该menu时再添加该语句,比如在鼠标点击系统托盘图标,要显示该菜单了在响应鼠标的函数中添加;
6、在OnNotifyIcon(WPARAM wParam,LPARAM IParam)(该函数在《VC编程知识总结》之二已经讲解过,此处不再讲解如何调用)函数中添加对于鼠标左右键的响应:
LPPOINT lpoint=new tagPOINT; //标示menu显示位置
::GetCursorPos(lpoint);//得到鼠标位置
SetForegroundWindow();//本行代码作用:如果用户未选择子菜单则自动隐藏该menu
m_Menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTALIGN,lpoint->x,lpoint->y,this); //显示menu
PostMessage(WM_NULL,0,0);//
delete lpoint; //回收资源
也可以这样实现:
PORIT pt;//标示menu显示位置
::GetCursorPos(&pt);//得到鼠标位置
SetForegroundWindow();//本行代码作用:如果用户未选择子菜单则自动隐藏该menu
m_Menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTALIGN,pt.x,pt.y,this); //显示menu
PostMessage(WM_NULL,0,0);//
7、将如下代码加入OnMainShow()函数(显示主菜单):
ModifyStyleEx(0,WS_EX_TOPMOST);
ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW);
ShowWindow(SW_SHOW);
按照如上7步即可实现在Dialog中添加菜单。
浙公网安备 33010602011771号