Windows 中的弹出菜单是什么类型的资源?

What type of Resource is a Popup Menu in Windows?

我一直在研究弹出式菜单(请参阅 https://msdn.microsoft.com/en-us/library/windows/desktop/ms647626(v=vs.85).aspx),但对它们背后的内容有点困惑。

它们的行为部分类似于 windows,但看起来像控件。例如,它们会弹出到其他元素之上,窃取焦点,并且可以超出它们的 parent 容器,这让我认为它们是一种 window。但是他们返回一个 HMENU 句柄而不是 window 句柄,并且他们没有标题栏,也没有句柄,也没有出现在任务栏中。

如果他们是一种控制,他们怎么能超越他们parentwindow?

如果它们是 window 的类型,我可以对它们使用 window-specific 函数吗?或者如果它们是新 window 中的控件,是否有办法获得新 window 的 win 句柄?

我可以获取另一个应用程序的弹出菜单的位置吗?

找到答案:

trying to get a handle to a context menu in c++

看起来菜单是 window 的一种类型,它是桌面 window 的子项。你可以在桌面WinHandle上用EnumChildWindows获取它的window句柄,然后寻找#32768.

的class名称

这里有更多关于这些保留系统 windows 的信息:

About Window Classes | System Classes

弹出菜单是 menu,而不是 window。

一个菜单只是用一个window来显示。每次显示菜单时都会创建一个new window,然后销毁。相比之下,同一个HMENU可以多次显示菜单。