有没有简单的方法来确定弹出菜单何时被关闭?

发布于 2024-08-26 05:27:46 字数 146 浏览 2 评论 0原文

我正在使用 TrackPopupMenu 显示弹出菜单,并想知道何时通过单击其外部来关闭它。我浏览了所有菜单功能,但没有发现任何在这方面有用的东西。 Spy++ 告诉我在这种情况下不会发送任何窗口消息。

那么,有没有一种不用安装鼠标钩就能简单实现的方法呢?谢谢!

I'm displaying a popup menu using TrackPopupMenu and would like to know when it is dismissed via clicking outside of it. I've looked through all the menu functions but didn't find anything useful in this regard. Spy++ told me that no window message is sent in this case.

So, is there an easy way to do it without installing a mouse hook? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

对你再特殊 2024-09-02 05:27:46

[编辑]
这更好。
如果在 uFlags 参数中指定 TPM_RETURNCMD,则返回值是用户所选项目的菜单项标识符。如果用户在没有做出选择的情况下取消菜单,或者发生错误,则返回值为零。

当 ::TrackPopupMenu() 返回时菜单循环结束:)
如果选择了菜单项,则将 HWND 作为第 6 个参数传递的窗口将收到带有所选项目 ID 的 WM_COMMAND 消息。您可以在 ::TrackPopupMenu() 返回后 ::PeekMessage() 查看 WM_COMMAND 是否在队列中。

如果您想在 ::TrackPopupMenu() 中收到通知,您可以处理 WM_EXITMENULOOP。

[edit]
This is better.
If you specify TPM_RETURNCMD in the uFlags parameter, the return value is the menu-item identifier of the item that the user selected. If the user cancels the menu without making a selection, or if an error occurs, then the return value is zero.

The menu loop is ended when ::TrackPopupMenu() returns :)
If a menu item was selected the window having the HWND passed as 6th parameter will receive a WM_COMMAND message with the ID of the selected item. You can probably ::PeekMessage() after ::TrackPopupMenu() returns to see if WM_COMMAND is in the queue.

If you want to be notified while in ::TrackPopupMenu() you can handle WM_EXITMENULOOP.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文