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----------------热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下