0

我读到的是菜单必须将其 MenuInfo.dwStyle 标志设置为 MNS_NOTIFYBYPOS,我所做的是:

MENUINFO MenuInfo;
memset(&MenuInfo,0, sizeof(MenuInfo));
MenuInfo.cbSize = sizeof(MenuInfo);
HMENU hPopupMenu = CreatePopupMenu();
GetMenuInfo(hPopupMenu, &MenuInfo);
MenuInfo.dwStyle |= MNS_NOTIFYBYPOS;
SetMenuInfo(hPopupMenu, &MenuInfo);

接下来继续添加项目:

InsertMenu(hPopupMenu, pos, MF_BYPOSITION, id , "do command");

接下来跟踪它:

TrackPopupMenu(hPopupMenu, TPM_CENTERALIGN | TPM_RETURNCMD, cursorPos.x, cursorPos.y, 0, hwnd, NULL);

但它没有效果,它编译没有错误,但点击事件直到发送为WM_COMMAND

4

1 回答 1

2

您需要设置MENUINFO结构的 fMask 成员来告诉系统您要设置/获取哪些字段。

例如

MenuInfo.fMask = MIM_STYLE;
GetMenuInfo(hPopupMenu, &MenuInfo);
MenuInfo.dwStyle |= MNS_NOTIFYBYPOS;
SetMenuInfo(hPopupMenu, &MenuInfo);

另请注意,文档说:

MNS_NOTIFYBYPOS 是菜单标题样式,应用于单个子菜单时无效。

因此,弹出菜单可能对您不起作用。

于 2013-02-17T01:24:10.637 回答