WinAPI复制系统菜单到新窗口

时间:2013-07-31 19:11:57

标签: wpf winapi hwndhost systemmenu

我使用HwndHost将另一个应用程序的窗口停靠在我的WPF窗口内。为此,我必须设置我对接的窗口的WS_CHILD样式属性,并且我丢失了该窗口的系统菜单,这是不可接受的。使用HwndHost无法解决这个问题,因为如果未设置该属性,它将抛出异常。

我的问题是;

由于我的应用程序不使用系统菜单,有没有办法直接将停靠应用程序的系统菜单复制到我的应用程序窗口?我知道的WinAPI菜单函数都需要我从头开始构建菜单,我不知道如何将这些菜单挂钩到托管应用程序中。

我不确定它是否重要,但两个窗口在同一个过程中。我的应用程序是我对接的应用程序窗口的插件。

1 个答案:

答案 0 :(得分:0)

使用GetSystemMenu为给定窗口的系统菜单获取HMENU。您应该能够使用停靠的应用程序的系统菜单交叉引用您自己的窗口的系统菜单,复制您自己的窗口所没有的任何内容,并通过处理和转发相关的WM_SYSCOMMAND消息来转发它们。或者只是复制整个系统菜单并将其全部转发。

这可能需要一些试验和错误才能使其全部工作(特别是如果停靠的应用程序不希望以这种方式使用...)但上述内容可能有助于开始。