我希望这是有道理的......
它不仅适用于c#,但我们正在这样做,所以我用它标记了
我试图弄清楚如何使窗体看起来不像窗体。我想用一个有自己的关闭按钮和自己的非方形外观的图形替换它。如果我没有意义,我很抱歉,我不知道如何解释这个。
谢谢你,如果你明白我在说什么。
答案 0 :(得分:1)
这样做的官方方法是处理Windows在您希望绘制表单的非客户区域(标题栏,关闭按钮,边框等)时发送到窗口的WM_NCPAINT消息。 )这可能很麻烦,但可能没有必要。 Scott建议了一种获得无边界WPF窗口的方法,而Windows Forms方法也是类似的。请参阅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属性。您可以为表单指定一个非矩形区域,它将被剪切到该区域。
答案 1 :(得分:0)
您可以使用WPF执行此操作。
这为您提供了透明的Window
。然后在Ellipse
:
Window
<Ellipse Height="80" Width="80" Fill="White"/>
答案 2 :(得分:0)
虽然之前的回答表明您可以使用WPF执行此操作,但您也可以使用Windows窗体执行此操作。
创建非矩形Windows窗体。这是how。