c - Win32 快捷菜单在任何情况下都不发送消息

标签 c winapi

我有一个显示的快捷菜单,但无论我用它做什么,它都不会发送任何消息。

我在高级鼠标钩子(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/

相关文章:

c - 使用 scanf 获取字符串来创建并针对 while 循环验证它...继续获取

c - 当程序在 getpass 上中断时,如何不将提供的字符写入 bash stdout?

c - 在 C 中存储未知迭代次数的 while 循环的结果

c - 如何获得临时文件名?

c++ - 保存自定义应用程序通知、错误字符串

c++ - Internet Explorer 是否向 BHO 提供通过 HTTP 下载文件的功能?

c++ - char * 到 wchar_t * 函数实现

c++ - 如何将 Visual Studio 2010 WinForm 对象添加到 C++ 控制台应用程序项目

winapi - 如何枚举\GLOBAL 下的所有文件??\

c++ - 使用类成员作为 WNDPROC/DLGPROC 有或没有全局