新建一个MFC 对话框程序
添加成员变量 NOTIFYICONDATA m_tnd;
添加方法
BOOL SetupTrayIcon(HWND hwnd) { //ZeroMemory(&m_tnd, sizeof(NOTIFYICONDATA)); m_tnd.cbSize = sizeof( NOTIFYICONDATA ); m_tnd.hWnd = hwnd;//this->GetSafeHwnd();//所在对话框窗口句柄 m_tnd.uID = IDR_MAINFRAME; m_tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; //m_tnd.dwInfoFlags = NIIF_USER; m_tnd.uCallbackMessage = WM_LBUTTONDBLCLK; //m_tnd.uTimeout = 3; m_tnd.hIcon = m_hIcon;//需要指定一个图标!这里是所在对话框的图标 wcscpy_s(m_tnd.szTip,_T("我的任务栏程序")); return Shell_NotifyIcon( NIM_ADD, &m_tnd ); }
上面的代码新建一个图标在系统托盘处。
当推出系统时删除托盘图标
BOOL RemoveTrayIcon() { return Shell_NotifyIcon( NIM_DELETE, &m_tnd ); }
添加显示气泡方法
BOOL ShowToolTip(LPCTSTR szMsg,LPCTSTR szTitle,DWORD dwInfoFlags,UINT uTimeout) { m_tnd.cbSize=sizeof(NOTIFYICONDATA); m_tnd.uFlags = NIF_INFO; m_tnd.uVersion = NOTIFYICON_VERSION; m_tnd.uTimeout = uTimeout; m_tnd.dwInfoFlags = dwInfoFlags; wcscpy_s( m_tnd.szInfoTitle, szTitle );//气泡标题 wcscpy_s( m_tnd.szInfo, szMsg );//气泡内容 //wcscpy_s( m_tnd.szTip, _T("tip") ); SetTimer(1, 1000, NULL); return Shell_NotifyIcon( NIM_MODIFY, &m_tnd ); }
为了让气泡消失,设置一个定时器,过一段时间将气泡的提示信息设为空。就能关闭气泡显示了。
BOOL CloseToolTip() { m_tnd.cbSize=sizeof(NOTIFYICONDATA); m_tnd.uFlags = NIF_INFO; wcscpy_s( m_tnd.szInfo, _T("") );//气泡内容 设置为空即可取消气泡提示 return Shell_NotifyIcon( NIM_MODIFY, &m_tnd ); }
void OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加控件通知处理程序代码 KillTimer(nIDEvent); CloseToolTip(); }
调用方法:
在OnInitDialog调用 SetupTrayIcon(m_hWnd);
在OnClose里调用 RemoveTrayIcon
在某个按钮事件里写ShowToolTip(_T("测试消息"), _T("测试"),NULL,3000);
注意:targetver.h需要修改如下2个定义:
#ifndef WINVER // 指定要求的最低平台是 Windows Vista。 //#define WINVER 0x0600 // 将此值更改为相应的值,以适用于 Windows 的其他版本。 #define WINVER 0x0501 #endif #ifndef _WIN32_WINNT // 指定要求的最低平台是 Windows Vista。 //#define _WIN32_WINNT 0x0600 // 将此值更改为相应的值,以适用于 Windows 的其他版本。 #define WINVER 0x0501 #endif
来源:http://www.cnblogs.com/likwo/archive/2010/02/24/1672870.html