//新建一个基于单文档的工程
//将trayicon类引入工程,并引入图标作为动态显示用
//在工程中新建一个菜单ID为IDR_TRAYPOPUP,添加两个命令ID:ID_SHOWWINDOW 和 ID_HIDEWINDOW
//并利用类向导在CMainFrame类中为它们添加命令处理函数
void CMainFrame::OnShowwindow()
{
// 显示窗口
this->ShowWindow(SW_SHOW);
}
void CMainFrame::OnHidewindow()
{
// 隐藏窗口
this->ShowWindow(SW_HIDE);
}
//在类CMainFrame头文件前添加
#include "ntray.h"
#define MAXICONS (int)9 //定义图标的最大数目,具体工程具体修改数目
#define DELAY (DWORD)100 //定义动画图标的时间延迟
//在DECLARE_MESSAGE_MAP()前添加自定义消息
afx_msg LRESULT OnTrayNotification(WPARAM wParam, LPARAM lParam);
//声明trayicon类对象
CTrayNotifyIcon m_TrayIcon;
//声明图标数组
HICON m_hIcons[MAXICONS];
//在CMainFrame的实现文件中添加消息宏ID
#define WM_TRAYNOTIFY (WM_USER + 100)
//在BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 和 END_MESSAGE_MAP()之间添加消息映射
ON_MESSAGE(WM_TRAYNOTIFY, OnTrayNotification)
//在CMainFrame的实现文件中定义消息处理函数
LRESULT CMainFrame::OnTrayNotification(WPARAM wParam, LPARAM lParam)
{
//Delegate all the work back to the default implementation in
//CTrayNotifyIcon.
return m_TrayIcon.OnTrayNotification(wParam, lParam);
}
//在CMainFrame的构造函数中添加icon的初始化代码
for (int i=0; i<MAXICONS; i++)
{
//任务栏图标,注意引入的图标的ID值为连续的,且IDI_ICON1的值为图标ID中最小的
m_hIcons[i] = AfxGetApp()->LoadIcon(IDI_ICON1 + i);
}
//在CMainFrame的OnCreate(LPCREATESTRUCT lpCreateStruct) 函数中添加
if (!m_TrayIcon.Create(this, IDR_TRAYPOPUP, _T("提示信息"), m_hIcons, MAXICONS, DELAY, WM_TRAYNOTIFY))
{
AfxMessageBox(_T("Failed to create tray icon"), MB_OK | MB_ICONSTOP);
return -1;
}
//在需要使用动态图标或静态图标处加入以下代码
if (m_TrayIcon.UsingAnimatedIcon())//判断是否处于动态显示状态
{
m_TrayIcon.SetIcon(m_hIcons[0]);//设置通知区为静态图标
m_TrayIcon.SetTooltipText(_T("静止也美!"));
}
else
{
m_TrayIcon.SetIcon(m_hIcons, MAXICONS, DELAY);//设置通知区为动态图标
m_TrayIcon.SetTooltipText(_T("运动才美!"));
}
备注:具体的类文件,请到我的资源里下载。
http://download.csdn.net/source/1459937
晨曦夕辰
2009.07.03