关于TrackPopupMenu弹出菜单(托盘弹出菜单自动消失)

发布时间:2018年1月26日 作者:未知 查看次数:1072


在建立弹出菜单时使用TPM_RIGHTBUTTON会弹出多个菜单。



函数原型:BOOL TrackPopupMenu(HMENU hMenu, UINT uFlags, int x, int y, int nReserved, HWND hWnd, CONST RECT* prcRect);

参数uFlags:一种指定功能选项的位标志。用下列标志位之一来确定函数如何水平放置快捷菜单:

TPM_CENTERALIGN:若设置此标志,函数将按参数x指定的坐标水平居中放置快捷菜单。

TPM_LEFTALIGN:若设置此标志,函数使快捷菜单的左边界与由参数X指定的坐标对齐。

TPM_RIGHTALIGN:若设置此标志,函数使快捷菜单的右边界与由参数X指定的坐标对齐。

用下列标志位之一来确定函数如何垂直放置快捷菜单:

TPM_BOTTOMALIGN:若设置此标志,函数使快捷菜单的下边界与由参数y指定的坐标对齐。

TPM_TOPALIGN:若设置此标志,函数使快捷菜单的上边界与由参数y指定的坐标对齐。

TPM_VCENTERALIGN;若设置此标志,函数将按参数y指定的坐标垂直居中放置快捷菜单

用下列标志位之一来确定在菜单没有父窗口的情况下用户的选择:

TPM_NONOTIFY:若设置此标志,当用户单击菜单项时函数不发送通知消息。

TPM_RETURNCMD;若设置此标志;函数将用户所选菜单项的标识符返回到返回值里。

(注意:当TrackPopupMenu的返回值大于0,就说明用户从弹出菜单中选择了一个菜单。当不设置TPM_NONOTIFY和TPM_RETURNCMD时,程序给自己发送了一个WM_COMMAND消息,以返回的ID号为参数wParam的值)

用下列标志位之一来确定在快捷菜单跟踪哪一个鼠标键:

TPM_LEFTBUTTON:若设置此标志,用户只能用鼠标左键选择菜单项。

TPM_RIGHTBUTTON:若设置此标志,用户能用鼠标右键选择菜单项。(TPM_RIGHTBUTTON   连续按鼠标右键会连续弹出菜单)



让托盘弹出菜单失去焦点时自动消失

托盘弹出控制菜单后,单击其他地方或者按ESC键不能使托盘菜单消失,必须选择托盘菜单里的控制选项才能关闭菜单。

修正办法就是将SetForegroundWindow()放在TrackPopupMenu()前面,这样就使得当前窗口变为前置了。





版权所有!www.sieye.cn
E.Mail:sieye@sohu.com QQ:66697110