Files
envi-code/SourceCode/Code2026/tg_shs/inc/Acad/TGAdsCmdGroup.h
T
2026-09-28 15:28:50 +08:00

93 lines
2.2 KiB
C++

#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__