一个在AutoCAD里添加菜单的类,用COM接口实现

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_)

 

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
*
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值