其他分享
首页 > 其他分享> > 捕获鼠标事件时透明的背景?

捕获鼠标事件时透明的背景?

作者:互联网

这里似乎有一个类似的问题,但存在“对立”的问题(他不想捕获鼠标事件).

我有一个带有面板的表格.窗口是无边界的,并设置为面板的确切大小(出于所有目的和目的,就好像面板是“自由浮动”的一样).我可以将面板的BackColor设置为SystemColors.Control,然后将窗口的TransparencyKey设置为相同.这样可以达到预期的效果(透明度),但是面板无法再捕获鼠标事件(这对于功能至关重要)!

有没有其他解决方法,或者重新启用鼠标捕获的方法?

我尝试覆盖OnPaintBackground并进行noop,但这并没有实现真正的透明性,因为它不会在每次打勾后更新背景(因此无论是否移动面板,初始绘制时面板后面的内容都保留在那里或进行其他更新).但是,它确实允许面板捕获鼠标事件.

在项目的这个阶段,这还不算什么麻烦,但是我在快速原型制作过程中偶然发现了这个问题,现在开始惹恼我.如果有人有任何指针,将不胜感激.

解决方法:

如果您使用的是VC,我会说您需要一个消息泵来处理WM_鼠标事件消息.

快速搜索会发现此线程可能对您有帮助:

Capturing ALL mouse events

我希望您已经尝试使用以下方法:

/// <summary>
/// A transparent control.
/// </summary>
public class TransparentPanel : Panel
{
    public TransparentPanel()
    {
    }

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams createParams = base.CreateParams;
            createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
            return createParams;
        }
    }

    protected override void OnPaintBackground(PaintEventArgs e)
    {
        // Do not paint background.
    }
}

标签:transparency,windows,c,winforms
来源: https://codeday.me/bug/20191210/2103031.html