Создайте полупрозрачную или прозрачную оконную форму, прозрачную для событий мыши, за исключением элементов управления, добавленных в форму - PullRequest
0 голосов
/ 03 сентября 2011

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

Так вот код, который я написал с WindowForms:

namespace ClickThroughMe
{
public partial class ClickThroughForm : Form

{
    private int currentWindowStyle;

    public ClickThroughForm()

    {
        InitializeComponent();
    }

    private void ClickThroughForm_Load(object sender, EventArgs e)

    {
        // Grab the Extended Style information for this window and store it.

        currentWindowStyle = WindowLibrary.User32Wrappers.GetWindowLong(this.Handle, User32Wrappers.GWL.ExStyle);

        // Set our window to "transparent", or invisible to the mouse.

        SetFormToTransparent();

        // Make our window the top-most form.

        this.TopMost = true;       
    }

    private void SetFormToTransparent()

    {
        // This creates a new extended style for our window, making it transparent to the mouse.

        User32Wrappers.SetWindowLong(this.Handle, User32Wrappers.GWL.ExStyle,

                                    (User32Wrappers.WS_EX) currentWindowStyle | 

                                     User32Wrappers.WS_EX.Layered |

                                     User32Wrappers.WS_EX.Transparent);
    }
  }
}

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

Так что Мне нужна помощь до сделать его лучше.

1) Сохранить элементы управления Полная непрозрачность (Не требуется, но важно)

2) Сохранить элементы управления Clickability и Оперативность (ДОЛЖЕН)

Я принимаю любое решение, даже меняя проект на WPF , если это может помочь получить результат.

Спасибодля вас время.

1 Ответ

1 голос
/ 03 сентября 2011

Попробуйте установить Свойство Form.TransparencyKey ClickThroughForm для соответствия форм BackColor.

Я проверял это, когда ClickThroughForm был установлен на TopMost поверх другой формы, и я мог запускать события Button, и элемент управления TrackBar, казалось, работал правильно.

Примечание: Использование этогоМетод ClickThroughForm не может перехватывать события мыши из-за его прозрачности, если это требование, вы можете игнорировать этот ответ.

Класс ClickThroughForm

public class ClickThroughForm : Form
{
    private System.ComponentModel.IContainer components = null;

    public ClickThroughForm()
    {
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        this.SuspendLayout();
        // 
        // ClickThroughForm
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(300, 300);
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        this.Name = "ClickThroughForm";
        this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
        this.Text = "ClickThroughForm";

        //Set the TransparencyKey to match the default BackColor of the Form
        this.TransparencyKey = System.Drawing.SystemColors.Control;

        this.ResumeLayout(false);

    }

    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }
}

Надеюсь, что это поможет вам.

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

Для получения дополнительной информации см. Следующее: Как работает прием ответа?

...