我有一个显示的快捷菜单,但无论我用它做什么,它都不会发送任何消息。
我在高级鼠标钩子(Hook)中试过,在 WM_CONTEXTMENU 中试过 窗口过程消息。 无论我将做什么,返回什么,它都不会发送消息。
菜单在应用程序启动时创建,在应用程序关闭时销毁。
这是菜单创建代码:
DoomRatGUI_SlavesListItemMenu = CreatePopupMenu();
DoomRatGUI_SlavesListItemMenuInfo = calloc(1, sizeof(MENUINFO));
DoomRatGUI_SlavesListItemMenuInfo->fMask = MIM_STYLE | MIM_APPLYTOSUBMENUS;
DoomRatGUI_SlavesListItemMenuInfo->cbSize = sizeof(MENUINFO);
DoomRatGUI_SlavesListItemMenuInfo->dwStyle = MNS_NOCHECK | MNS_NOTIFYBYPOS;
//DoomRatGUI_SlavesListItemMenuInfo->hbrBack = ResourcesManager_GetDarkGreyBrush();
SetMenuInfo(DoomRatGUI_SlavesListItemMenu, DoomRatGUI_SlavesListItemMenuInfo);
AppendMenuW(DoomRatGUI_SlavesListItemMenu, MF_STRING, 1001, L"Actions");
AppendMenuW(DoomRatGUI_SlavesListItemMenu, MF_STRING, 1002, L"Quick Info");
AppendMenuW(DoomRatGUI_SlavesListItemMenu, MF_STRING, 1003, L"Quick Stop");
AppendMenuW(DoomRatGUI_SlavesListItemMenu, MF_STRING, 1004, L"Quick Restart");
我使用代码行显示菜单:
TrackPopupMenu(DoomRatGUI_SlavesListItemMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD | TPM_LEFTBUTTON | TPM_NOANIMATION, LOWORD(Arg_lParam), HIWORD(Arg_lParam), 0, DoomRatGUI_WindowHandle, NULL);
如果您知道解决方案,请告诉我我必须做什么,因为我已经尝试了所有方法,例如...将那段代码准确地放在哪里,谢谢。
PS:DoomRAT 没有任何恶意,它是一款小型 2D 游戏,我正在努力学习。
最佳答案
TPM_RETURNCMD
标记原因 TrackPopupMenu
将所选菜单项 ID 作为函数返回值返回,而不是发送 WM_COMMAND
消息。
另外,分配 MENUINFO
那样是不必要的,它是一个小结构,只需使用堆栈。
关于c - Win32 快捷菜单在任何情况下都不发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45327792/