Posted on 2009-04-03 17:55
besterChen 閱讀(1422)
評論(0) 編輯 收藏 引用 所屬分類:
WTL/MFC/GuiLib
看過一些文章,再網上也找了好多的資料,發現都比較麻煩,等自己操作了一遍以后才知道,原來不難的,現在把操作過程記錄下來,具體如下:
第一步,聲明一個NOTIFYICONDATA類,即:
NOTIFYICONDATA NotifyIcon;
該句可以放在Dlg類的聲明中,作為Dlg類的一個成員;也可以放在Dlg類的實現中,作為全局變量來使用。
第二步,聲明一個響應函數
afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM IParam);
用于響應鼠標操作。將這個函數放入Dlg類的聲明中,作為Dlg類的一個成員。
這里順手貼一些我寫的代碼:
void CbeskitDlg::OnNotifyIcon(WPARAM wParam,LPARAM IParam)
{
if (IParam == WM_LBUTTONUP)
{
// 左鍵單擊彈出主界面
ModifyStyleEx(0,WS_EX_TOPMOST);
ShowWindow(SW_SHOW);
}
else if (IParam == WM_RBUTTONDOWN)
{
//右鍵單擊彈出主菜單
}
}
第三步,定義消息名稱和消息號
:#define WM_NC WM_USER+1001 //用來處理鼠標指向托盤圖標時的提示信息
1001只是用于指定一個消息號,可以隨便指定。
第四步,注冊上一步自定義的消息的處理函數,
就是在BEGIN_MESSAGE_MAP(Dlg,CDialog)和END_MESSAGE_MAP()之間添加
ON_MESSAGE(WM_NC,OnNotifyIcon)。
第五步,添加將圖標加入系統托盤的代碼:
// 用于加載到托盤區
m_NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);
m_NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); // 裝載程序圖標
m_NotifyIcon.hWnd=m_hWnd;
lstrcpy(m_NotifyIcon.szTip,"beskit v1.0"); // 這里是鼠標移到托盤圖標時的提示信息
m_NotifyIcon.uCallbackMessage=WM_NC;
m_NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&m_NotifyIcon); // 添加托盤圖標
只要執行上述代碼,就會在系統托盤區添加一個程序圖標。
第六步,捕捉程序最小化的消息:
在OnSysCommand中增加:
else if( (nID & 0xFFF0) == SC_MINIMIZE)
{
toTray(); //放入托盤的函數
}
到這里就可以了!
添加好了圖標以后,等程序退出或者其它條件,需要把圖標從系統托盤區刪除,執行下面的代碼:
Shell_NotifyIcon(NIM_DELETE, &m_NotifyIcon);//刪除托盤圖標