我希望这是有道理的......如何使不具有标准的Windows窗体看看C#
它不仅适用于C#,但这就是我们在做这个,所以我用它标记
我想弄清楚如何使Windows窗体看起来不像Windows窗体。我想用一个拥有自己的关闭按钮和自己的非方形外观的图形替换它。如果我没有任何意义,我很抱歉,我不知道如何解释这一点。
谢谢,如果你明白我在说什么。
我希望这是有道理的......如何使不具有标准的Windows窗体看看C#
它不仅适用于C#,但这就是我们在做这个,所以我用它标记
我想弄清楚如何使Windows窗体看起来不像Windows窗体。我想用一个拥有自己的关闭按钮和自己的非方形外观的图形替换它。如果我没有任何意义,我很抱歉,我不知道如何解释这一点。
谢谢,如果你明白我在说什么。
这样做的官方方式是处理Windows发送到窗口的WM_NCPAINT消息,当它要求您绘制窗体的非客户区(标题栏,关闭按钮,边框等)时它可以相当麻烦,但可能没有必要。斯科特提出了一种获得无边界WPF窗口的方法,而Windows窗体方法类似。请参阅FormBorderStyle属性。
为了支持拖动窗口,就好像标题栏被拖动一样,您需要发送WM_NCLBUTTONDOWN消息到传递HT_CAPTION常量的窗口作为wParam。
例如,在想要成为“可拖动”的控件上处理MouseDown事件。
if (e.Button == MouseButtons.Left) {
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
这需要下面的P/Invoke声明。
const int WM_NCLBUTTONDOWN = 0xA1;
const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
最后,实现非矩形窗口,你会想看看在Region财产。您可以为表单分配一个非矩形区域,并将其剪裁到该区域。
你可以用WPF来做到这一点。
这使你透明的Window
。然后在Window
把一个Ellipse
:
<Ellipse Height="80" Width="80" Fill="White"/>
虽然以前的答案已表示,你可以做到这一点使用WPF,你也可以做到这一点使用Windows窗体。
创建非矩形Windows窗体。这里是how。