AddCADFrameMenu.h文件如下:
/**/
/*-------------------------------------------------------------------------
作者: Racky Ye
该类封装了在AuToCAD上添加菜单及子菜单的方法,使用COM接口实现
大家可以任意修改,添加新功能,希望大家能多交流
Email: yeguixi@126.com
--------------------------------------------------------------
使用方法:
CAddCADFrameMenu menu;
menu.AddMenu("我的菜单");
menu.AddSubMenu("弹出对话框", "_DLG ");
menu.AddSubMenu("绘制线条", "_DRAWL ");
menu.AddSubMenu("*Line");// 加"*"号表示是二级子菜单
menu.AddSubMenu("$CIRCLE", "_CIRCLE ");//加"$"号表示二级子菜单下的菜单条
menu.AddSubSeparator();
menu.AddSubMenu("$PLINE", "_PLINE ");//加"$"号表示二级子菜单下的菜单条
menu.AddSeparator();
menu.AddSubMenu("选择文件夹", "_SELFOLDER ");
menu.AddSubMenu("*TEXT");// 加"*"号表示是二级子菜单
menu.AddSubMenu("$MTEXT", "_TEXT ");//加"$"号表示二级子菜单下的菜单条
menu.CreateMenus();
--------------------------------------------------------------
----------------------------------------------------------------------------*/
#if !defined(AFX_ADDCADFRAMEMENU_H__153847F5_DE2C_4B6E_83E8_5BE9FE780CD8__INCLUDED_)
#define AFX_ADDCADFRAMEMENU_H__153847F5_DE2C_4B6E_83E8_5BE9FE780CD8__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include < afxtempl.h >
#include " acad15.h "
typedef struct CADMenu
... {
char name[64];
char order[64];
} CADMenu;
class CAddCADFrameMenu
... {
public:
CAddCADFrameMenu();
virtual ~CAddCADFrameMenu();
// 创建菜单
void CreateMenus();
// 添加菜单
void AddMenu(const char* menuName);
// 添加子菜单,menuName-菜单名"--"为分隔符,command要加空格
void AddSubMenu(const char* menuName, const char* command=NULL);
// 添加分隔符
void AddSeparator();
// 添加二级子菜单分隔符
void AddSubSeparator();
static bool IsMenuExist(IAcadPopupMenu *&pMnu,long &index,const char *mnuname,IAcadPopupMenus *mnus);//菜单是否存在,避免二次加载 add by zhengzhilin
static bool GetAcadApplication(IAcadApplication *&pAcadApp);
static bool GetAcadMenuGroup(IAcadMenuGroup **pVal,LPCTSTR menuname);
static bool GetLastMenuFromMenubar(CString &sMenu);
static void ClearMenu(IAcadPopupMenus *mnus,LPCTSTR menuname);
static bool GetAcadApplication(LPDISPATCH * pVal);
static bool GetAcadMenuGroup(IAcadMenuGroup **pVal);
static void CleanUpMenus(); //创建了Menu一定要调用这个函数
private:
class CCADMenuArray : public CArray <CADMenu*, CADMenu*>
...{
public:
int AddMenu(CADMenu& menu);
int AddMenu(const char* menuName, const char* command);
~CCADMenuArray();
};
CArray <CCADMenuArray*, CCADMenuArray*> m_menus;
int m_menuCount; // 菜单个数
CStringArray m_TopMenuNames; // 菜单名
} ;
#endif // !defined(AFX_ADDCADFRAMEMENU_H__153847F5_DE2C_4B6E_83E8_5BE9FE780CD8__INCLUDED_)
作者: Racky Ye
该类封装了在AuToCAD上添加菜单及子菜单的方法,使用COM接口实现
大家可以任意修改,添加新功能,希望大家能多交流
Email: yeguixi@126.com
--------------------------------------------------------------
使用方法:
CAddCADFrameMenu menu;
menu.AddMenu("我的菜单");
menu.AddSubMenu("弹出对话框", "_DLG ");
menu.AddSubMenu("绘制线条", "_DRAWL ");
menu.AddSubMenu("*Line");// 加"*"号表示是二级子菜单
menu.AddSubMenu("$CIRCLE", "_CIRCLE ");//加"$"号表示二级子菜单下的菜单条
menu.AddSubSeparator();
menu.AddSubMenu("$PLINE", "_PLINE ");//加"$"号表示二级子菜单下的菜单条
menu.AddSeparator();
menu.AddSubMenu("选择文件夹", "_SELFOLDER ");
menu.AddSubMenu("*TEXT");// 加"*"号表示是二级子菜单
menu.AddSubMenu("$MTEXT", "_TEXT ");//加"$"号表示二级子菜单下的菜单条
menu.CreateMenus();
--------------------------------------------------------------
----------------------------------------------------------------------------*/
#if !defined(AFX_ADDCADFRAMEMENU_H__153847F5_DE2C_4B6E_83E8_5BE9FE780CD8__INCLUDED_)
#define AFX_ADDCADFRAMEMENU_H__153847F5_DE2C_4B6E_83E8_5BE9FE780CD8__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include < afxtempl.h >
#include " acad15.h "
typedef struct CADMenu
... {
char name[64];
char order[64];
} CADMenu;
class CAddCADFrameMenu
... {
public:
CAddCADFrameMenu();
virtual ~CAddCADFrameMenu();
// 创建菜单
void CreateMenus();
// 添加菜单
void AddMenu(const char* menuName);
// 添加子菜单,menuName-菜单名"--"为分隔符,command要加空格
void AddSubMenu(const char* menuName, const char* command=NULL);
// 添加分隔符
void AddSeparator();
// 添加二级子菜单分隔符
void AddSubSeparator();
static bool IsMenuExist(IAcadPopupMenu *&pMnu,long &index,const char *mnuname,IAcadPopupMenus *mnus);//菜单是否存在,避免二次加载 add by zhengzhilin
static bool GetAcadApplication(IAcadApplication *&pAcadApp);
static bool GetAcadMenuGroup(IAcadMenuGroup **pVal,LPCTSTR menuname);
static bool GetLastMenuFromMenubar(CString &sMenu);
static void ClearMenu(IAcadPopupMenus *mnus,LPCTSTR menuname);
static bool GetAcadApplication(LPDISPATCH * pVal);
static bool GetAcadMenuGroup(IAcadMenuGroup **pVal);
static void CleanUpMenus(); //创建了Menu一定要调用这个函数
private:
class CCADMenuArray : public CArray <CADMenu*, CADMenu*>
...{
public:
int AddMenu(CADMenu& menu);
int AddMenu(const char* menuName, const char* command);
~CCADMenuArray();
};
CArray <CCADMenuArray*, CCADMenuArray*> m_menus;
int m_menuCount; // 菜单个数
CStringArray m_TopMenuNames; // 菜单名
} ;
#endif // !defined(AFX_ADDCADFRAMEMENU_H__153847F5_DE2C_4B6E_83E8_5BE9FE780CD8__INCLUDED_)
AddCADFrameMenu.cpp文件如下:
/**/
/*-------------------------------------------------------------------------
作者:Racky Ye
该类封装了在AuToCAD上添加菜单及子菜单的方法,使用COM接口实现
大家可以任意修改,添加新功能,希望大家能多交流
Email: yeguixi@126.com
--------------------------------------------------------------*/
#include " stdafx.h "
#include " resource.h "
#include " AddCADFrameMenu.h "
#include " acad15_i.c "
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#define new DEBUG_NEW
#endif
static CStringArray stcMyTopMenuNames; // 存储新添加的CAD顶级菜单项名称
/**/ //
// Construction/Destruction
/**/ //
CAddCADFrameMenu::CAddCADFrameMenu()
... {
m_menuCount = 0;
m_TopMenuNames.RemoveAll();
}
CAddCADFrameMenu:: ~ CAddCADFrameMenu()
... {
int num = m_menus.GetSize();
for (int i=0; i<num; i++) ...{
if (m_menus.GetAt(i) != NULL)
delete m_menus[i];
}
}
int CAddCADFrameMenu::CCADMenuArray::AddMenu(CADMenu & menu)
... {
CADMenu*
作者:Racky Ye
该类封装了在AuToCAD上添加菜单及子菜单的方法,使用COM接口实现
大家可以任意修改,添加新功能,希望大家能多交流
Email: yeguixi@126.com
--------------------------------------------------------------*/
#include " stdafx.h "
#include " resource.h "
#include " AddCADFrameMenu.h "
#include " acad15_i.c "
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#define new DEBUG_NEW
#endif
static CStringArray stcMyTopMenuNames; // 存储新添加的CAD顶级菜单项名称
/**/ //
// Construction/Destruction
/**/ //
CAddCADFrameMenu::CAddCADFrameMenu()
... {
m_menuCount = 0;
m_TopMenuNames.RemoveAll();
}
CAddCADFrameMenu:: ~ CAddCADFrameMenu()
... {
int num = m_menus.GetSize();
for (int i=0; i<num; i++) ...{
if (m_menus.GetAt(i) != NULL)
delete m_menus[i];
}
}
int CAddCADFrameMenu::CCADMenuArray::AddMenu(CADMenu & menu)
... {
CADMenu*