Самая высокая прозрачность для всей формы

Возможно ли, чтобы все границы формы были прозрачными без изменения видимости формы?

Я использую api-вызов user32 для WindowFromPoint, чтобы найти элемент управления под мышью. В некоторых случаях я хотел бы игнорировать существование дочерней формы, которая плавает перед основной формой (или другой дочерней формой), но оставить эту форму, чтобы она игнорировалась видимой.

Если для параметра Opacity формы игнорировать значение 0, то проверка попадания будет успешно проходить через нее, но форма, очевидно, невидима, и я бы предпочел, чтобы она оставалась видимой.

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


person roken    schedule 16.06.2012    source источник
comment
Вы пытались переопределить метод WndProc в форме, в которой хотите сохранить сообщение? если это не сработает, вы можете использовать MessageFilter, дополнительная информация: social.msdn.microsoft.com/Forums/en/netfxbcl/thread/   -  person Sebastian Piu    schedule 16.06.2012
comment
Каковы фактические правила, которые вы хотите применить для фильтрации? См .: msdn.microsoft.com/en-us/library/ms158404.aspx < / а>   -  person Emond Erno    schedule 16.06.2012
comment
@Emo Я проверяю одну форму из другой, а не для дочернего элемента управления формой, поэтому вызываю win32 api.   -  person roken    schedule 17.06.2012
comment
@SebastianPiu Переопределение WndProc в форме отключит тестовый ответ только для самой области формы, а не для любого из дочерних элементов управления в форме, так что вы все равно можете в конечном итоге нажать что-то в форме. MessageFilter выглядит так, как будто это то, что я ищу, я рассмотрю его более подробно.   -  person roken    schedule 17.06.2012
comment
@SebastianPiu похоже, что WM_NCHITTEST обходит очередь сообщений и отправляется прямо в элемент управления, поэтому фильтр сообщений не имеет возможности справиться с этим.   -  person roken    schedule 17.06.2012


Ответы (1)


Вам нужен стиль Windows WS_EX_TRANSPARENT.

Этот ответ дает достаточно хорошее объяснение.

person John Arlen    schedule 16.06.2012
comment
Бинго! WS_EX_TRANSPARENT вместе с WS_EX_LAYERED делает свое дело. - person roken; 17.06.2012