開發具有Windows工作列佈告區圖示的應用程式 (轉)
開發具有工作列佈告區圖示的應用
北京1303信箱15分箱 尹小功
許多應用程式,如輸入法管理器、等均在工作列佈告區中放置一個有自已特色的圖示,該圖示讓知道有一個後臺程式正在執行,同時也提供了一種修改設定的快捷方法,本文將以C++
Builder為例簡述它的實現方法。
開啟一個新工程,將工程取名為test、單元檔案取名為main。在視窗上放置二個按鈕、一個標籤,其屬性按如下設定屬性值
Label1 Caption 按OK按鈕...終目程式
OKButton Caption &OKButton
CancelButton Caption &CancelButton
開啟檔案main.h,加入斜體部分宣告(以手工輸入部分均以斜體表示,以下同)
class TForm1 : public TFo
{
__published: // -managed Components
TButton *OKButton;
TButton *CancelButton;
TLabel *Label1;
void __fastcall FormCreate(T *Sender);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall OKButtonClick(TObject *Sender);
void __fastcall CancelButtonClick(TObject *Sender);
private: // User declarations
unsigned ugIconMessage;
void AddTray();
void DeleteTray();
protected:
virtual void __fastcall WndProc(Messages::TMessage &Message);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
切換到main.cpp,加入以下及宣告
#include
#pragma hdrstop
#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma re "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void TForm1::AddTray()//建立工作列佈告區圖示
{
NOTIFYICONDATA icondata;①
memset(&icondata,0,sizeof(icondata));②
icondata.cbSize=sizeof(icondata);
icondata.hWnd=Handle;③
strncpy(icondata.szTip,"我的任務",sizeof(icondata.szTip));④
Application->Icon->LoadFromFile("e:yxgmapsystemicoyxg.ico");
icondata.hIcon=Application->Icon->Handle; ⑤
icondata.uCallbackMessage=ugIconMessage;⑥
icondata.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;⑦
_NotifyIcon(NIM_ADD,&icondata);⑧
}
void TForm1::DeleteTray()//刪除工作列佈告區圖示
{
NOTIFYICONDATA icondata;
memset(&icondata,0,sizeof(icondata));
icondata.cbSize=sizeof(icondata);
icondata.hWnd=Handle;
Shell_NotifyIcon(NIM_DELETE,&icondata); ⑧
}
void __fastcall TForm1::WndProc(Messages::TMessage &Message)
{
if(Message.Msg==ugIconMessage)//如果產生的是與該圖示相關的訊息
{
if(Message.LParam==WM_LBUTTONLCLK)
Application->Tenate();⑨
if(Message.LParam==WM_RBUTTONDBLCLK)
{
ShowWindow(Application->Handle,SW_SHOW);//
Application->ShowMainForm=true;
Form1->Visible=true; ⑩
}
return;
}
TForm::WndProc(Message);
}
①申請一個工作列佈告區圖示的結構變數;
②將結構變數的內容清零;
③取得當前視窗的控制程式碼;
④輸入滑鼠經過該圖示時的提示字串;
⑤將自已所喜愛的圖示檔案作為工作列佈告區的圖示;
⑥取得回撥資訊變數;
⑦當結構變數中成員hIcon、uCallbackMessage與szTip出錯時將給出錯誤標誌;
⑧函式Shell_NotifyIcon()在工作列佈告區產生或刪除一個圖示;
⑨當滑鼠左鍵在該圖示處雙擊時,終止程式執行;
⑩當滑鼠右鍵在該圖示處雙擊時,顯示與該圖示相關的應用程式。我們知道,所有的TWinControl派生來的VCL類都有一個WndProc函式,呼叫這個函式可以傳送訊息並被相關的視窗接收,WndProc被定義成一個虛擬函式,這樣一個派生類就可以定義它自已的WndProc函式來代替其父類的WndProc函式。在這裡,與工作列佈告區圖示相關的訊息由子類的WndProc函式處理,否則呼叫父類的WndProc處理。
在Form1的OnCreate事件中加入以下程式碼:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ugIconMessage=RegisterWindowMessage("IconNotify");①
AddTray();②
Form1->Visible=false;③
}
①呼叫RegisterWindowMessage()函式來建立一個獨一無二的訊息編號,以確保沒有衝突;
②在工作列佈告區建立圖示;
③顯示窗體;
在Form1的OnDestroy事件中加入DeleteTray()函式以刪除圖示。
將OKButton與CancelButton按鈕的OnClick事件增加程式碼以隱藏主視窗及終止程式執行。
void __fastcall TForm1::OKButtonClick(TObject *Sender)
{
Form1->Visible=false;
ShowWindow(Application->Handle,SW_HIDE);
Application->ShowMainForm=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CancelButtonClick(TObject *Sender)
{
Application->Terminate();
}
最後,在WinMain函式中增加兩行程式碼以便程式在開始執行時就隱藏主窗體。
WIN WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
ShowWindow(Application->Handle,SW_HIDE);
Application->ShowMainForm=false;
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988893/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Qt開發】更改應用程式圖示和工作列圖示QT
- Windows XP 清除工作列隱藏圖示記錄(轉)Windows
- 修改Windows工作列的時間顯示(轉)Windows
- 用C++Builder實現工作列圖示動畫效果 (轉)C++UI動畫
- Windows 7工作列無法顯示電源圖示解析Windows
- 【轉】設定Qt應用程式圖示及應用程式名QT
- 提取應用程式中的圖示資源 (轉)
- windows10系統工作列不顯示執行中程式圖示如何解決Windows
- Win10工作列不顯示應用圖示怎麼辦 應用已經在執行但不顯示Win10
- Windows10系統隱藏工作列音量圖示的方法Windows
- 微軟 Windows 11 22H2 更新要來了!允許使用者禁用工作列通知區域所有應用圖示微軟Windows
- 用 OSGi 應用程式開發和工作的最佳實踐
- Windows10系統隱藏工作列“新通知”圖示的方法Windows
- 工作列圖示空白,圖示是一塊白板
- win10改工作列圖示方法 win10如何更改工作列圖示Win10
- win10qq圖示怎樣在工作列顯示_win10qq圖示在工作列顯示的方法Win10
- VC開發應用程式答疑 (轉)
- Windows10系統下工作列圖示名稱不顯示的解決方法Windows
- 在命令列開發 Android 應用程式命令列Android
- Android應用設定多個啟動圖示,動態列換應用圖示Android
- iOS 11開發教程(八)定製iOS11應用程式圖示iOS
- 開發 Linux 命令列實用程式(轉)Linux命令列
- win10工作列為什麼不顯示開啟的應用 win10工作列異常修復Win10
- 在工作列上顯示圖示 (轉)
- IOS開發之xcode 4設定應用程式圖示及載入圖片iOSXCode
- 電腦工作列怎麼新增藍芽圖示?電腦工作列新增藍芽圖示的方法教程藍芽
- QT 讓工作列圖示閃爍QT
- Electron工作列圖示定製分析
- 玩轉Windows桌面圖示 (轉)Windows
- Windows10系統怎麼刪除工作列無效圖示Windows
- win10 圖示怎麼放到工作列_win10怎麼把圖示放到工作列Win10
- win10 開機工作列圖示圖片消失怎麼辦Win10
- Linux下應用程式開發:QT中使用圖形庫(轉)LinuxQT
- 字型圖示的應用
- Windows App 應用開發教程WindowsAPP
- Windows 應用開發的系統要求Windows
- 用Nim語言開發windows GUI圖形介面程式WindowsGUI
- 微軟在應用程式新圖示設計中加入Windows 10X的元素微軟Windows