Форма Windows с прозрачным фоном, по которой можно кликнуть
ВСТУПЛЕНИЕ
Использование C# или VB.NET. Я пытаюсь сделать фон формы прозрачным; эта форма будет наложена на другое окно, это будет самое верхнее окно, поэтому прозрачная форма (и ее элементы управления) должны иметь возможность не получать фокус, и их можно нажимать через, например, если Я выполняю щелчок левой кнопкой мыши на прозрачном фоне, затем окно на заднем плане (в окне Z-порядка) является окном, которое должно получить щелчок вместо этого.
Заметки:
Чтобы избежать фокуса, я переопределяю CreateParams
собственность, как объяснено здесь.
Чтобы сделать мою форму прозрачной, я звоню Win32 DwmExtendFrameIntoClientArea
функции, а также с использованием библиотеки SharpDX, как описано здесь. Но я думаю, что это действительно не имеет значения с самим вопросом.
ПРОБЛЕМА
Я покажу, что я имею в виду, используя изображения. Здесь ниже изображение формы (без прозрачности, просто для упрощения понимания), наложенное на окно программы текстового редактора; обратите внимание, что моя форма не получает фокус. Проблема в том, что когда я щелкаю на фоне формы (или на одном из ее элементов управления), окно на фоне (окно текстового редактора) все еще имеет фокус, но не может получить щелчок.
Вот то же изображение выше, но с прозрачной формой:
ИССЛЕДОВАНИЕ
Я не совсем уверен в том, что нужно исследовать, поэтому я ослеп, пытаясь найти что-то полезное на этапе проб и ошибок, переопределяя процедуру Window (WndProc) прозрачной формы для тестирования связанных сообщений Windows, таких как WM_NCHITEST
или же WM_MOUSEACTIVATE
сообщение как сказано здесь:
0 ответов
Вы можете сделать это, отправив сообщения щелчка (мышь вверх и мышь вниз) в окно под прозрачным окном с помощью WinAPI.
Вам нужно будет найти окно под нужной вам точкой.
Вам нужно будет соответствующим образом преобразовать положение событий щелчка, поскольку сообщения обрабатываются на основе относительного положения окна, а не абсолютного положения экрана.
Я действительно сделал это довольно успешно, чтобы автоматически играть в фейсбук-игру много лет назад.
Check the RAD designer in Visual Studio.
- Is the label docked to fill?
- Where is the main form clickable?
The transparent color is click-though in the main parent, however, components will still retain clicks.