2010-12-10 42 views
1

我希望这是有道理的......如何使不具有标准的Windows窗体看看C#

它不仅适用于C#,但这就是我们在做这个,所以我用它标记

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

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

回答

1

这样做的官方方式是处理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财产。您可以为表单分配一个非矩形区域,并将其剪裁到该区域。

0

你可以用WPF来做到这一点。

  1. 创建一个WPF窗口
  2. Window.WindowStyle = “WindowStyle.None”
  3. Window.AllowsTransparency = “真”
  4. Window.Background = “透明”

这使你透明的Window。然后在Window把一个Ellipse

<Ellipse Height="80" Width="80" Fill="White"/> 
0

虽然以前的答案已表示,你可以做到这一点使用WPF,你也可以做到这一点使用Windows窗体。

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