VC++ 添加托盘图标和气泡

来源:互联网 发布:美发大全软件下载 编辑:程序博客网 时间:2024/04/29 22:35

添加成员变量   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("测试"));


 

 注意: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