像QQ一样在任务栏右边通知区域显示小图标:
实现函数:
BOOL Shell_NotifyIcon(DWORD dwMessage, PNOTIFYICONDATA lpdata)
处理消息:
1、自定义消息,消息处理函数(回调函数)。回调函数中处理对通知区域小图标的事件,如左键单击小图标(WM_LBUTTONDOWN)、右键单击小图标(WM_RBUTTONDOWN),左键双击小图标(WM_LBUTTONDBLCLK)。
2、处理主窗体的OnSysCommand(UINT nID, LPARAM lParam),nID的含义:SC_CLOSE(点击右上角关闭图标)、SC_MINIMIZE(点击右上角最小化图标)等等。
3、处理OnCommand(WPARAM wParam, LPARAM lParam),通常右键单击通知区域的小图标都会弹出功能菜单,菜单项的命令在主窗体的OnCommand中处理。
具体实例:(对话框模式)
1、添加自定义消息
#define NOTIFYICONTRAY WM_USER + 1
添加消息成员函数
afx_msg LRESULT OnNotifyIconTray(WPARAM wParam, LPARAM lParam);
添加消息映射
ON_MESSAGE(NOTIFYICONTRAY, OnNotifyIconTray)
2、在主对话框添加成员:NOTIFYICONDATA m_NotifyIconData;在OnInitDialog()中初始化这个成员:
m_NotifyIconData.cbSize = sizeof(NOTIFYICONDATA);
m_NotifyIconData.hWnd = this->m_hWnd;
m_NotifyIconData.uID = IDR_MAINFRAME;//LoadIcon的ID,在回调函数中提供判断
m_NotifyIconData.uFlags = NIF_ICON|NIF_TIP|NIF_MESSAGE;
m_NotifyIconData.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//显示在通知区域中的图标的句柄
wcscpy(m_NotifyIconData.szTip, L"NotifyIcon");//显示的TIP信息
m_NotifyIconData.uCallbackMessage = NOTIFYICONTRAY;//自定义消息
Shell_NotifyIcon(NIM_ADD, &m_NotifyIconData);在OnInitDialog()中添加这句,可以是程序在运行的时候就在通知区域显示小图标。
3、当点击关闭图标和最小化图标时隐藏对话框,在OnSysCommand中添加如下代码:
switch (nID)
{
case SC_CLOSE:
case SC_MINIMIZE:
ShowWindow(SW_HIDE);
return;
default:
CDialog::OnSysCommand(nID, lParam);
}
4、双击通知区域图标显示对话框,右键单击该图标退出,OnNotifyIconTray函数:
OnNotifyIconTray(WPARAM wParam, LPARAM lParam)
{
if (wParam != m_NotifyIconData.uID)
{
return 0;
}
switch (lParam)
{
case WM_LBUTTONDBLCLK:
ShowWindow(SW_SHOW);
break;
case WM_RBUTTONDOWN:
SendMessage(WM_CLOSE);
break;
default:
return 0;
}
return 1;
}