93 lines
2.1 KiB
C++
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__
|