|
|
图标显示在提示栏类,很久以前写的代码。
//
// 图标显示在提示栏类 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 |
|