[C#][WinForm] 取消視窗關閉/視窗小提示(BalloonTip)和視窗閃爍提示(FlashWindow)

[C#][WinForm] 取消視窗關閉/視窗小提示(BalloonTip)和視窗閃爍提示(FlashWindow)

使視窗關閉鈕失效、Task Toolbar的ICON提示視窗(BalloonTip)、像聊天室窗般閃爍工具列圖示( FlashWindow )

最近有點忙

這次就偷懶一次全都做在一起吧

1. 要讓Form的關閉按鈕變成縮小或者無效

雖然可以做一個Customer Form來讓這個按鈕消失(這比較麻煩 以後再說XD)

但還有更簡單的方法可以用

只要在FormClosing事件中動個小手腳即可

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = true;
            this.Hide();
        }

e.Cancel = true 就會使Form的關閉取消

 

2. 視窗小提示 也就是所謂的BalloonTip

這就是NotifyIcon就做好的方法 可以輕鬆使用

_notifyIcon.ShowBalloonTip(int timeout, string tipTitle, string tipText, ToolTipIcon tipIcon);

timeout : 提示在這時間內會顯示出來

tipTitle : 標題

tipText : 內容

tipIcon : 文字前顯示出來的圖片(ICON) 有Error, Info, Warning, None 可以自己玩看看差異

 

3. 視窗閃爍提示(FlashWindow)

這就要用到windows提供的dll來做出這個功能了

要先 using System.Runtime.InteropServices;

    [DllImport("user32.dll")]
    public static extern bool FlashWindow(IntPtr hWnd, bool bInvert);

這看不懂的話 要解釋也是蠻麻煩的

https://msdn.microsoft.com/zh-tw/library/windows/desktop/ms679346(v=vs.85).aspx

這裡有介紹 (超懶惰 XD )

 

接下來就隨意做一個Example來應用看看吧

先開啟一個空白的Windows Form 專案

更改一下Form1的Constructor即可 程式碼如下

public partial class Form1 : Form
    {
        NotifyIcon _notifyIcon = new NotifyIcon();
        ContextMenuStrip _contextMenuStrip = new ContextMenuStrip();

        bool isClose = false;

        public Form1()
        {
            InitializeComponent();

            _contextMenuStrip.Items.Add("Show", null, (s, e) => { this.Show(); });
            _contextMenuStrip.Items.Add("Flash", null, (s, e) => { FlashWindow(this.Handle, false); });
            _contextMenuStrip.Items.Add("Exit", null, (s, e) => { isClose = true; this.Close(); });

            _notifyIcon.ContextMenuStrip = _contextMenuStrip;
            _notifyIcon.Icon = new Icon(Application.StartupPath + "\\FreeIcon.ico");
            _notifyIcon.Text = "(Alex Wang 20161014) WinForm_FlashWindows_balloon";
            _notifyIcon.DoubleClick += (s, e) => { this.Show(); };
            _notifyIcon.Visible = true;

            this.FormClosing += (s, e) => {
                if (!isClose)
                {
                    // Cancel the closing command
                    e.Cancel = true;
                    this.Hide();
                    _notifyIcon.ShowBalloonTip(1000, "Form Moved", "This App is still running. You can Find it in the task toolbar!", ToolTipIcon.Info);
                }
            };

            this.Move += (s, e) =>
            {
                if (this.WindowState == FormWindowState.Minimized)
                {
                    _notifyIcon.ShowBalloonTip(1000, "Form Moved", "You clicked the Minimized button!", ToolTipIcon.Info);
                }
            };
        }

        /* 
         * hWnd: handle to window
         * bInvert: flash status
         */
        [DllImport("user32.dll")]
        public static extern bool FlashWindow(IntPtr hWnd, bool bInvert);

    }

出來的效果是

最小化的提示

點選關閉按鈕

對Icon點右鍵並點Flash

效果

今天就先到這吧 最近比較忙

以後會陸續新增我覺得好用的小功能

 

新手發文,有謬誤請告知,也請多多指教。