Как использовать колесо мыши и таймер для автоматической настройки значения?
Мне нужна помощь еще раз с той же проблемой в основном.
Я настраиваю непрозрачность своей формы с помощью многоуровневого стиля Windows и могу ссылаться на значение с помощью GWL_EXSTYLE для управления уровнем непрозрачности. Я не знаю, почему у меня возникли проблемы здесь, но с моим решением до сих пор я не уверен, как я должен получить текущий уровень непрозрачности формы и настроить его автоматически с помощью таймера. Я пытаюсь создать управляющее поведение с помощью колесика мыши и таймера.
RickZeeland опубликовал полностью функциональный пример правильного поведения с обычной непрозрачностью панели здесь.
Именно этого я и пытаюсь достичь. Если бы кто-то мог помочь мне реализовать решение в этой довольно минималистичной установке со слоистыми окнами, которые я подготовил, я мог бы наконец закончить одно из моих приложений, которое может обрабатывать еще более сложные изображения.
Что я уже пробовал:
Я понял, как управлять непрозрачностью формы непосредственно с помощью колесика мыши, но мне нужна помощь в правильном поведении для автоматического управления значениями с помощью таймера.
this.MouseWheel += MyMouseWheel; [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")] static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags); public const int GWL_EXSTYLE = -20; public const int WS_EX_LAYERED = 0x80000; public const int LWA_ALPHA = 0x2; private void MyMouseWheel(object sender, System.Windows.Forms.MouseEventArgs e) { SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED); int alpha2 = mousedeltaval + 255; var alpha = (byte)alpha2; SetLayeredWindowAttributes(Handle, 0, alpha, LWA_ALPHA); if (e.Delta < 1) if (alpha2 > 1) { mousedeltaval = mousedeltaval - 1; } if (e.Delta > 1) if (alpha2 < 254) { mousedeltaval = mousedeltaval + 1; }}}
Richard MacCutchan
Вы должны опубликовать это как ответ на объяснение Рикзиленда, чтобы он мог вам помочь.
Member 13920025
Ладно, спасибо за совет.