windows程序托盘图标以及消息提示--示例程序

之前两个博客介绍一些基本姿势,都是msdn上的,今天就介绍一下如何使用吧。

为了简单起见,还是创建一个MFC based on dialog 功能吧。

1创建托盘图标,封装了成一个函数:

NOTIFYICONDATA m_nid;
bool SetupTrayIcon(HWND m_hWnd)
{
    m_nid.cbSize=sizeof(NOTIFYICONDATA);// 结构大小
    m_nid.hWnd=m_hWnd;  // 接收 托盘通知消息 的窗口句柄
    m_nid.uID=IDR_MAINFRAME;                            
    m_nid.uFlags=NIF_MESSAGE//表示uCallbackMessage 有效 
    m_nid.uCallbackMessage=WM_PROC; // 消息被发送到此窗口过程
    m_nid.hIcon=::LoadIcon(::GetModuleHandle(NULL),MAKEINTRESOURCE(IDR_MAINFRAME)); 
    strcpy(m_nid.szTip,"我的任务栏程序");              // 提示文本
    return 0!=Shell_NotifyIcon(NIM_ADD,&m_nid); 
}

2消息提醒
如果你仔细阅读过NOTIFYICONDATA,你肯定会恍然大悟,气泡提示不是针对所有的系统的。

XP上当然一点作用没有,WIN7上是气泡提醒,而在WIN10上就变成了从侧面滑入的形式(Metro式的通知方式)。但是代码是通用的:

BOOL ShowBalloonTip(LPCTSTR szMsg,LPCTSTR szTitle,DWORD dwInfoFlags=NIIF_INFO,UINT uTimeout=1000)
{
    m_nid.cbSize=sizeof(NOTIFYICONDATA);
    m_nid.uFlags = NIF_INFO;
    m_nid.uVersion = NOTIFYICON_VERSION;
    m_nid.uTimeout = uTimeout;
    m_nid.dwInfoFlags = dwInfoFlags;
    strcpy(m_nid.szInfo,szMsg ? szMsg : _T(""));
    strcpy(m_nid.szInfoTitle,szTitle ? szTitle : _T(""));

    return 0!=Shell_NotifyIcon(NIM_MODIFY, &m_nid);
}    

3删除托盘图标
简单的很:

Shell_NotifyIcon(NIM_DELETE,&m_nid);

不多说了 上一个提示对比图吧:
windows程序托盘图标以及消息提示--示例程序_第1张图片
windows程序托盘图标以及消息提示--示例程序_第2张图片
通用的代码 不同的效果

你可能感兴趣的:(windows,托盘图标)