Непрозрачная форма перехода по клику в .NET - PullRequest
0 голосов
/ 11 февраля 2011

В .NET возможно ли создать непрозрачную форму, по которой можно переходить? Я предполагаю, что должен быть какой-то API для передачи щелчков мыши в окнах прямо за формой. Который из?

1 Ответ

2 голосов
/ 11 февраля 2011

Чтобы сделать переход по форме, вам нужно P / Invoke несколько функций из Windows API и установить расширенные стили окна формы .Я произвольно решил представить пример кода в VB.NET.Если это не ваше предпочтение, его легко конвертировать в C #.

Начните с функции GetWindowLong , которую вы будете использовать для получения расширенных стилей окна.

Public Const GWL_EXSTYLE As Integer = -20

<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Public Shared Function GetWindowLong(ByVal hWnd As IntPtr, _
                                     ByVal nIndex As Integer) As Integer
End Function

Вам также понадобится сестринская функция SetWindowLong, чтобы указать дополнительные расширенные стили окна.

<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Public Shared Function SetWindowLong(ByVal hWnd As IntPtr, _
                                     ByVal nIndex As Integer, _
                                     ByVal dsNewLong As Integer) As Integer
End Function

И константа для расширенного стиля окна, которая потребуется длябыть установленным:

Public Const WS_EX_TRANSPARENT As Integer = &H20


И теперь, чтобы использовать все это, вы можете переопределить OnLoad метод вашей формы и добавить следующие строки:

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
   ''# Call the base class implementation
   MyBase.OnLoad(e)

   ''# Grab the current extended style information for this form
   Dim initialStyles As Integer = GetWindowLong(Me.Handle, GWL_EXSTYLE)

   ''# Add the transparent extended window style
   Dim newStyles As Integer = initialStyles Or WS_EX_TRANSPARENT

   ''# Update the form's extended window styles
   SetWindowLong(Me.Handle, GWL_EXSTYLE, newStyles)
End Sub

Конечно, обратите внимание, что теперь пользователь не сможет взаимодействовать с элементами вашей формы, а чрезвычайно будет трудно закрыть его.Тщательно продумайте, действительно ли это то, что вы хотите сделать.

...