zl程序教程

您现在的位置是:首页 >  后端

当前栏目

VC实现动态菜单的创建方法

方法 实现 创建 动态 菜单 vc
2023-06-13 09:15:38 时间

本文简述了在程序不支持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----------------