我创建了一个自定义控件,当鼠标悬停在它上面时会突出显示。自定义控件还有一个复选框。当鼠标移过复选框时,不会突出显示自定义控件。我尝试在复选框上使用 WS_EX_TRANSPARENT ,但它对我不起作用。
int cbStyle = GetWindowLong(CompletedCheckBox.Handle, GWL_EXSTYLE);
SetWindowLong(CompletedCheckBox.Handle, GWL_EXSTYLE, cbStyle | WS_EX_TRANSPARENT);
我该怎么做?
由于
答案 0 :(得分:2)
透明仅影响绘图,而不影响鼠标事件。复选框正在获取鼠标事件,这反过来意味着当您将鼠标悬停在复选框上时,您的控件将收到MouseLeave事件。为了确保背景颜色发生变化,即使子控件(在任何级别)获得MouseEnter事件,您也需要跟踪感兴趣的控件 - 或任何子,孙子..等等 - 鼠标悬停它。为此,请递归所有后代控件并拦截它们的相应事件。要做到这一点,尝试类似下面的类。
public partial class MyControl : UserControl
{
public MyControl()
{
InitializeComponent();
AttachMouseEnterToChildControls(this);
}
void AttachMouseEnterToChildControls(Control con)
{
foreach (Control c in con.Controls)
{
c.MouseEnter += new EventHandler(control_MouseEnter);
c.MouseLeave += new EventHandler(control_MouseLeave);
AttachMouseEnterToChildControls(c);
}
}
private void control_MouseEnter(object sender, EventArgs e)
{
this.BackColor = Color.AliceBlue;
}
private void control_MouseLeave(object sender, EventArgs e)
{
this.BackColor = SystemColors.Control;
}
}