這兩天想寫個小程序,一個圖標在系統托盤上的小程序,於是查了一晚上MSDN,在此作一個小小的總結。
平臺:Microsoft Visual Studio 2005
類庫:.NET Framework 2.0 (Windows Form)
語言:C++/CLI
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
我們知道,寫一個Windows Form程序,主要就是寫一個自己的Form類,不妨取名爲MyForm,繼承於類庫中的Form類。
public ref class MyForm : public System::Windows::Forms::Form
{
…
}
接下來,主要說明一下關於系統托盤的幾個控件的導入和編寫(其他的按鈕等不再說明)。
首先,爲了不在任務欄上看到程序的標籤,我們先把該標籤隱藏。(沒有特別說明,下面所有的語句都加入到MyForm的初始化函數中)
this->ShowInTaskbar = false;
然後再來添加系統托盤上的圖標。系統托盤圖標的空間名爲NofityIcon,我們在MyForm類中添加一個私有成員,命名爲 notifyIcon1。
private: System::Windows::Forms::NotifyIcon^ notifyIcon1;
只是這樣還不能顯示圖標,我們還需要給程序加載一個系統托盤圖標。
this->notifyIcon1->Icon = (cli::safe_cast<System::Drawing::Icon^>(resources->GetObject(L"notifyIcon1.Icon")));
然後我們可以通過notifyIcon1的成員屬性Visible來控制是否顯示圖標。如果顯示:
this->notifyIcon1->Visible = true;
當我們把鼠標移動到圖標上時,可以出現浮動框。如果只是出現靜態文字。我們只需簡單的設置notifyIcon1的Text屬性。
this->notifyIcon1->Text = “這裏爲要顯示的文字”;
如果要顯示更爲詳細的信息,我們可以通過設置BalloonTipIcon,BalloonTipText,BalloonTipTitle屬性來控制。再調用ShowBalloonTip方法來顯示。
如果要動態顯示,我們可以爲上述的幾個屬性和方法寫成一個事件,各屬性值爲隨時取得的所需值。這裏不作詳細討論。
基本功能實現了,現在我們需要右鍵單擊圖標時,出現一個快捷菜單,這個是程序中常用的功能。
首先,我們建立一個快捷菜單,比如叫ctMenu,作爲MyForm的私有成員。
private: System::Windows::Forms::ContextMenuStrip^ ctMenu;
然後我們爲notifyIcon1加載該菜單。
this->notifyIcon1->ContextMenuStrip = this->ctMenu;
接下來就是完成這個快捷菜單。這裏說下最基本的操作,就是添加菜單。比如我們要添加三個一級菜單。
首先是建立三個菜單。
private: System::Windows::Forms::ToolStripMenuItem^ 菜單1;
private: System::Windows::Forms::ToolStripMenuItem^ 菜單2;
private: System::Windows::Forms::ToolStripMenuItem^ 菜單3;
然後我們加載這些菜單。
this->ctMenu->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(3) {this->菜單1, this->菜單2, this->菜單3});
如果我們 [菜單1] 還有兩個二級菜單。我們可以這麼做,先定義兩個菜單。
private: System::Windows::Forms::ToolStripMenuItem^ 菜單11;
private: System::Windows::Forms::ToolStripMenuItem^ 菜單12;
然後在加載到菜單1上面。
this->菜單1->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->菜單11, this->菜單12});
這些是Windows Form中寫系統托盤程序的主要方法,當然要完善這個程序,還是要做很多工作的。