Как отключить клик на прозрачном контроле? - PullRequest
1 голос
/ 02 августа 2010

В нашем приложении есть форма отображения, для которой требуется фоновое изображение Google Планета Земля, и поскольку вы не можете использовать плагин Google Планета Земля в браузере под панелью, мы используем вторую форму для отображения фонового изображения. У нас есть прозрачная панель в форме отображения, на которой выполняется рисование, в то время как Google Earth рисуется на форме, синхронизированной ниже.

Мы достигаем прозрачности, задав для формы ключ прозрачности 255, 250, 250 и установив фон панели в этот цвет, прежде чем рисовать на нем. Хотя теперь, посмотрев информацию, доступную в Интернете, выяснилось, что на панели не должно быть событий курсора.

В большинстве случаев это работает идеально, но на компьютерах одного или двух клиентов (один, определенно, Windows 7) курсор не будет работать правильно на панели, где он прозрачен. Если курсор находится над нарисованным участком карты, то все работает нормально.

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

Есть ли у кого-нибудь подробное описание того, что делает ключ прозрачности? Есть ли способ абсолютно установить, что панель должна получать события мыши?

EDIT
Добавлена ​​информация о ключе прозрачности.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2013

Стево - Вы когда-нибудь выясняли ответ на это?У меня была та же проблема, и я решил изменить прозрачный ключ основной формы на какой-то странный цвет.Может или не может помочь вам.У меня был пользовательский элемент управления с прозрачностью, но цвет ключа формы также был моим цветом рисования, что позволяло ему проходить (странно).Я изменил это, и это сработало!

0 голосов
/ 03 сентября 2010

Попробуйте перехватить сообщение WM_HITTEST в WndProc для окна формы и, когда вы узнаете, что оно находится над клиентской областью, вернуть соответствующее значение HTCLIENT.Возможно, обработка окна по умолчанию иногда возвращает другое значение.

...