VC实现动态菜单的创建方法
本文简述了在程序不支持MFC,CMenu不可用的情况下,动态创建系统托盘菜单的方法。由于菜单项是不确定的,因而就需要用sdk创建一个动态弹出菜单。
主要实现代码如下:
//------------------codebegin---------------- //在类中定义的变量: //双击托盘图标时对应的菜单项id. UINTm_nDClickMenuItemId; //弹出菜单句柄. m_hMenum_hMenu; ///动态创建右键菜单项. ///@paramitem_text菜单项文本字符串,以逗号分隔. ///@paramdbclick_id双击托盘图标对应的菜单项id. //调用示例: //create_menu("显示/隐藏,退出",40001); BOOLCTrayIconMenu::create_menu(char*item_text,unsignedintdbclick_id) { m_nDClickMenuItemId=dbclick_id; //动态创建弹出菜单 m_hMenu=::CreatePopupMenu(); if(m_hMenu==NULL){ return0; } inti=0; intmsgid=40001;//第一项菜单项的消息id. BOOLret=0; char*pText=::strtok(item_text,","); while(pText!=NULL){ ret=::AppendMenu(m_hMenu,MF_ENABLED|MF_STRING,msgid+i,pText); pText=::strtok(NULL,","); i++; } return1; } ///响应消息显示菜单. LRESULTCTrayIconMenu::on_msg(WPARAMwid,LPARAMevent) { //一些其他处理代码... POINTmouse; ::GetCursorPos(&mouse); //hWnd为应用程序主窗口句柄. if(event==WM_RBUTTONUP){ ::SetForegroundWindow(hWnd); ::TrackPopupMenu(m_hMenu,0,mouse.x,mouse.y,0,hWnd,NULL); } return1; } //------------------codeend----------------