⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 collectionhelper.h

📁 COM实现的源码 COM初学者用 大家多发些COM的文件  共同进步啊
💻 H
字号:
//	CollectionHelper.h Created by Posy at October, 2001
//	for Helper Macros for Implement Custom Collcetion Interface or Object.

#ifndef _COLLECTIONHELPER_H_
#define _COLLECTIONHELPER_H_


#define DEFINE_CUSTOM_COLLECTION_INTERFACE(IntfName, IntfNum, TypeName)	\
	BEGIN_INTERFACE_DECLARATION(IntfName, IntfNum)	\
		virtual LONG GetCount() const = 0;	\
		virtual COLPOS GetPosAt(LONG nIndex) const = 0;	\
		virtual COLPOS GetHeadPos() const = 0;	\
		virtual COLPOS GetTailPos() const = 0;	\
		virtual BOOL GetNext(COLPOS &nPos, TypeName** ppIntf) const = 0;	\
		virtual BOOL GetPrev(COLPOS &nPos, TypeName** ppIntf) const = 0;	\
		virtual BOOL GetAtPos(COLPOS nPos, TypeName** ppIntf) const = 0;	\
		virtual BOOL SetAtPos(COLPOS nPos, TypeName *pIntf) = 0;	\
		virtual BOOL InsertBeforePos(COLPOS &nPos, TypeName *pIntf) = 0;	\
		virtual BOOL InsertAfterPos(COLPOS &nPos, TypeName *pIntf) = 0;	\
		virtual BOOL RemoveAtPos(COLPOS nPos) = 0;	\
		virtual BOOL IsEmpty() const = 0;	\
		virtual BOOL InsertAt(LONG nIndex, TypeName *pIntf) = 0;	\
		virtual BOOL RemoveAt(LONG nIndex) = 0;	\
		virtual BOOL GetAt(LONG nIndex, TypeName** ppIntf) const = 0;	\
		virtual BOOL SetAt(LONG nIndex, TypeName *pIntf) = 0;	\
		virtual BOOL InsertHead(TypeName *pIntf) = 0;	\
		virtual BOOL InsertTail(TypeName *pIntf) = 0;	\
		virtual BOOL RemoveHead() = 0;	\
		virtual BOOL RemoveTail() = 0;	\
		virtual BOOL GetHead(TypeName** ppIntf) const = 0;	\
		virtual BOOL GetTail(TypeName** ppIntf) const = 0;	\
		virtual BOOL Empty(BOOL bDestroy = FALSE) = 0;	\
	END_INTERFACE_DECLARATION()


#define DEFINE_CUSTOM_COLLECTION_HELPER(HelperName, IntfName, TypeName, TypeNum)	\
	class HelperName : public IntfName	\
	{	\
		ICollection *x_pCol;	\
	public:	\
		HelperName()	\
			{x_pCol = NULL;};	\
		void SetHelper(ICollection* pCollection)	\
			{x_pCol = pCollection;};	\
		ICollection* GetHelper()	\
			{return x_pCol;};	\
		virtual LONG GetCount() const	\
			{return x_pCol->GetCount();};	\
		virtual COLPOS GetPosAt(LONG nIndex) const	\
			{return x_pCol->GetPosAt(nIndex);};	\
		virtual COLPOS GetHeadPos() const	\
			{return x_pCol->GetHeadPos();};	\
		virtual COLPOS GetTailPos() const	\
			{return x_pCol->GetTailPos();};	\
		virtual BOOL GetNext(COLPOS &nPos, TypeName** ppIntf) const	\
			{return x_pCol->GetNext(nPos, (void**)ppIntf, TypeNum);};	\
		virtual BOOL GetPrev(COLPOS &nPos, TypeName** ppIntf) const	\
			{return x_pCol->GetPrev(nPos, (void**)ppIntf, TypeNum);};	\
		virtual BOOL GetAtPos(COLPOS nPos, TypeName** ppIntf) const	\
			{return x_pCol->GetAtPos(nPos, (void**)ppIntf, TypeNum);};	\
		virtual BOOL SetAtPos(COLPOS nPos, TypeName *pIntf)	\
			{return x_pCol->SetAtPos(nPos, pIntf);};	\
		virtual BOOL InsertBeforePos(COLPOS &nPos, TypeName *pIntf)	\
			{return x_pCol->InsertBeforePos(nPos, pIntf);};	\
		virtual BOOL InsertAfterPos(COLPOS &nPos, TypeName *pIntf)	\
			{return x_pCol->InsertAfterPos(nPos, pIntf);};	\
		virtual BOOL RemoveAtPos(COLPOS nPos)	\
			{return x_pCol->RemoveAtPos(nPos);};	\
		virtual BOOL IsEmpty() const	\
			{return x_pCol->IsEmpty();};	\
		virtual BOOL InsertAt(LONG nIndex, TypeName *pIntf)	\
			{return x_pCol->InsertAt(nIndex, pIntf);};	\
		virtual BOOL RemoveAt(LONG nIndex)	\
			{return x_pCol->RemoveAt(nIndex);};	\
		virtual BOOL GetAt(LONG nIndex, TypeName** ppIntf) const	\
			{return x_pCol->GetAt(nIndex, (void**)ppIntf, TypeNum);};	\
		virtual BOOL SetAt(LONG nIndex, TypeName *pIntf)	\
			{return x_pCol->SetAt(nIndex, pIntf);};	\
		virtual BOOL InsertHead(TypeName *pIntf)	\
			{return x_pCol->InsertHead(pIntf);};	\
		virtual BOOL InsertTail(TypeName *pIntf)	\
			{return x_pCol->InsertTail(pIntf);};	\
		virtual BOOL RemoveHead()	\
			{return x_pCol->RemoveHead();};	\
		virtual BOOL RemoveTail()	\
			{return x_pCol->RemoveTail();};	\
		virtual BOOL GetHead(TypeName** ppIntf) const	\
			{return x_pCol->GetHead((void**)ppIntf, TypeNum);};	\
		virtual BOOL GetTail(TypeName** ppIntf) const	\
			{return x_pCol->GetTail((void**)ppIntf, TypeNum);};	\
		virtual BOOL Empty(BOOL bDestroy = FALSE)	\
			{return x_pCol->Empty(bDestroy);};	\
	};


#define DEFINE_CUSTOM_COLLECTION_OBJECT(ObjName, IntfName, TypeName, TypeNum)	\
	DEFINE_CUSTOM_COLLECTION_HELPER(X##ObjName##Helper, IntfName, TypeName, TypeNum)	\
	class C##ObjName :	public CBaseObject,	\
						public X##ObjName##Helper	\
	{	\
		BEGIN_OBJECT_DECLARATION(C##ObjName)	\
			ADD_INTERFACE(IntfName)	\
		END_OBJECT_DECLARATION()	\
	};

#define IMPLEMENT_CUSTOM_COLLECTION_OBJECT(ObjName)	\
	IMPLEMENT_OBJECT_CUSTOM_INIT(C##ObjName)	\
	C##ObjName::C##ObjName()	\
	{	\
		ICollection *pCol = NULL;	\
		ObjServ::CreateInstance(ON_BaseCollection, IN_ICollection, (void**)&pCol);	\
		SetHelper(pCol);	\
	};	\
	C##ObjName::~C##ObjName()	\
	{	\
		GetHelper()->DestroyInstance();	\
	};



#endif //_COLLECTIONHELPER_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -