Прозрачный веб-браузер в пользовательском управлении в .NET - PullRequest
2 голосов
/ 17 декабря 2009

У меня есть довольно хитрый (по крайней мере, для меня), который я потратил много времени, пытаясь выяснить. У меня есть приложение Winform C #. В приложении мне нужно представить несколько веб-страниц друг над другом прозрачным цветом, что позволяет мне размещать веб-страницы друг над другом. Я легко могу сделать это, позволив веб-странице не задавать задний цвет, а затем поместив элемент управления WebBrowser на отдельную WinForm с TransparentcyKey и BackgroundColor, установленными, например, на. белый. Когда я открываю несколько форм, они ведут себя прозрачно, и я получаю необходимый эффект.

Имея кучу открытых форм, на мой взгляд, это довольно грязно, потому что то, что я просто хочу, это нечто вроде контроля. Поэтому моя идея состоит в том, чтобы либо поместить его в UserControl и добавить туда необходимую логику, либо просто наследовать и переопределять функциональность в веб-браузере. Однако UserControl не предоставляет никаких ключей прозрачности, таких как форма, поэтому изначально это тупик. Переопределение WndProc в UserControl для обработки краски, похоже, не имеет никакого эффекта. Это похоже на то, что WebBrowser на самом деле не доступен ни для чего, что, я думаю, как-то связано с тем, что это всего лишь обернутый ActiveX.

В случае, если невозможно получить производный WeBrowser или UserControl с WebBrowser, у кого-нибудь есть какие-либо предложения по поводу того, как я мог бы обрабатывать формы, чтобы они действовали как пользовательские элементы управления в отношении отсечения при размещении их поверх "материнской" формы?

Лучшие тряпки Франц Томсен

1 Ответ

4 голосов
/ 17 декабря 2009

Элемент управления веб-браузера стирает фон, используя цвет фона, указанный в настройках Интернета.Чтобы смешать его с изображением другого окна, вам нужно использовать слои (SetLayeredWindowAttributes / UpdateLayeredWindow).

Однако слои не работают с дочерними окнами (в данном случае это элемент управления WebBrowser).Чтобы перейти на другой слой, вам нужно создать собственное окно верхнего уровня, расположенное точно в том же месте над элементом управления заполнителем в главном окне.Вы должны будете продолжать перемещать его и, возможно, изменять его размер, так как элемент управления заполнителя перемещается / изменяется.Наличие владельца обеспечит его автоматическое сворачивание и уничтожение в главном окне приложения.И вам нужно, чтобы оно выглядело как дочернее окно, то есть без полей и ShowInTaskbar = false.

См. Обсуждение http://blogs.msdn.com/changov/archive/2009/01/19/webbrowser-control-on-transparent-wpf-window.aspx.

Если ваша веб-страница содержит те аппаратно-ускоренные переходы ActiveX / DirectX и фильтры, которые записывают на экран напрямую, а не участвуют в процессе рисования окна IEВам может не повезти.

...