1:在任務欄添加,刪除圖標
2:在任務欄圖標上點擊鼠標,彈出菜單
3:當鼠標在任務欄圖標上hover的時候,彈出Balloon Tip.
這是程序被最小化到托盤後的效果圖:
下面的程序就是用來演示上面這三個方面的。
void CnidDlg::OnBnClickedOk()
{
/////////////////////////////////////////////////////////////////////////
//以下代碼展示在任務欄添加圖標的過程,要注意的是必須在stdafx.h中把_WIN32_IE聲明爲0x0500
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
//nid.uFlags=NIF_ICON;
nid.uFlags=NIF_MESSAGE|NIF_INFO|NIF_ICON|NIF_TIP;
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
::Shell_NotifyIcon(NIM_ADD,&nid);
/////////////////////////////////////////////////////////////////////////
//以下代碼展示了任務欄提示框的用法
//nid.uID=IDR_MAINFRAME;
//nid.uFlags=NIF_MESSAGE|NIF_INFO|NIF_ICON|NIF_TIP;
nid.dwInfoFlags=NIIF_INFO;
_tcscpy(nid.szInfoTitle,"自動提示");
strcpy(nid.szTip,"任務欄圖標操作演示程序");
strcpy(nid.szInfo,"本程序已經轉入後臺運行......");
nid.uCallbackMessage=WM_BRUN; //這裏自定義了一個消息
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
::Shell_NotifyIcon(NIM_MODIFY,&nid);
this->ShowWindow(SW_HIDE);
//OnOK();
}
LRESULT CnidDlg::OnBackGround(WPARAM wParam,LPARAM lParam)
{
//新建一個菜單資源,定義了在任務欄圖標上點擊右鍵和左鍵不同的動作
switch(lParam)
{
case WM_RBUTTONUP://右鍵起來時彈出快捷菜單,這裏只有一個“關閉”
{
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu* pSubMenu = menu.GetSubMenu(0);
::SetMenuDefaultItem(pSubMenu->m_hMenu, 0, TRUE);
CPoint mouse;
GetCursorPos(&mouse);
::SetForegroundWindow(this->m_hWnd);
::TrackPopupMenu(pSubMenu->m_hMenu, 0, mouse.x, mouse.y, 0,
this->m_hWnd, NULL);
break;
}
case WM_LBUTTONDBLCLK:
{
this->ShowWindow(SW_SHOWNORMAL); //處理左鍵雙擊
break;
}
}
return 0;
}
void CnidDlg::OnBnClickedCancel()
{
//以下方法展示了將任務欄圖標去掉的過程
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON;
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
::Shell_NotifyIcon(NIM_DELETE,&nid);
this->EndDialog(1);
OnCancel();
}
源代碼可以從這裏下載:
http://oss.lzu.edu.cn/blog/job.php?action=download&pid=&tid=1082&aid=429
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1621164