【问题标题】:WinAPI Copy System Menu to new WindowWinAPI 复制系统菜单到新窗口
【发布时间】:2013-07-31 19:11:56
【问题描述】:

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

我的问题是;

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

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

【问题讨论】:

  • 我不太了解你的框架。通常,插件停靠在主机中,而听起来您正在将主机停靠在插件中。为什么?
  • [@user...] 我也不明白一些事情:子窗口不能有(获取/设置)菜单栏,但可以(如果你真的想要)有 WS_SYSMENU 并因此 - (Get)系统菜单...

标签: wpf winapi hwndhost systemmenu


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    相关资源
    最近更新 更多