0

在下面的主题中,有一些关于如何
使用一个按钮为两种方法创建切换的建议:
how-can-i-switch-between-two-methods-in-one-button-with-every-click

我怎么能用一个特定的鼠标按钮来实现这样的事情(例如在两个 LayeredWindowsAttributes 之间切换)?

或者我该如何编写以下代码?
右键单击 && bAlpha = 10:将透明度值设置为 255
右键单击​​ && bAlpha = 255:将透明度值设置为 10

这里的主要问题可能是我不知道如何像条件一样检查 bAlpha。

这就是我设置 bAlpha 值的方式:

private void Form1_MouseDown(object sender, MouseEventArgs e)
  {
   SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED);

        if (e.Button == MouseButtons.Right)
        {
            SetLayeredWindowAttributes(Handle, 0, 10, LWA_ALPHA);
            //SetLayeredWindowAttributes(Handle, 0, 255, LWA_ALPHA);
        }
  }
4

2 回答 2

1
bool _transparent;

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED);
    if (e.Button == MouseButtons.Right)
    {
        _transparent = !_transparent;
        byte alpha = (byte)(_transparent ? 10 : 255);
        SetLayeredWindowAttributes(Handle, 0, alpha, LWA_ALPHA);
    }
}
于 2019-10-20T13:36:53.443 回答
0

最终版本(包括整数到字节转换的修复)。

bool _transparent;

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED);
    if (e.Button == MouseButtons.Right)
    {
        _transparent = !_transparent;
        byte alpha = (byte)(_transparent ? 10 : 255);
        SetLayeredWindowAttributes(Handle, 0, alpha, LWA_ALPHA);
    }
}
于 2019-10-20T15:30:49.783 回答