[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
效果
今天就先到這吧 最近比較忙
以後會陸續新增我覺得好用的小功能
新手發文,有謬誤請告知,也請多多指教。