2014/12/31

【C#】製作不規則的視窗

  在C#中要建立不規則視窗(Irregularly Shaped Window)非常簡單,只需要準備一張欲顯示形狀的底圖並修改幾個視窗屬性(Window Properties)即可完成:
  1. 設定FormBorderStyleNone

    可透過設定頁面完成設定或是直接撰寫程式
    FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    
  2. 指定BackgroundImage並依據需求設定BackgroundImageLayout
  3. 設定TransparentKey為底圖不要顯示部分的顏色,若使用範例圖片則設定為白色
  4. 到目前為止已經完成客製化的視窗介面,編譯並執行可以看到視窗呈現愛心形狀,心型以外區域可以顯示桌面內容,點選心型以外的區域也可不受限制
  因為一開始我們把FormBorderStyle設定為None,邊框都不顯示連帶的最上面的標題列與控制盒(最小、縮小、最大化按鈕)也一併被取消了,因此若需要相關控制必須自行增加相關按鈕實現,底下示範移動視窗功能:
  1. 切換到檢視程式碼視窗,在視窗類別中增加變數
    private Point mouse_offset;
    
  2. 增加MouseDown事件
    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        mouse_offset = new Point(-e.X, -e.Y);
    }
    
  3. 增加MouseMove事件
    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            Point mousePos = Control.MousePosition;
            mousePos.Offset(mouse_offset.X, mouse_offset.Y);
            Location = mousePos;
        }
    }
    
  4. 若不是透過屬性視窗新增事件,記得自己手動加入事件註冊
    this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown);
    this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseMove);
    
  完成上述步驟後,此視窗就可以透過滑鼠左鍵拖曳進行移動了!

範例用圖: