|
/////////////////////////////////////////////////////////////////////////////
// SystemTray.h : header file
//
// Written by Chris Maunder (cmaunder@mail.com)
// Copyright (c) 1998.
//
// This code may be used in compiled form in any way you desire. This
// file may be redistributed unmodified by any means PROVIDING it is
// not sold for profit without the authors written consent, and
// providing that this notice and the authors name is included. If
// the source code in this file is used in any commercial application
// then acknowledgement must be made to the author of this file
// (in whatever form you wish).
//
// This file is provided "as is" with no expressed or implied warranty.
//
// Expect bugs.
//
// Please use and enjoy. Please let me know of any bugs/mods/improvements
// that you have found/implemented and I will fix/incorporate them into this
// file.
#ifndef _INCLUDED_SYSTEMTRAY_H_
#define _INCLUDED_SYSTEMTRAY_H_
#ifdef NOTIFYICONDATA_V1_SIZE // If NOTIFYICONDATA_V1_SIZE, then we can use fun stuff
#define SYSTEMTRAY_USEW2K
#else
#define NIIF_NONE 0
#endif
// #include <afxwin.h>
#include <afxtempl.h>
#include <afxdisp.h> // COleDateTime
/////////////////////////////////////////////////////////////////////////////
// CSystemTray window
class CSystemTray : public CWnd
{
// Construction/destruction
public:
CSystemTray();
CSystemTray(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID,
BOOL bhidden = FALSE,
LPCTSTR szBalloonTip = NULL, LPCTSTR szBalloonTitle = NULL,
DWORD dwBalloonIcon = NIIF_NONE, UINT uBalloonTimeout = 10);
virtual ~CSystemTray();
DECLARE_DYNAMIC(CSystemTray)
// Operations
public:
BOOL Visible() { return !m_bHidden; }
// Create the tray icon
Create(CWnd* pParent, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID,
BOOL bHidden = FALSE,
LPCTSTR szBalloonTip = NULL, LPCTSTR szBalloonTitle = NULL,
DWORD dwBalloonIcon = NIIF_NONE, UINT uBalloonTimeout = 10);
BOOL DestroyWindow();
// Change or retrieve the Tooltip text
BOOL SetTooltipText(LPCTSTR pszTooltipText);
BOOL SetTooltipText(UINT nID);
CString GetTooltipText() const;
// Change or retrieve the icon displayed
BOOL SetIcon(HICON hIcon);
BOOL SetIcon(LPCTSTR lpszIconName);
BOOL SetIcon(UINT nIDResource);
BOOL SetStandardIcon(LPCTSTR lpIconName);
BOOL SetStandardIcon(UINT nIDResource);
HICON GetIcon() const;
void SetFocus();
BOOL HideIcon();
BOOL ShowIcon();
BOOL AddIcon();
BOOL RemoveIcon();
BOOL MoveToRight();
BOOL ShowBalloon(LPCTSTR szText, LPCTSTR szTitle = NULL,
DWORD dwIcon = NIIF_NONE, UINT uTimeout = 10);
// For icon animation
BOOL SetIconList(UINT uFirstIconID, UINT uLastIconID);
BOOL SetIconList(HICON* pHIconList, UINT nNumIcons);
BOOL Animate(UINT nDelayMilliSeconds, int nNumSeconds = -1);
BOOL StepAnimation();
BOOL StopAnimation();
// Change menu default item
void GetMenuDefaultItem(UINT& uItem, BOOL& bByPos);
BOOL SetMenuDefaultItem(UINT uItem, BOOL bByPos);
// Hatr added
// Change or retrive the window to send menu commands to
BOOL SetTargetWnd(CWnd* pTargetWnd);
CWnd* GetTargetWnd() const;
BOOL SetMenuText(UINT uiCmd, LPCTSTR szText);
BOOL SetMenuText(UINT uiCmd, UINT uiID);
BOOL CheckMenuItem(UINT uiCmd, BOOL bCheck);
BOOL EnableMenuItem(UINT uiCmd, BOOL bEnable);
BOOL DeleteMenu(UINT uiCmd);
BOOL AddMenuTitle(LPCTSTR szMenuText);
// Change or retrieve the window to send notification messages to
BOOL SetNotificationWnd(CWnd* pNotifyWnd);
CWnd* GetNotificationWnd() const;
// Change or retrieve notification messages sent to the window
BOOL SetCallbackMessage(UINT uCallbackMessage);
UINT GetCallbackMessage() const;
// Static functions
public:
static void MinimiseToTray(CWnd* pWnd);
static void MaximiseFromTray(CWnd* pWnd);
public:
// Default handler for tray notification message
virtual LRESULT OnTrayNotification(WPARAM uID, LPARAM lEvent);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSystemTray)
protected:
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
//}}AFX_VIRTUAL
// Implementation
protected:
void Initialise();
void InstallIconPending();
BOOL m_bHidden; // Has the icon been hidden?
BOOL m_bRemoved; // Has the icon been removed?
BOOL m_bShowIconPending; // Show the icon once tha taskbar has been created
BOOL m_bWin2K; // Use new W2K features?
NOTIFYICONDATA m_tnd;
CArray<HICON, HICON> m_IconList;
UINT m_uIDTimer;
int m_nCurrentIcon;
COleDateTime m_StartTime;
int m_nAnimationPeriod;
HICON m_hSavedIcon;
UINT m_DefaultMenuItemID;
BOOL m_DefaultMenuItemByPos;
CWnd *m_pTargetWnd; // Hatr added
CMenu m_Menu;
// Static data
public:
static const UINT sm_uiCallbackMessage; // Hatr added
protected:
static const UINT m_nTimerID;
static UINT m_nMaxTooltipLength;
static const UINT m_nTaskbarCreatedMsg;
static CWnd m_wndInvisible;
static BOOL GetW2K();
#ifndef _WIN32_WCE
static CRect GetTrayWndRect();
#endif
// Generated message map functions
protected:
//{{AFX_MSG(CSystemTray)
afx_msg void OnTimer(UINT nIDEvent);
//}}AFX_MSG
#ifndef _WIN32_WCE
afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
#endif
void OnTaskbarCreated(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
}; // class CSystemTray
#endif
/////////////////////////////////////////////////////////////////////////////
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Chris Maunder is the co-founder of
CodeProject and
ContentLab.com, and has been a prominent figure in the software development community for nearly 30 years. Hailing from Australia, Chris has a background in Mathematics, Astrophysics, Environmental Engineering and Defence Research. His programming endeavours span everything from FORTRAN on Super Computers, C++/MFC on Windows, through to to high-load .NET web applications and Python AI applications on everything from macOS to a Raspberry Pi. Chris is a full-stack developer who is as comfortable with SQL as he is with CSS.
In the late 1990s, he and his business partner David Cunningham recognized the need for a platform that would facilitate knowledge-sharing among developers, leading to the establishment of CodeProject.com in 1999. Chris's expertise in programming and his passion for fostering a collaborative environment have played a pivotal role in the success of CodeProject.com. Over the years, the website has grown into a vibrant community where programmers worldwide can connect, exchange ideas, and find solutions to coding challenges. Chris is a prolific contributor to the developer community through his articles and tutorials, and his latest passion project,
CodeProject.AI.
In addition to his work with CodeProject.com, Chris co-founded ContentLab and DeveloperMedia, two projects focussed on helping companies make their Software Projects a success. Chris's roles included Product Development, Content Creation, Client Satisfaction and Systems Automation.