2007年1月31日星期三

VC++任务栏提示区图标的实现

<a href=http://www.vczx.com/article/show.php?id=625>参考</a>
目前,许多应用软件都实现了WINDOW任务栏提示区图标,如金山词霸、超级解霸
等,这不仅增强了软件的特色,更方便了用户的使用。本文将介绍一个封装好的
类,用VC++来实现这项功能,希望对读者有所帮助。
一、一个简单的直接引用的方法:
我们可以使用直接引用WIN32 API函数的方法实现任务栏提示区图标。
1、定义一个NOTIFYICONDATA数据结构,初始化各数据项。其结构详见在线帮助。
2、使用WIN32 API函数Shell_NotifyIcon实现任务栏提示区图标。函数原形如下:
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(DWORD dwMessage,//消息类型
PNOTIFYICONDATA pnid //指向NOTIFYICONDATA结构的指针
);
消息类型包括:NIM_ADD 增加图标到任务栏;
NIM_DELETE 从任务栏删除图标;
NIM_MODIFY 修改任务栏图标;
二、一个更好的面对对象的方法:
为了使使用更加方便、合理,更符合面对对象的处理方法,我们应当封装一个类
(CSystemIcon),由此类实现任务栏提示区图标。
1、由CObject类派生出CsystemIcon类。
2、构造下列函数:
LRESULT OnIconNotification(WPARAM wID,LPARAM lEvent) //自定义消息处理函数
void DeleteIcon() //删除图标
void HideIcon() //隐藏图标
void ShowIcon() //显示图标
BOOL SetTooltipText(LPCTSTR pszTip) //设置提示文本
BOOL SetTooltipText(UINT nID)
CString GetTooltipText() const //得到提示文本
BOOL SetNotificationWnd(CWnd* pWnd) //设置通知窗口
CWnd* GetNotificationWnd() const //得到通知窗口
HICON GetIcon() const //得到图标
BOOL SetIcon(HICON hIcon) //设置图标
BOOL SetIcon(LPCTSTR lpszIconName)
BOOL SetIcon(UINT nIDResource)
BOOL SetStandardIcon(LPCTSTR lpIconName) //设置系统标准图标
BOOL SetStandardIcon(UINT nIDResource)
3、生成的CsystemIcon类详见下列源文件:
a、CsystemIcon类.H头文件:
/////////////////////////////////////////////////////////////////////////////
// SystemIcon.h : header file
//
#ifndef _INCLUDED_SYSTEMICON_H_
#define _INCLUDED_SYSTEMICON_H_
/////////////////////////////////////////////////////////////////////////////
// CSystemIcon window
class CSystemIcon : public CObject
// Construction/destruction
public:
CSystemIcon();
CSystemIcon(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID);
virtual ~CSystemIcon();
// Operations
public:
BOOL Enabled() { return m_bEnabled; }
BOOL Visible() { return !m_bHidden; }
//创建系统图标
Create(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID);
//关于提示文本
BOOL SetTooltipText(LPCTSTR pszTooltipText);
BOOL SetTooltipText(UINT nID);
CString GetTooltipText() const;
//关于图标
BOOL SetIcon(HICON hIcon);
BOOL SetIcon(LPCTSTR lpIconName);
BOOL SetIcon(UINT nIDResource);
BOOL SetStandardIcon(LPCTSTR lpIconName);
BOOL SetStandardIcon(UINT nIDResource);
HICON GetIcon() const;
void HideIcon();
void ShowIcon();
void DeleteIcon();
//关于通知窗口
BOOL SetNotificationWnd(CWnd* pNotifyWnd);
CWnd* GetNotificationWnd() const;
//自定义消息处理函数
virtual LRESULT OnIconNotification(WPARAM uID, LPARAM lEvent);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSystemIcon)
//}}AFX_VIRTUAL
// Implementation
protected:
BOOL m_bEnabled; //是否支持图标
BOOL m_bHidden; //是否隐藏图标
NOTIFYICONDATA m_tnd; //数据结构,请参考在线帮助
DECLARE_DYNAMIC(CSystemIcon)
};

没有评论: