-
//需要添加一個成員變量
-
NOTIFYICONDATA m_nd; //NOTIFYICONDATA結構
-
-
/***************************************
-
* 將圖標加入系統托盤
-
* 參數:
-
* hWnd - 窗體句柄
-
* hIcon - 所要加入的圖標句柄
-
* title - 懸停於系統托盤之上時所要顯示的消息
-
* uCallbackMessage - 消息標識(需用戶自己定義消息)
-
***************************************/
-
void CMyDlg::AddIcon(HWND hWnd, HICON hIcon, UINT uCallbackMessage, char *title)
-
{
-
m_nd.cbSize = sizeof(NOTIFYICONDATA);
-
m_nd.hWnd = hWnd;
-
m_nd.uID = IDR_MAINFRAME;
-
m_nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
-
m_nd.uCallbackMessage = uCallbackMessage;
-
m_nd.hIcon = hIcon;
-
strcpy(m_nd.szTip, title);
-
Shell_NotifyIcon(NIM_ADD, &m_nd); //加入圖標
-
}
-
-
//刪除系統托盤圖標
-
void CMyDlg::RemoveIcon()
-
{
-
Shell_NotifyIcon(NIM_DELETE, &m_nd);
-
}
href="http://www.j2megame.org/wupei/plugins/plogeshi/styles/plogeshi.css" type="text/css" rel="stylesheet" />下面就是爲圖標添加自己的響應消息:
-
//用戶定義的消息(在相應頭文件中加入)
-
#define MYWM_NOTIFYICON WM_USER+1
-
-
//添加WinProc消息函數
-
LRESULT CMyCatchScreenDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
-
{
-
// TODO: Add your specialized code here and/or call the base class
-
switch(message)
-
{
-
case MYWM_NOTIFYICON:
-
//如果是用戶定義的消息
-
if(lParam==WM_LBUTTONDOWN)
-
{
-
//添加自己的函數
-
-
//鼠標單擊圖標時主窗口出現
-
//ShowMyWindow();
-
}
-
else if(lParam==WM_RBUTTONDOWN)
-
{
-
//添加自己的函數
-
-
//鼠標右鍵單擊彈出選單
-
/*
-
CMenu menu;
-
menu.LoadMenu(IDR_MY_MENU); //載入事先定義的選單
-
CMenu*pMenu=menu.GetSubMenu(0);
-
CPoint pos;
-
GetCursorPos(&pos);
-
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,AfxGetMainWnd());
-
*/
-
}
-
break;
-
}
-
return CDialog::WindowProc(message, wParam, lParam);
-
}
調用演示:
-
void CMyDlg::ShowMyWindow()
-
{
-
RemoveIcon(); //刪除系統圖標
-
ShowWindow(SW_SHOW); //顯示窗口
-
}
-
-
void CMyDlg::HideMyWindow()
-
{
-
ShowWindow(SW_HIDE); //隱藏窗口
-
AddIcon(m_hWnd,m_hIcon,MYWM_NOTIFYICON,"MyDlg"); //添加系統圖標
-
}