C#アプリをタスクトレイに格納(その2)
2008-04-04 - babydaemonsの日記で書いたが、ウィンドウのアニメーションをさせずにタスクトレイに格納&元に戻す方法があった。
【C#】タスクトレイ表示によるFormの表示切替制御 - QA@ITがヒントになったが、this.WindowStateを変更するのではなくbase.Show()とbase.Hide()でFormの表示を制御する方法だ。
public partial class Form1 : Form { public Form1() { InitializeComponent(); } // cf. http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21135&forum=7 //Windowイベントの捕捉処理! protected override void WndProc(ref Message m) { //※下記例は、最小化ボタンクリックで、FormをHideするだけの処理にしている。 // 最小化されません! // その他の場合には、既定の処理をさせる!→base.WndProc(ref m) ; // Msgが、WM_SYSCOMMAND(0x112) // WParamが、SC_MINIMIZE(0xF020) if ((m.Msg == 0x112) && (m.WParam == (IntPtr)0xF020)) { base.Hide(); // 隠す } else { base.WndProc(ref m); } } private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) { base.Show(); // 表示する this.Visible = true; // フォームの表示 base.Activate(); // フォームをアクティブにする } private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; // 終了処理のキャンセル base.Hide(); // 隠す } } private void 終了XToolStripMenuItem_Click(object sender, EventArgs e) { notifyIcon1.Visible = false; // アイコンをトレイから取り除く Application.Exit(); // アプリケーションの終了 } }
http://d.hatena.ne.jp/toburau/20080128のエントリは対象がゲームだからアニメーション有りが良いのだろうけど、実用(?)のアプリケーションの場合はアニメーション無しが良い感じ。