一个很弱的托盘类

一个很弱的托盘类
在学习实现托盘图标的过程中,自己尝试着写了个托盘类。
当然了,不用问也知道,这个类是很弱的。

头文件:
//////////////////////////////////////////////////////////////////////// //
//     
//     文件说明 : TrayIcon类声明
//     
//     简要说明 : 为方便自己使用,同时以达到练手为目的,于是简单的封装(姑且用"封装")了一个托盘类.
//             使用该类时,可以通过使用重载函数Create来进行内部的设置,随后调用LoadTrayIcon或
//             UnLoadTrayIcon函数来进行在系统托盘中的图标显示和隐藏.
//
//     zhaoyg : 2010.1.23
//
//////////////////////////////////////////////////////////////////////// //


#pragma once

class  TrayIcon
{
public :
    TrayIcon(
void );
    
~ TrayIcon( void );
    typedef 
void  ( * CALLBACKTrayIconNotify)(LPVOID thisclass ,WPARAM wparam ,LPARAM lparam);
    
void         Create(LPVOID callerthis ,  const  HWND  & hwnd , UINT iconID , UINT CallBackMessage, 
                        CALLBACKTrayIconNotify pcallback, LPCTSTR ptips , HICON hicon , 
                        UINT flags 
=  NIF_MESSAGE | NIF_ICON | NIF_TIP);
    
void         Create(LPVOID callerthis ,  const  HWND  & hwnd , UINT iconID);
    
void         OnTrayNotification(WPARAM wparam ,LPARAM lparam);

    
bool         LoadTrayIcon();
    
bool         UnLoadTrayIcon();

    
void         SetIcon( const  HICON  & hicon);
    
void         SetTip( const  LPCTSTR tipstr);
    
void         SetBalloonTip(UINT timeout , DWORD infoflags ,  const  LPCTSTR infotitle ,  const  LPCTSTR info);
    
void         SetCallBackMessage(UINT CallBackMessage , CALLBACKTrayIconNotify pcallback);

    
//  change the existing icon status
     bool         ChangeIcon( const  HICON  & hicon);
    
bool         ChangeTip( const  LPCTSTR tipstr);
    
bool         ChangeBalloonTip(UINT timeout , DWORD infoflags ,  const  LPCTSTR infotitle ,  const  LPCTSTR info);

    
bool         visible();
    
bool         enable();

protected :
    NOTIFYICONDATA            m_iconinfo;
    CALLBACKTrayIconNotify    m_pcallback;
    LPVOID                    m_thisclass;
    
bool                     m_enable;
    
bool                     m_ishide;
};



实现:
//////////////////////////////////////////////////////////////////////// //
//     
//     文件说明 : TrayIcon类实现
//     
//     简要说明 : 托盘类
//
//     zhaoyg : 2010.1.23
//
//////////////////////////////////////////////////////////////////////// //


#include 
" StdAfx.h "
#include 
" TrayIcon.h "

TrayIcon::TrayIcon(
void )
{
    memset(
& m_iconinfo, 0 , sizeof (NOTIFYICONDATA)) ;
    m_thisclass 
=  NULL;
    m_pcallback 
=  NULL;
    m_enable 
=   false ;
    m_ishide 
=   false ;
}

TrayIcon::
~ TrayIcon( void )
{
}

//////////////////////////////////////////////////////////////////////// //
//   函数 Create(LPVOID callerthis , const HWND &hwnd , UINT iconID , UINT CallBackMessage, CALLBACKTrayIconNotify pcallback, LPCTSTR ptips , HICON hicon , UINT flags);
//
//     功能 : NOTIFYICONDATA 
//
//     参数说明:
//       callerthis        : 包含TrayIcon对象的类对象的this指针,该指针将传入参数pcallback指向的回调函数中
//     hwnd                : 包含TrayIcon对象的类的句柄
//     iconID            : 托盘对象ID
//       CallBackMessage    : 回调消息.系统将向hwnd所表示的窗口发送该消息.该消息与一个自定义的消息处理函数关联
//       pcallback            : 回调函数指针.指向的函数即为CallBackMessage消息的响应函数
//       ptips                : 提示字符串.当鼠标放置于托盘上的图标时显示该字符串
//       hicon                : 需要显示的图标句柄
//       flags                : 设置托盘的相关属性.详见MSDN中的NOTIFYICONDATA结构体
//////////////////////////////////////////////////////////////////////// //
void  TrayIcon::Create( LPVOID callerthis ,  const  HWND  & hwnd , UINT iconID , UINT CallBackMessage, 
                      CALLBACKTrayIconNotify pcallback, LPCTSTR ptips , HICON hicon ,
                      UINT flags)
{
    m_iconinfo.cbSize 
=   sizeof (NOTIFYICONDATA);
    m_iconinfo.hWnd 
=  hwnd;
    m_iconinfo.uID 
=  iconID;
    m_iconinfo.hIcon 
=  hicon;
    m_iconinfo.uFlags 
=  flags;
    wcscpy_s (m_iconinfo.szTip,ptips);
    m_iconinfo.uCallbackMessage 
=  CallBackMessage;
    m_pcallback 
= pcallback;
    m_thisclass 
=  callerthis;
    m_enable
=   true ;
}

