2013-07-31 2 views
0

Я стыкую окно другого приложения внутри моего окна WPF с помощью HwndHost. Чтобы сделать это, я должен установить атрибут стиля WS_CHILD окна, которое я стыкую, и я теряю системное меню этого окна, что неприемлемо. Используя HwndHost, нет никакого способа обойти это, поскольку он будет генерировать исключения, если этот атрибут не установлен.WinAPI Копирование системы меню в новое окно

Мой вопрос:

Поскольку мое приложение не использует системное меню, есть ли способ напрямую скопировать системное меню прикрепленного приложения в окно моего приложения? Функции меню WinAPI, о которых я знаю, потребуют от меня создания меню с нуля, и я не знаю, как я мог подключить это меню к размещенному приложению.

Я не уверен, имеет ли это значение, но два окна находятся в одном процессе. Мое приложение является плагином окна приложения, которое я стыкую.

+0

Я не совсем понимаю вашу структуру. Как правило, плагины присоединяются к хосту, в то время как звучит так, будто вы присоединяете хост к плагину. Зачем? –

+0

[@user ...] Я также ничего не понимаю: дочернее окно не может иметь (Get/Set) строку меню, но может (если вы действительно хотите) иметь WS_SYSMENU и соответственно - (Get) SystemMenu ... – kero

ответ

0

Используйте GetSystemMenu, чтобы получить HMENU для системного меню для данного окна. Вы должны иметь возможность перекрестно ссылаться на системное меню вашего собственного окна с системным меню пристыкованного приложения, копировать все, что нет у вашего собственного окна, и пересылать их, обрабатывая и пересылая соответствующие сообщения WM_SYSCOMMAND. Или просто скопируйте все системное меню и переместите все их.

Это, вероятно, потребует немного проб и ошибок, чтобы все это работало (особенно если пристыкованное приложение не будет использоваться таким образом ...), но вышеуказанное может помочь начать все.