• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
thankgoodness
博客园    首页    新随笔    联系   管理    订阅  订阅

托盘CTrayNotify类

    NIM_ADD 添加图标到任务栏通知区;
    NIM_DELETE 删除任务栏通知区的图标;
    NIM_MODIFY 更改任务栏通知区的图标、回调消息标志、回调窗口句柄或提示字串;

   回调信息的获得及处理
   通过这种方式,系统通知应用程序用户对图标的操作。如果一个应用程序生成了两个以上的图标,那么你可以根据wParam来判断是哪个图标返回的鼠标操作。通常,标准的Win95任务栏图标有以下鼠标操作响应:

   当鼠标停留在图标上时,系统应显示提示信息tooltip;
   当使用鼠标右键单击图标时,应用程序应显示快捷菜单;
   当使用鼠标左键双击图标时,应用程序应执行快捷菜单的缺省菜单项。
   在Microsoft Windows环境中,0x8000到0xBFFF的消息是保留的,应用程序可以定义自定义消息


头文件
#ifndef _TRAYNOTIFY_H_
#define _TRAYNOTIFY_H_

class CTrayNotify
{
public:
 
 CTrayNotify();
 virtual    ~CTrayNotify();

    //设置和得到图标
 void       SetIcon(const HICON hIcon,BOOL bEnable=TRUE);
 HICON      GetIcon() const;

 //设置和得到消息
 void       SetMsg(UINT uMsg,BOOL bEnable=TRUE);
 UINT       GetMsg();

    //设置和得到提示
 void       SetTip(const char *szTip,BOOL bEnable=TRUE);
 void       GetTip(char* szTip,UINT uTxtLen) const;

 //设置和得到关联的窗口句柄
 BOOL       SetHwnd(const HWND hWnd);
 HWND       GetHwnd() const;

 //设置和得到ID号
 void       SetID(const UINT uID);
 UINT       GetID() const;
 
 //设置和得到uFlags
 void       SetFlag(UINT uFlag);
 UINT       GetFlag() const;
 
 //当用调用过SetIcon之类的函数后,不会立即更新,而必须调用此函数更新
 BOOL       Refresh();

 //控制图标是否可见
 BOOL       ShowIcon(BOOL bShow);

 //修改并更新
 BOOL       Modify(const NOTIFYICONDATA& nid);

 //得到NOTIFYICONDATA数据结构
 void       GetNid(NOTIFYICONDATA* pNid) const;

 //图标是否可见
 BOOL       IsIconShow() const;

 //去掉图标,并将NOTIFYICONDATA结构清零
 void       Reset();

protected:

 BOOL m_bShow;

 NOTIFYICONDATA m_nid;

private:
 
};

#endif

实现代码


#include <Windows.h>

#include "TrayNotify.h"

//由于该类实现比较简单,很多东西在MSDN中一查便知,所以也就不在此多加注释
/*---------------------------------------------------------------------------------
*/
CTrayNotify::CTrayNotify()
{
 memset((void*)&m_nid,0,sizeof(m_nid));
 m_nid.cbSize=sizeof(m_nid);
 m_bShow=FALSE;

}
/*---------------------------------------------------------------------------------
*/
CTrayNotify::~CTrayNotify()
{
 ShowIcon(FALSE);
}
/*---------------------------------------------------------------------------------
*/
void CTrayNotify::SetIcon(const HICON hIcon,BOOL bEnable)
{
 m_nid.hIcon=hIcon;
 if(bEnable)
  m_nid.uFlags|=NIF_ICON;
}
/*---------------------------------------------------------------------------------
*/
HICON CTrayNotify::GetIcon() const
{
 return m_nid.hIcon;
}
/*---------------------------------------------------------------------------------
*/
void CTrayNotify::SetMsg(UINT uMsg,BOOL bEnable)
{
 m_nid.uCallbackMessage=uMsg;
 if(bEnable)
  m_nid.uFlags|=NIF_MESSAGE;

}
/*---------------------------------------------------------------------------------
*/
UINT CTrayNotify::GetMsg()
{
 return m_nid.uCallbackMessage;
}
/*---------------------------------------------------------------------------------
*/
void CTrayNotify::SetTip(const char *szTip,BOOL bEnable)
{
 lstrcpyn(m_nid.szTip,szTip,sizeof(m_nid.szTip));
 if(bEnable)
  m_nid.uFlags|=NIF_TIP;
}
/*---------------------------------------------------------------------------------
*/
void CTrayNotify::GetTip(char *szTip,UINT uTxtLen) const
{
 lstrcpyn(szTip,m_nid.szTip,uTxtLen);
}
/*---------------------------------------------------------------------------------
*/
BOOL CTrayNotify::SetHwnd(const HWND hWnd)
{
 BOOL bRet=TRUE;
 if(IsWindow(hWnd))
 {
  m_nid.hWnd=hWnd;
 }
 else
  bRet=FALSE;
 return bRet;
}
/*---------------------------------------------------------------------------------
*/
HWND CTrayNotify::GetHwnd() const
{
 return m_nid.hWnd;
}
/*---------------------------------------------------------------------------------
*/
void CTrayNotify::SetID(const UINT uID)
{
 m_nid.uID=uID;
}
/*---------------------------------------------------------------------------------
*/
UINT CTrayNotify::GetID() const
{
 return m_nid.uID;
}
/*---------------------------------------------------------------------------------
*/
BOOL CTrayNotify::Refresh()
{
 return Shell_NotifyIcon(NIM_MODIFY,&m_nid);
}
/*---------------------------------------------------------------------------------
*/
BOOL CTrayNotify::ShowIcon(BOOL bShow)
{
 BOOL bRet=FALSE;
 if(m_bShow)
 {
  if(!bShow)
  {
   bRet=Shell_NotifyIcon(NIM_DELETE,&m_nid);
  }
 }
 else
 {
  if(bShow)
   bRet=Shell_NotifyIcon(NIM_ADD,&m_nid);
 }
 if(bRet)
 {
  m_bShow=bShow;
 }
 return bRet;

}
/*---------------------------------------------------------------------------------
*/
BOOL CTrayNotify::Modify(const NOTIFYICONDATA& nid)
{
 CopyMemory((void*)&m_nid,(void*)&nid,sizeof(nid));
 return Shell_NotifyIcon(NIM_MODIFY,&m_nid);
}
/*---------------------------------------------------------------------------------
*/
void CTrayNotify::GetNid(NOTIFYICONDATA* pNid) const
{
 CopyMemory((void*)pNid,(void*)&m_nid,sizeof(m_nid));
}
/*---------------------------------------------------------------------------------
*/
BOOL CTrayNotify::IsIconShow() const
{
 return m_bShow;
}
/*---------------------------------------------------------------------------------
*/
void CTrayNotify::Reset()
{
 ShowIcon(FALSE);
 memset((void*)&m_nid,0,sizeof(m_nid));
}
/*---------------------------------------------------------------------------------
*/
void CTrayNotify::SetFlag(UINT uFlag)
{
 m_nid.uFlags=uFlag;
}
/*---------------------------------------------------------------------------------
*/
UINT CTrayNotify::GetFlag() const
{
 return m_nid.uFlags;
}

//文件尾


 

posted @ 2008-04-03 16:51  宇晨  阅读(396)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3