#if !defined(__TGADSCMDGROUP_H__) #define __TGADSCMDGROUP_H__ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // ADS命令集管理,它封装了ARX的acedDefun函数,使用MFC // 风格,使用时从它派生新类,添加ADS命令成员函数 // 例子:MyAdsCmdGroup.h // class CMyAdsCmdGroup : public TGAdsCmdGroup // { // DECLARE_DYNCREATE(TGAdsCmdGroup); // ... // //{{AFX_TG_ADS_CMD(TGAdsCmdGroup) // afx_adscmd int MyTestCmd(); // ... // //}}AFX_TG_ADS_CMD // DECLARE_TG_ADSCMD_MAP(CMyAdsCmdGroup); // ... // }; // MyAdsCmdGroup.cpp // IMPLEMENT_DYNCREATE(CMyAdsCmdGroup, TGAdsCmdGroup); // ... // BEGIN_TG_ADSCMD_MAP(CMyAdsCmdGroup, MyTestGroup) // //{{AFX_TG_ADS_CMD(CMyAdsCmdGroup) // ON_TG_ADSCMD(Test, MyTestCmd) // ... // //}}AFX_TG_ADS_CMD // END_TG_ADSCMD_MAP(CMyAdsCmdGroup) // ... // wyg--2005-04-05 class TGAdsCmdGroup; class TGArxEntryApp; #define afx_adscmd typedef int (TGAdsCmdGroup::*lpFnAdsCmdPtr)(); typedef struct { LPCTSTR pszName; lpFnAdsCmdPtr pFnCmd; int iFunCode; BOOL bRegFunc; BOOL bRenderCmd; }TGAdsCmdInfo; #define DECLARE_TG_ADSCMD_MAP(CLASS) \ protected: \ virtual int OnGetCmdEntrySize(); \ virtual TGAdsCmdInfo* OnGetCmdEntry(); \ static TGAdsCmdInfo m_p##CLASSCmdInfo[]; \ #define BEGIN_TG_ADSCMD_MAP(CLASS) \ TGAdsCmdInfo* CLASS::OnGetCmdEntry() { \ return m_p##CLASSCmdInfo;} \ TGAdsCmdInfo CLASS::m_p##CLASSCmdInfo[] = { \ #define ON_TG_ADSCMD(Name, pFnCmd) \ {#Name, (lpFnAdsCmdPtr)&pFnCmd, 0, FALSE, FALSE}, \ #define ON_TG_ADSCMD_EX(Name, pFnCmd, bRegFunc, bRenderCmd) \ {#Name, (lpFnAdsCmdPtr)&pFnCmd, 0, bRegFunc, bRenderCmd}, \ #define END_TG_ADSCMD_MAP(CLASS) }; \ int CLASS::OnGetCmdEntrySize() { \ return (sizeof(m_p##CLASSCmdInfo) / sizeof((m_p##CLASSCmdInfo)[0]));} \ class TGAdsCmdGroup : public CObject { DECLARE_DYNAMIC(TGAdsCmdGroup); public: TGAdsCmdGroup(); virtual ~TGAdsCmdGroup(); protected: virtual void OnAddCommands(); virtual void OnRemoveCommands(); virtual void OnInvkSubCommand(); private: virtual int OnGetCmdEntrySize() = 0; virtual TGAdsCmdInfo* OnGetCmdEntry() = 0; TGArxEntryApp* m_pArxEntryApp; friend class TGArxEntryApp; }; #endif // __TGADSCMDGROUP_H__