透明WinForm在最大化和恢复后无法调整大小

时间:2012-06-25 08:38:18

标签: c# .net winforms

我想创建一个WinForm,它具有正常的框架,但应用程序的很大一部分是透明的。我遇到了一个问题,即在最大化并恢复窗口后,框架边框不再可点击 - 点击只是简单地传递到我的应用程序后面的应用程序。通过执行以下操作,我已经能够通过一个简单的WinForms应用程序重现这一点:

  1. 创建一个新的WinForms应用程序。
  2. 将TransparencyKey和默认表单的BackgroundColor设置为相同的颜色。
  3. 运行应用程序。
  4. 单击正在运行的表单的最大化按钮。
  5. 点击恢复。
  6. 表格边框不再可点击(虽然有时我似乎在一侧有1px可点击边框)。
  7. 网上有很多关于透明表单和控件的内容,但我没有发现这个bug。鉴于其复制的简单性,我怀疑我是第一个遇到这种情况的人。有什么想法绕过它?

1 个答案:

答案 0 :(得分:-1)

const int WM_SYSCOMMAND = 0x0112;
const int SC_MINIMIZE = 0xF020;
const int SC_MAXIMIZE = 0xF030;
const int SC_RESTORE = 0xF120;
const int SC_TOP = 0xF003;
const int SC_LEFTTOP = 0xF004;
const int SC_RIGHTTOP = 0xF005;
const int SC_DBCLICKTITLEBARMAX = 0xF122;
protected override void WndProc(ref Message m)
{
    base.WndProc(ref m); 
    if (m.Msg == WM_SYSCOMMAND)
    {
        int sc = m.WParam.ToInt32();
        if (sc == SC_RESTORE | sc == SC_LEFTTOP | sc == SC_TOP | sc == SC_RIGHTTOP | sc == SC_DBCLICKTITLEBARMAX )
        {
            FormBorderStyle oldvalue = this.FormBorderStyle;
            this.FormBorderStyle = FormBorderStyle.None;
            this.FormBorderStyle = oldvalue;
        }
    }
}
相关问题