蒙古青年论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 307|回复: 0

图标显示在提示栏类(code)

[复制链接]
发表于 2006-9-25 09:18:18 | 显示全部楼层 |阅读模式
图标显示在提示栏类,很久以前写的代码。

//
//  图标显示在提示栏类 CShellIcon
//  Author : Ganjike@hotmail.com
//  Date   : 2001.4.10
//
//  Use :
//                        初始化 :
//                                CShellIcon  m_ShellIcon;
//                                m_ShellIcon.Create( AfxGetMainWnd() );
//
//                                或: CShellIcon m_ShellIcon( AfxGetMainWnd() );
//                                或:
//                                        CShellIcon * m_pShellIcon;
//                                        m_pShellIcon = new CShellIcon( AfxGetMainWnd() );
//
//                        消息处理 :
//                            在 CWnd 的 WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
//                                函数里调用 m_ShellIcon.ShellMsgProc( message, wParam, lParam );
//
//                        重载 :
//                                OnLBtnDown();
//                                OnLBtnDbClick();
//                                OnRBtnDown();
//

#if !defined(_SHELLICON_H_)
#define _SHELLICON_H_

#include "stdafx.h"

#define SHELLICONMSG WM_USER + 144
#define SHELLICONID  101

class CShellIcon : public CObject
{
public:
        CShellIcon(){};
        CShellIcon(CWnd * pWnd )
        {
                Create( pWnd );
        };
        ~CShellIcon()
        {
                Shell_NotifyIcon(NIM_DELETE, &m_Nid);
        };

public:                ////变量
        HWND m_hWnd;
        HICON m_hIcon;

private:
        NOTIFYICONDATA m_Nid;
        CWnd * m_pWnd;

public:                ////函数

        void Create(  CWnd * pWnd )
        {
                UINT i;
                CString str;

                m_hWnd  = pWnd->m_hWnd ;
                m_hIcon = pWnd->GetIcon( FALSE );
                m_pWnd  = pWnd;

        m_Nid.cbSize = sizeof(NOTIFYICONDATA);
                m_Nid.hWnd = m_hWnd;
                m_Nid.uID  = SHELLICONID;
                m_Nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
                m_Nid.uCallbackMessage = SHELLICONMSG;
                m_Nid.hIcon = m_hIcon;      
                pWnd->GetWindowText( str ) ;
                i = str.GetLength() + 1;
                lstrcpyn(m_Nid.szTip, str.operator LPCTSTR(), i );
                 
                Shell_NotifyIcon( NIM_ADD, &m_Nid );
                //pWnd->ShowWindow( SW_HIDE );
        }

        ////处理消息  必须在窗口处理函数里调用
        BOOL ShellMsgProc(UINT message, WPARAM wParam, LPARAM lParam)
        {
                if ( message == SHELLICONMSG )
                {
                        if ( wParam == SHELLICONID )
                        {
                                switch( LOWORD(lParam) )
                                {
                                case WM_LBUTTONDOWN :
                                        OnLBtnDown();
                                        break;
                                case WM_LBUTTONDBLCLK :
                                        OnLBtnDbClick();
                                        break;
                                case WM_RBUTTONDOWN :
                                        OnRBtnDown();
                                        break;
                                }
                        }
                }

                if ( message == WM_SYSCOMMAND )
                {
                        if (wParam == SC_MINIMIZE )
                        {
                                m_pWnd->ShowWindow( SW_HIDE );
                                return FALSE;
                        }
                }
                return TRUE;
        };

        void ModifyShellIcon( HICON p_hIcon )
        {
                m_hIcon = p_hIcon;
                m_Nid.hIcon= m_hIcon;      
                Shell_NotifyIcon( NIM_MODIFY, &m_Nid );
        };

        virtual void OnLBtnDown()
        {
                if ( m_pWnd->ShowWindow( SW_RESTORE ) )
                {
                        m_pWnd->ShowWindow( SW_HIDE );
                }
                else
                {
                        m_pWnd->ShowWindow( SW_SHOW );
                }

        };

        virtual void OnLBtnDbClick()
        {
                OnLBtnDown();
        };

        virtual void OnRBtnDown()
        {
                CMenu * pMenu;
                CPoint p;

                ::GetCursorPos( &p );
                pMenu = m_pWnd->GetSystemMenu(FALSE);
                if ( pMenu != NULL )
                {
                        pMenu->TrackPopupMenu(TPM_RIGHTBUTTON, p.x, p.y, m_pWnd );
                }
        };

};



#endif
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|蒙古青年论坛

GMT+8, 2026-7-16 12:10 , Processed in 0.011232 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表