在C#中绘制所有非客户区域

时间:2011-03-10 00:38:21

标签: c# wpf winforms gdi

我希望在C#中绘制非客户区域,例如,将矩形作为表格,我想要一个椭圆(这是一个例子),但我该怎么办呢?

我基本上想要绘制我所有的非客户区域,我想这样做我将不得不重写一些方法,但是哪些方法?

我找到了一个使用'xaml'的例子,我认为这是windows presentation foundation app,但我还不太了解。

3 个答案:

答案 0 :(得分:3)

m0sa已经提供了a WPF answer

对于WinForms,您需要处理WM_NCPAINT消息(覆盖Control.WndProc)并启用分层窗口样式,以便在边界框中具有透明区域。

答案 1 :(得分:0)

您必须像这样设置窗口xaml文件

<Window x:Class="[YourwindowClass]"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="..." 
  WindowStyle="None" 
  AllowsTransparency="True" 
  Background="Transparent">
    [Draw the window]
</Windows>

您需要生成自己的点击处理程序来拖动窗口。有一些示例herehere

答案 2 :(得分:0)

如果您正在谈论Winforms,并希望在非客户区域绘制,Ben的建议将有效。

如果你想让你的窗户形状不同 - 比如像时钟那样圆形,那么你就会看到区域。

    GraphicsPath path = new GraphicsPath();
    path.AddEllipse(100, 100, 100, 100);
    this.Region = new Region(path);