void  TrayIcon::Create( LPVOID callerthis ,  const  HWND  & hwnd ,UINT iconID)
{
    m_iconinfo.cbSize 
=   sizeof (NOTIFYICONDATA);
    m_iconinfo.hWnd 
=  hwnd;
    m_thisclass 
=  callerthis;
    m_iconinfo.uID 
=  iconID;
    m_enable
=   true ;
}

void  TrayIcon::OnTrayNotification( WPARAM wparam ,LPARAM lparam )
{
    ASSERT(m_pcallback 
!=  NULL  &&  m_thisclass  !=  NULL);
    
return  m_pcallback(m_thisclass,wparam , lparam);
}

bool  TrayIcon::LoadTrayIcon()
{
    
if  (m_enable  &&   ! m_ishide)
    {
        m_ishide 
=  Shell_NotifyIcon(NIM_ADD ,  & m_iconinfo);
        
return  m_ishide;
    }

    
return   false ;
}

bool  TrayIcon::UnLoadTrayIcon()
{
    
if  (m_enable  &&  m_ishide)
    {
        
bool  tmp  =  Shell_NotifyIcon(NIM_DELETE ,  & m_iconinfo);
        m_ishide 
=   ! tmp;
        m_iconinfo;
        
return  tmp;
    }

    
return   false ;
}

void  TrayIcon::SetIcon(  const  HICON  & hicon )
{
    
if  (m_enable)
    {
        m_iconinfo.uFlags 
|=  NIF_ICON;
        m_iconinfo.hIcon 
=  hicon;
    }
}

void  TrayIcon::SetTip(  const  LPCTSTR tipstr )
{
    ASSERT(wcslen(tipstr) 
<   64 );

    m_iconinfo.uFlags 
|=  NIF_TIP;
    wcscpy_s (m_iconinfo.szTip , tipstr);
}

void  TrayIcon::SetBalloonTip( UINT timeout , DWORD infoflags ,  const  LPCTSTR infotitle ,  const  LPCTSTR info )
{
    m_iconinfo.uFlags 
|=  NIF_INFO;
    m_iconinfo.uTimeout 
=  timeout;
    m_iconinfo.dwInfoFlags 
=  infoflags;
    wcscpy_s (m_iconinfo.szInfo,info);
    wcscpy_s (m_iconinfo.szInfoTitle,infotitle);
}

void  TrayIcon::SetCallBackMessage( UINT CallBackMessage , CALLBACKTrayIconNotify pcallback )
{
    m_iconinfo.uFlags 
|=  NIF_MESSAGE;
    m_iconinfo.uCallbackMessage 
=  CallBackMessage;
    m_pcallback 
=  pcallback;
}


bool  TrayIcon::ChangeIcon(  const  HICON  & hicon )
{
    m_iconinfo.uFlags 
|=  NIF_ICON;
    m_iconinfo.hIcon 
=  hicon;

    
return  Shell_NotifyIcon(NIM_MODIFY ,  & m_iconinfo);
}

bool  TrayIcon::ChangeTip(  const  LPCTSTR tipstr )
{
    ASSERT(wcslen(tipstr) 
<   64 );
    m_iconinfo.uFlags 
|=  NIF_TIP;
    wcscpy_s(m_iconinfo.szTip , tipstr);

    
return  Shell_NotifyIcon(NIM_MODIFY ,  & m_iconinfo);
}
bool  TrayIcon::ChangeBalloonTip( UINT timeout , DWORD infoflags ,  const  LPCTSTR infotitle ,  const  LPCTSTR info )
{
    ASSERT(wcslen(infotitle)
<   63   &&  wcslen(info) <   255 );

    m_iconinfo.uFlags 
|=  NIF_INFO;
    m_iconinfo.uTimeout 
=  timeout;
    m_iconinfo.dwInfoFlags 
=  infoflags;
    wcscpy_s(m_iconinfo.szInfoTitle , infotitle);
    wcscpy_s(m_iconinfo.szInfo , info);
    
int  i  = Shell_NotifyIcon(NIM_MODIFY ,  & m_iconinfo);
    
return  i;
}

bool  TrayIcon::visible()
{
    
return   ! m_ishide;
}
bool  TrayIcon::enable()
{
    
return  m_enable;
}

你可能感兴趣的:(一个很弱的托盘类)