gpt4 book ai didi

c# - 透明背景同时捕获鼠标事件?

转载 作者:可可西里 更新时间:2023-11-01 09:27:02 29 4
gpt4 key购买 nike

这里似乎有一个与此类似的问题,但有“相反”的问题(他不想捕获鼠标事件)。

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

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

我已经尝试覆盖 OnPaintBackground 并执行 noop,但这并没有实现真正的透明度,因为它不会在每次滴答后更新背景(因此无论您是否在初始绘制时面板后面的任何内容都保留在那里移动面板或以其他方式更新它)。但是,它确实允许面板捕获鼠标事件。

在项目的这个阶段,这并不是那么麻烦,但我在快速制作原型(prototype)时偶然发现了这个问题,现在它开始让我烦恼。如果有人有任何指示,他们将不胜感激。

最佳答案

如果您使用的是 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.
}
}

关于c# - 透明背景同时捕获鼠标事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/882706/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com