新建一个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 );
}
{
//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 );
}
{
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 );
}
{
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 );
}
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();
}
{
// TODO: 在此添加控件通知处理程序代码
KillTimer(nIDEvent);
CloseToolTip();
}
调用方法:
在OnInitDialog调用 SetupTrayIcon(m_hWnd);
在OnClose里调用 RemoveTrayIcon
在某个按钮事件里写ShowToolTip(_T("测试消息"), _T("测试"));
注意: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
//#define WINVER 0x0600 // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#define WINVER 0x0501
#endif
#ifndef _WIN32_WINNT // 指定要求的最低平台是 Windows Vista。
//#define _WIN32_WINNT 0x0600 // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#define WINVER 0x0501
#endif