#include "StdAfx.h" #include "CellAUTOCREATE.h" #define CELL_LIST_HEAD CCellAUTOCREATE::ms_pHead CCellAUTOCREATE* CCellAUTOCREATE::ms_pHead = NULL; CCellAUTOCREATE::CCellAUTOCREATE(const CString& a_Name, pfnCreateCell a_fn) : m_Name(a_Name), m_pfnCreate(a_fn) { __setList(); } CCellAUTOCREATE::~CCellAUTOCREATE(void) { } /***************************************************************** **【函数名称】 __setList **【函数功能】 设置动态创建链条 **【参数】 **【返回值】 ****************************************************************/ void CCellAUTOCREATE::__setList( void ) { if(CELL_LIST_HEAD == NULL) { CELL_LIST_HEAD = this; } else { CCellAUTOCREATE* pTemp = CELL_LIST_HEAD; while(pTemp->m_pNext != NULL) pTemp = pTemp->m_pNext; pTemp->m_pNext = this; } m_pNext = NULL; } /***************************************************************** **【函数名称】 __createCell **【函数功能】 创建节点对象 **【参数】 **【返回值】 节点对象 ****************************************************************/ CCellBase* CCellAUTOCREATE::__createCell( void ) { CCellBase* pCell = NULL; if(m_pfnCreate != NULL) pCell = (*m_pfnCreate)(); return pCell; } /***************************************************************** **【函数名称】 fromName **【函数功能】 根据节点名字查找节点动态创建对象 **【参数】 a_Name: 节点名字 **【返回值】 动态创建对象 ****************************************************************/ CCellAUTOCREATE* CCellAUTOCREATE::fromName( const CString& a_Name ) { CCellAUTOCREATE* pTemp = NULL; for(pTemp = CELL_LIST_HEAD; pTemp != NULL; pTemp = pTemp->m_pNext) { if(pTemp->m_Name == a_Name) return pTemp; } return NULL; } /***************************************************************** **【函数名称】 createCell **【函数功能】 根据节点名字生成对应节点对象 **【参数】 a_Name: 节点名字 **【返回值】 节点对象 ****************************************************************/ CCellBase* CCellAUTOCREATE::createCell( const CString& a_Name ) { CCellAUTOCREATE* pTemp = fromName(a_Name); if(pTemp != NULL) return pTemp->__createCell(); else return NULL; }