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