1:在任务栏添加,删除图标
2:在任务栏图标上点击鼠标,弹出菜单
3:当鼠标在任务栏图标上hover的时候,弹出Balloon Tip.
这是程序被最小化到托盘后的效果图:
![](http://oss.lzu.edu.cn/blog/attachment/0_64_36796baf446741f.jpg)
下面的程序就是用来演示上面这三个方面的。
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