C# 透明WinForm在最大化和还原后无法调整大小
我想创建一个WinForm,它有一个普通的框架,但大部分应用程序是透明的。我遇到了一个问题,在最大化和还原窗口后,框架边框不再可单击——单击只会传递到我的应用程序后面的应用程序。我已经能够通过执行以下操作,在一个普通的WinForms应用程序中重现这一点:C# 透明WinForm在最大化和还原后无法调整大小,c#,.net,winforms,C#,.net,Winforms,我想创建一个WinForm,它有一个普通的框架,但大部分应用程序是透明的。我遇到了一个问题,在最大化和还原窗口后,框架边框不再可单击——单击只会传递到我的应用程序后面的应用程序。我已经能够通过执行以下操作,在一个普通的WinForms应用程序中重现这一点: 创建一个新的WinForms应用程序 将默认窗体的透明键和背景色设置为相同的颜色 运行应用程序 单击跑步表单的最大化按钮 单击向下恢复 窗体边框不再可单击(尽管有时我似乎在一侧得到1px的可单击边框) 网络上有很多关于透明表单和控件的信息,但
网络上有很多关于透明表单和控件的信息,但我在这个bug上什么也没发现。考虑到复制的简单性,我怀疑我是第一个遇到这种情况的人。有什么解决办法吗?我已经试过你的例子,没有发现任何问题。最大化后,当我恢复窗口时,边框仍然可以调整大小。也许我不完全理解你的问题,但根据我的经验,似乎没有bug。(我愿意发表评论而不是回答,但我没有足够的代表)在多台机器上复制了这一点后,似乎共同点是Aero。空气动力学主题和形态透明度似乎不能很好地结合在一起。
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;
}
}
}