Форма должна быть прозрачной и проходить через нее - но все равно получать события перетаскивания - PullRequest
0 голосов
/ 05 июня 2018

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

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

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

Большое спасибо, Ян.

1 Ответ

0 голосов
/ 05 июня 2018

Статья проекта кода на прозрачных переходных формах (VB.NET)

Преобразовано в C # из статьи.

API Win32:

Импорт DLL

[DllImport("user32.dll", EntryPoint = "GetWindowLongA", SetLastError = true)]
private static extern int GetWindowLong(IntPtr hwnd, int nIndex);

[DllImport("user32.dll", EntryPoint = "SetWindowLongA", SetLastError = true)]
private static extern int SetWindowLong(IntPtr hwnd, int nIndex, int dwNewLong);

[DllImport("user32.dll")]
private static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags);

Пример

private const int GWL_EXSTYLE = -20;
private const int WS_EX_LAYERED = 0x80000;
private const int WS_EX_TRANSPARENT = 0x20;
private const int LWA_ALPHA = 2;
private const int LWA_COLOR_KEY = 1;

var style = GetWindowLong(this.Handle, GWL_EXSTYLE)

SetWindowLong(this.Handle, GWL_EXSTYLE, 
                  style | WS_EX_LAYERED | WS_EX_TRANSPARENT)

var percent = 0.7
var alpha = 255 * percent
SetLayeredWindowAttributes(this.Handle, 0, alpha, LWA_ALPHA)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...