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

93 lines
2.1 KiB
C++

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