/////////////////////////////////////////////////////////////////////////////
//
//	Copyright (c) 1996 Microsoft Corporation
//
//	Module Name:
//		BaseCmdT.h
//
//	Abstract:
//		Definition of the CBaseCmdTarget class.
//
//	Implementation File:
//		BaseCmdT.cpp
//
//	Author:
//		David Potter (davidp)	December 11, 1996
//
//	Revision History:
//
//	Notes:
//
/////////////////////////////////////////////////////////////////////////////

#ifndef _BASECMDT_H_
#define _BASECMDT_H_

/////////////////////////////////////////////////////////////////////////////
//	Include Files
/////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
// Forward Class Declarations
/////////////////////////////////////////////////////////////////////////////

class CBaseCmdTarget;

/////////////////////////////////////////////////////////////////////////////
// External Class Declarations
/////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
// CBaseCmdTarget command target
/////////////////////////////////////////////////////////////////////////////

class CBaseCmdTarget : public CCmdTarget
{
	DECLARE_DYNCREATE(CBaseCmdTarget)

// Construction
public:
	CBaseCmdTarget(void) { m_nReferenceCount = 0; }	// protected constructor used by dynamic creation

// Attributes
protected:
	ULONG				m_nReferenceCount;

public:
	ULONG				NReferenceCount(void) const	{ return m_nReferenceCount; }

// Operations
public:
	ULONG				AddRef(void)
	{
		return ++m_nReferenceCount;
	}
	ULONG				Release(void)
	{
		ULONG	nReferenceCount;

		ASSERT(m_nReferenceCount != 0);

		nReferenceCount = --m_nReferenceCount;
		if (m_nReferenceCount == 0)
			delete this;

		return nReferenceCount;
	}

// Overrides
public:
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CBaseCmdTarget)
	//}}AFX_VIRTUAL

// Implementation
protected:
	// Generated message map functions
	//{{AFX_MSG(CBaseCmdTarget)
	//}}AFX_MSG

	DECLARE_MESSAGE_MAP()

};  //*** class CBaseCmdTarget

/////////////////////////////////////////////////////////////////////////////
// Global Functions
/////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
//	Global Variables
/////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////

#endif // _BASECMDT_H_
