2009-09-02 2 views
0

У меня есть CDHTMLDialog в BHO, что я хочу быть частично прозрачным, в том смысле, что прозрачная область изменяется в соответствии с логикой диалога. Я получил прозрачную визуализацию (используя SetLayeredWindowAttributes), но очень важно сделать этот регион действительно прозрачным, потому что иначе, когда я нажимаю на прозрачную область, мои клики не доходят до окна IE, которое находится ниже прозрачной части моего диалога. Я временно исправляю это, постоянно изменяя размер моего диалога в соответствии с размером активной части диалога, но я не могу идти в ногу с этим навсегда ...Области и прозрачность Windows

Я думаю, что решение имеет какое-то отношение к тем, что вызывает окна «регионы» (http://msdn.microsoft.com/en-us/library/dd162915%28VS.85%29.aspx), но я не совсем уверен, как работать с ними. Может кто-то указать мне верное направление?

ответ

0

Я нашел способ сделать все окно прозрачным и клики здесь:

http://www.codeproject.com/KB/wtl/transparent.aspx

Но это не полезно для моего случая, когда я только хочу прозрачную часть моего окна (прозрачная HTML/Определения CSS) для перехода по клику ...

Обновление: Очевидно, что клики должны проходить через прозрачные части (см. http://jalaj.net/2007/02/05/form-with-a-hole/), но в моем CDHTMLDialog у них нет. Мое лучшее предположение заключается в том, что вспомогательное окно BHO ловит мои клики, но я действительно не думаю, что это имеет смысл ...

2

Я не думаю, что вы хотите сделать части своего окна прозрачными, что вы хотите сделать (я думаю) установить область окна (как вы упомянули). Прочитайте MSDN на SetWindowRgn() - в основном вы определяете объект GDI типа HRGN (если вы используете MFC, CRgn), который описывает поверхность определенной формы и, в конечном итоге, с вырезанными частями. Затем Windows учитывает только «регион», который вы устанавливаете в окне как часть используемого окна. В основном это то, как вы делаете непрямоугольные окна. «Область» - это не «прозрачная» часть окна, это путь к discard области окна, в некотором роде.

+0

Звучит разумно, хотя для этого требуется, чтобы я заранее знал, какие части окна прозрачны. Моя основная проблема заключается в том, что ее динамический HTML и прозрачные части его изменяются без знания BHO. –

+1

О, я вижу сейчас, да, это мешает. На самом деле я не думаю, что это возможно вообще. У вас есть способ узнать, когда пользователь нажимает кнопку, и когда он делает, был ли он прозрачным? Если это так, вы можете просто переслать WM_LBUTTONDOWN и другие сообщения мыши в родительское окно. – Roel

Смежные вопросы