在Windows操作系統中
一
NOTIFYICONDATA結構包含了系統用來處理托盤圖標的信息
typedef struct—NOTIFYICONDATA {
DWORD cbSize;
//以字節為單位的這個結構的大小
HWND hWnd;
//接收托盤圖標通知消息的窗口句柄
UINT uID;
//應用程序定義的該圖標的ID號
UINT uFlags;
//設置該圖標的屬性
UINT uCallbackMessage;
//應用程序定義的消息ID號
HICON hIcon; //圖標的句柄
char szTip[
} NOTIFYICONDATA
該結構中
NIF_ICON
NIF_MESSAGE
NIF_TIP
二
全局函數Shell_NotifyIcon()用於在托盤上增加
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage
Pnid是上面的NOTIFYICONDATA結構的指針
dwMessage是被傳遞的消息
NIM_ADD
NIM_DELETE
NIM_MODIFY
三
首先我們用AppWizard創建一個不基於文檔和視圖結構的應用程序Tray
pFrame
pFrame
在CMainFrame類中加入NOTIFYICONDATA結構的保護成員變量m_tnid
m_tnid
m_tnid
m_tnid
m_tnid
//用戶定義的回調消息
CString szToolTip;
szToolTip=_T(
_tcscpy(m_tnid
m_tnid
HICON hIcon;
hIcon=AfxGetApp()
m_tnid
::Shell_NotifyIcon(NIM_ADD
if(hIcon)::DestroyIcon(hIcon);
返回消息的ID應在主框架類的頭函數中定義
#define MYWM_NOTIFYICON WM_USER+
為了處理圖標返回消息
LRESULT CMainFrame::WindowProc(UINT message
{
switch(message){
case MYWM_NOTIFYICON:
//如果是用戶定義的消息
if(lParam==WM_LBUTTONDBLCLK){
//鼠標雙擊時主窗口出現
AfxGetApp()
}
else if(lParam==WM_RBUTTONDOWN){ //鼠標右鍵單擊彈出選單
CMenu menu;
menu
CMenu?pMenu=menu
CPoint pos;
GetCursorPos(&&pos);
pMenu
}
break;
case WM_SYSCOMMAND:
//如果是系統消息
if(wParam= =SC_MINIMIZE){
//接收到最小化消息時主窗口隱藏
AfxGetApp()
return
}
break;
}
return CFrameWnd::WindowProc(message
}
為使應用程序退出時圖標消失
::Shell_NotifyIcon(NIM_DELETE
至此
本程序在VC++
From:http://tw.wingwit.com/Article/program/net/201311/11634.html