Re: WebControl и WM_PAINT
От: Pavel Dvorkin Россия  
Дата: 10.03.10 08:44
Оценка:
Здравствуйте, i_van, Вы писали:

_>Использую С# WebBrowser control. Нужно модифицировать OnPaint(), в частности информировать другой класс, что браузер перерисовал свой контент. Исследование показало, что сам WebBrowser control месседж WM_PAINT не получает. Он имеет вложенные окна, как-то:


Он может его не получать только если ни один пиксель его клиентской области не явлвется видимым (то есть вся клиентская область чем-то закрыта). Но тогда ему WM_PAINT и не нужен вообще.

_>Windows Form10.Window.8.app.378734a (WebBrowser control)

_> |
_> |
_> Window Shell Embedding
_> |
_> |
_> Shell Doc Object View
_> |
_> |
_> InternetExplorer_Server

_>Последнее окно в иерархии (InternetExplorer_Server) и получает WM_PAINT


Вполне логично. Оно имеет видимые пиксели, поэтому должно уметь себя перерисовать, для чего ему шлют, а он обрабатывает WM_PAINT


>но дальше по иерархии WM_PAINT не всплывает


И не должно. Судя по всему, предки этого окна видимых пикселей не имеют.

>Как получить указатель на это окно?


В .NET не знаю, а в Win32 просто — EnumChildWindows. Начать с Windows Form10.Window.8.app.378734a , перебрать его чайлдов, найти нужны, с ним то же самое и т.д. Можно еще FindWindowsEx, если есть критерий для поиска


>Или хотя бы pop up WM_PAINT до уровня WebContol?


Судя по твоему описанию — бессмысленно, оно ему не нужно.Но, должен сказать, я совсем не уверен в том что то, что ты написал, верно.
Лучше всего запусти Spy++ (входит в состав VS) и проверь все, в том числе иерархию, размеры и перекрытие.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.