如何使一个没有标准窗口的表单看起来像C#

时间:2010-12-10 04:49:15

标签: c# winforms

我希望这是有道理的......

它不仅适用于c#,但我们正在这样做,所以我用它标记了

我试图弄清楚如何使窗体看起来不像窗体。我想用一个有自己的关闭按钮和自己的非方形外观的图形替换它。如果我没有意义,我很抱歉,我不知道如何解释这个。

谢谢你,如果你明白我在说什么。

3 个答案:

答案 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执行此操作。

  1. 创建WPF窗口
  2. Window.WindowStyle = “WindowStyle.None”
  3. Window.AllowsTransparency = “真”
  4. Window.Background = “透明”
  5. 这为您提供了透明的Window。然后在Ellipse

    中添加Window
    <Ellipse Height="80" Width="80" Fill="White"/>
    

答案 2 :(得分:0)

虽然之前的回答表明您可以使用WPF执行此操作,但您也可以使用Windows窗体执行此操作。

创建非矩形Windows窗体。这是how