启用/禁用GUI控件将禁用我的OnMouseWheel覆盖
本文关键字:我的 OnMouseWheel 覆盖 禁用 GUI 控件 启用 | 更新日期: 2023-09-27 17:57:59
在我的项目中,我使用WS_EX_TRANSPARENT标志来动态定义半透明窗体是否应该接收用户鼠标事件。
为了更直观,我添加了一些代码,在启用WS_EX_TRANSPARENT时禁用所有可见控件,但是,当调用此代码时,它似乎会"锁定"我的OnMouseWheel
覆盖。
下面是我的代码。我应该指出,如果我注释掉"EnableGUIControls"方法,这段代码就可以很好地工作——事实上,如果我评论掉"EnableGUI控制"方法中的任何一行,它就可以很完美地工作——所以这与禁用所有控件有关。
从表单中移除焦点并重新激活它可以解决问题,但手动调用form.Activte()则不能解决问题。
我想的是禁用所有可见控件以某种方式禁用父控件?有人知道发生了什么吗?
private void SetTransparentToMouse(bool should_be_transparent)
{
IntPtr flags = GetWindowLong(this.Handle, GWL_EXSTYLE);
if (((flags.ToInt64() & WS_EX_TRANSPARENT.ToInt64()) > 0) == should_be_transparent)
{
return;
}
else
{
SwapTransparent();
EnableGUIControls(!should_be_transparent);
}
}
private void SwapTransparent()
{
IntPtr flags = new IntPtr(GetWindowLong(this.Handle, GWL_EXSTYLE).ToInt64() ^ WS_EX_TRANSPARENT.ToInt64());
SetWindowLong(this.Handle, GWL_EXSTYLE, flags);
}
protected override void OnKeyUp(KeyEventArgs e)
{
if (!e.Alt)
{
SetTransparentToMouse(default_mouse_transparency);
}
base.OnKeyUp(e);
}
protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
{
if (e.Alt)
{
SetTransparentToMouse(!default_mouse_transparency);
}
base.OnKeyDown(e);
}
//Commenting out the call to this, or any line within this resolves the problem!:
void EnableGUIControls(bool enabled)
{
this.Button_Opacity.Enabled = enabled;
this.Button_Close.Enabled = enabled;
this.Button_Minimize.Enabled = enabled;
this.Button_Open.Enabled = enabled;
this.Button_Pan.Enabled = enabled;
this.Button_Sizemode.Enabled = enabled;
this.Button_Zoom.Enabled = enabled;
}
当所有控件都被禁用时,就没有焦点控件可以捕获鼠标消息并将其重定向到窗体。请尝试Form.Focus()而不是Form.Activate()。