0

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

  1. 创建一个新的 WinForms 应用程序。
  2. 将默认表单的 TransparencyKey 和 BackgroundColor 设置为相同颜色。
  3. 运行应用程序。
  4. 单击运行窗体的最大化按钮。
  5. 点击还原。
  6. 表单边框不再可点击(尽管有时我似乎在一侧得到一个 1px 的可点击边框)。

网上有很多关于透明表单和控件的信息,但我没有发现这个错误。鉴于其复制简单,我怀疑我是第一个遇到这个问题的人。有什么办法绕过它吗?

4

1 回答 1

-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;
        }
    }
}
于 2012-09-15T15:43:48.987 回答