1. 程式人生 > >C# Winform 窗體美化(十、自定義窗體)

C# Winform 窗體美化(十、自定義窗體)

十、自定義窗體

寫在前面

最近在做 winform 應用程式,需要自定義一種視窗的樣式,所以就隨便搞了一個簡單的視窗。

效果圖

有兩種樣式,介面如下:
無標題:
無標題
有標題:
有標題

關鍵詞

1、黑色描邊邊框

對於視窗去掉原生的邊框這個操作很簡單【設定FormBorderStyle為None】,但是去掉邊框之後略顯生硬,所以就考慮如何做一個描邊。

方案a:用畫筆畫出來,但是畫出來的描邊會被控制元件擋住,所以作廢;
方案b:使用4個label,設定長寬和顏色,設定為最頂層,分別擺放在上下左右四個邊緣位置,現在來看效果還不錯,因為是控制元件是最頂層的原因,所以也不會被擋住,【如果你看到此處有什麼好主意一定告知一下,先謝過了 ^_^ 】

2、拖動視窗移動

由於設定FormBorderStyle為None的原因,所以原來視窗標題的拖動功能也一併去除了,所以需要重新來手動實現原來標題的移動功能,重寫OnMouseMove方法即可,程式碼如下:

protected override void OnMouseMove(MouseEventArgs e)
{
    base.OnMouseMove(e);
    if (e.Button == MouseButtons.Left)
    {
        //這裡一定要判斷滑鼠左鍵按下狀態,否則會出現一個很奇葩的BUG,不信邪可以試一下~~
        ReleaseCapture();
        SendMessage(Handle, 0x00A1
, 2, 0); } } [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

3、關於視窗屬性的新增

因為我做了描邊的功能,所以相對應的,應該會有一個描邊粗細的設定,當然放到屬性面板裡最好,這裡貼一下如何在屬性面板裡新增新專案:

private int _Border = 1
; [Category("Style")] [Description("窗體邊框粗細")] [DefaultValue(typeof(int), "1")] public int Border { get { return _Border; } set { if (_Border != value) { _Border = value; SetBorder(); } } }

具體解釋可以再VS看到,都很詳細。

原始碼

下載