捕获鼠标事件时透明的背景?
作者:互联网
这里似乎有一个类似的问题,但存在“对立”的问题(他不想捕获鼠标事件).
我有一个带有面板的表格.窗口是无边界的,并设置为面板的确切大小(出于所有目的和目的,就好像面板是“自由浮动”的一样).我可以将面板的BackColor设置为SystemColors.Control,然后将窗口的TransparencyKey设置为相同.这样可以达到预期的效果(透明度),但是面板无法再捕获鼠标事件(这对于功能至关重要)!
有没有其他解决方法,或者重新启用鼠标捕获的方法?
我尝试覆盖OnPaintBackground并进行noop,但这并没有实现真正的透明性,因为它不会在每次打勾后更新背景(因此无论是否移动面板,初始绘制时面板后面的内容都保留在那里或进行其他更新).但是,它确实允许面板捕获鼠标事件.
在项目的这个阶段,这还不算什么麻烦,但是我在快速原型制作过程中偶然发现了这个问题,现在开始惹恼我.如果有人有任何指针,将不胜感激.
解决方法:
如果您使用的是VC,我会说您需要一个消息泵来处理WM_鼠标事件消息.
快速搜索会发现此线程可能对您有帮助:
我希望您已经尝试使用以下方法:
/// <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