天天看點

一個在AutoCAD裡添加菜單的類,用COM接口實作

AddCADFrameMenu.h檔案如下:

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

#if  !defined(AFX_ADDCADFRAMEMENU_H__153847F5_DE2C_4B6E_83E8_5BE9FE780CD8__INCLUDED_)

一個在AutoCAD裡添加菜單的類,用COM接口實作

#define  AFX_ADDCADFRAMEMENU_H__153847F5_DE2C_4B6E_83E8_5BE9FE780CD8__INCLUDED_

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

#if  _MSC_VER > 1000

一個在AutoCAD裡添加菜單的類,用COM接口實作

#pragma  once

一個在AutoCAD裡添加菜單的類,用COM接口實作

#endif   //  _MSC_VER > 1000

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

#include  < afxtempl.h >

一個在AutoCAD裡添加菜單的類,用COM接口實作

#include  " acad15.h "

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

typedef  struct  CADMenu

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 char name[64];

一個在AutoCAD裡添加菜單的類,用COM接口實作

 char order[64];

一個在AutoCAD裡添加菜單的類,用COM接口實作

} CADMenu;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

class  CAddCADFrameMenu  

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

public:

一個在AutoCAD裡添加菜單的類,用COM接口實作

 CAddCADFrameMenu();

一個在AutoCAD裡添加菜單的類,用COM接口實作

 virtual ~CAddCADFrameMenu();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 // 建立菜單

一個在AutoCAD裡添加菜單的類,用COM接口實作

 void CreateMenus();

一個在AutoCAD裡添加菜單的類,用COM接口實作

 // 添加菜單

一個在AutoCAD裡添加菜單的類,用COM接口實作

 void AddMenu(const char* menuName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 // 添加子菜單,menuName-菜單名"--"為分隔符,command要加空格

一個在AutoCAD裡添加菜單的類,用COM接口實作

 void AddSubMenu(const char* menuName, const char* command=NULL);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 // 添加分隔符

一個在AutoCAD裡添加菜單的類,用COM接口實作

 void AddSeparator();

一個在AutoCAD裡添加菜單的類,用COM接口實作

 // 添加二級子菜單分隔符

一個在AutoCAD裡添加菜單的類,用COM接口實作

 void AddSubSeparator();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 static bool IsMenuExist(IAcadPopupMenu *&pMnu,long &index,const char *mnuname,IAcadPopupMenus *mnus);//菜單是否存在,避免二次加載 add by zhengzhilin

一個在AutoCAD裡添加菜單的類,用COM接口實作

 static bool GetAcadApplication(IAcadApplication *&pAcadApp);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 static bool GetAcadMenuGroup(IAcadMenuGroup  **pVal,LPCTSTR menuname);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 static bool GetLastMenuFromMenubar(CString &sMenu);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 static void ClearMenu(IAcadPopupMenus *mnus,LPCTSTR menuname);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 static bool GetAcadApplication(LPDISPATCH * pVal);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 static bool GetAcadMenuGroup(IAcadMenuGroup  **pVal);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 static void CleanUpMenus(); //建立了Menu一定要調用這個函數

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

private:

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 class CCADMenuArray : public CArray <CADMenu*, CADMenu*>

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

 public:

一個在AutoCAD裡添加菜單的類,用COM接口實作

  int AddMenu(CADMenu& menu);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  int AddMenu(const char* menuName, const char* command);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  ~CCADMenuArray();

一個在AutoCAD裡添加菜單的類,用COM接口實作

 };

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 CArray <CCADMenuArray*, CCADMenuArray*> m_menus;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 int m_menuCount;  // 菜單個數

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 CStringArray m_TopMenuNames; // 菜單名

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

} ;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

#endif   //  !defined(AFX_ADDCADFRAMEMENU_H__153847F5_DE2C_4B6E_83E8_5BE9FE780CD8__INCLUDED_)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

AddCADFrameMenu.cpp檔案如下:

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

#include  " stdafx.h "

一個在AutoCAD裡添加菜單的類,用COM接口實作

#include  " resource.h "

一個在AutoCAD裡添加菜單的類,用COM接口實作

#include  " AddCADFrameMenu.h "

一個在AutoCAD裡添加菜單的類,用COM接口實作

#include  " acad15_i.c "

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

#ifdef _DEBUG

一個在AutoCAD裡添加菜單的類,用COM接口實作

#undef  THIS_FILE

一個在AutoCAD裡添加菜單的類,用COM接口實作

static   char  THIS_FILE[] = __FILE__;

一個在AutoCAD裡添加菜單的類,用COM接口實作

#define  new DEBUG_NEW

一個在AutoCAD裡添加菜單的類,用COM接口實作

#endif

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

static  CStringArray stcMyTopMenuNames; // 存儲新添加的CAD頂級菜單項名稱

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

//

一個在AutoCAD裡添加菜單的類,用COM接口實作

//  Construction/Destruction

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

//

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

CAddCADFrameMenu::CAddCADFrameMenu()

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 m_menuCount = 0;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 m_TopMenuNames.RemoveAll();

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

CAddCADFrameMenu:: ~ CAddCADFrameMenu()

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 int num = m_menus.GetSize();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 for (int i=0; i<num; i++) ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

  if (m_menus.GetAt(i) != NULL) 

一個在AutoCAD裡添加菜單的類,用COM接口實作

   delete m_menus[i];

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

int  CAddCADFrameMenu::CCADMenuArray::AddMenu(CADMenu &  menu)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 CADMenu* pMenu = new CADMenu;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 sprintf(pMenu->name, menu.name);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 sprintf(pMenu->order, menu.order);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 return Add(pMenu);

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

int  CAddCADFrameMenu::CCADMenuArray::AddMenu( const   char *  menuName,  const   char *  command)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 if (sizeof(menuName) > 63) ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

#ifdef _DEBUG

一個在AutoCAD裡添加菜單的類,用COM接口實作

  acutPrintf("menuName'%s'長度超出範圍 ", menuName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

#endif  

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return -99; 

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 if (sizeof(command) > 63) ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

#ifdef _DEBUG

一個在AutoCAD裡添加菜單的類,用COM接口實作

  acutPrintf("command'%s'長度超出範圍 ", command);

一個在AutoCAD裡添加菜單的類,用COM接口實作

#endif  

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return -99; 

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 CADMenu* pMenu = new CADMenu;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 sprintf(pMenu->name, menuName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 if (command != NULL)

一個在AutoCAD裡添加菜單的類,用COM接口實作

  sprintf(pMenu->order, command);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 return Add(pMenu); 

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

CAddCADFrameMenu::CCADMenuArray:: ~ CCADMenuArray()

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 for (int i=0; i<m_nSize; i++) ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  if (GetAt(i) != NULL) ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

   delete GetAt(i);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  }

一個在AutoCAD裡添加菜單的類,用COM接口實作

 } 

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

void  CAddCADFrameMenu::AddSubMenu( const   char *  menuName, 

一個在AutoCAD裡添加菜單的類,用COM接口實作

           const   char *  command)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 RXASSERT(menuName != NULL);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 if (m_menuCount == 0) ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

#ifdef _DEBUG

一個在AutoCAD裡添加菜單的類,用COM接口實作

  acutPrintf("添加子菜單%s前沒有調用AddMenu添加一個菜單條目!無法添加子菜單 ", menuName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

#endif

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作

 m_menus[m_menuCount-1]->AddMenu(menuName, command);

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

void  CAddCADFrameMenu::AddSeparator()

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 m_menus[m_menuCount-1]->AddMenu("--", "");

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

void  CAddCADFrameMenu::AddSubSeparator()

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 m_menus[m_menuCount-1]->AddMenu("$--", "");

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

void  CAddCADFrameMenu::AddMenu( const   char *  menuName)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 m_TopMenuNames.Add(menuName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 CCADMenuArray* pArr = new CCADMenuArray;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 m_menuCount = m_menus.Add(pArr) + 1;

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

bool  CAddCADFrameMenu::GetAcadApplication(LPDISPATCH  *  pVal)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... { 

一個在AutoCAD裡添加菜單的類,用COM接口實作

 LPDISPATCH pDispatch = acedGetAcadWinApp()->GetIDispatch(TRUE);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 if (pDispatch == NULL)

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return false;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 *pVal = pDispatch;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 return true;

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

bool  CAddCADFrameMenu::GetAcadApplication(IAcadApplication  *& pAcadApp)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 LPDISPATCH  pDisp = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 if (!GetAcadApplication(&pDisp))

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return false;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 HRESULT hr = S_OK;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 hr = pDisp->QueryInterface(IID_IAcadApplication, (LPVOID*)&pAcadApp);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 if (FAILED(hr))

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return false;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 return true;

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

bool  CAddCADFrameMenu::GetLastMenuFromMenubar(CString  & sMenu)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadApplication *pAcad = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 if(!GetAcadApplication(pAcad))

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return false;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadMenuBar *pMenuBar=NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadPopupMenu  *pPopUpMenu=NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 pAcad->get_MenuBar(&pMenuBar);

一個在AutoCAD裡添加菜單的類,用COM接口實作

    pAcad->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作

    long numberOfMenus;

一個在AutoCAD裡添加菜單的類,用COM接口實作

    pMenuBar->get_Count(&numberOfMenus);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 //得到菜單欄上面的最後一個菜單

一個在AutoCAD裡添加菜單的類,用COM接口實作

 BSTR name;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 VARIANT vIndex;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 vIndex.vt=VT_I4;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 vIndex.lVal=numberOfMenus-1;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 pMenuBar->Item(vIndex,&pPopUpMenu);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 pMenuBar->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作

 pPopUpMenu->get_NameNoMnemonic(&name);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 pPopUpMenu->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 sMenu.Format("%S",name);//debug 大寫,用于轉化LPWSTR類型字元串

一個在AutoCAD裡添加菜單的類,用COM接口實作

 SysFreeString(name);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 return true;

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

bool  CAddCADFrameMenu::GetAcadMenuGroup(IAcadMenuGroup   ** pVal,LPCTSTR menuname)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadApplication *acadApp = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 HRESULT hr = S_OK;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 if(!GetAcadApplication(acadApp))

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return false;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 LPDISPATCH  pTempDisp = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadMenuGroups *mnuGrps = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 long cnt = 0, cntmnu=0;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 //得到菜單組集

一個在AutoCAD裡添加菜單的類,用COM接口實作

 hr = acadApp->get_MenuGroups(&mnuGrps);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 if (FAILED(hr))

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

  acadApp->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return false;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作

 acadApp->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 mnuGrps->get_Count(&cnt);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 //得到菜單組

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadMenuGroup *mnuGrp = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadPopupMenus  *mnus = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadPopupMenu *pPopUpMenu=NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 VARIANT  vtName,vtMenu;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 vtName.vt = VT_I4;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 vtMenu.vt = VT_I4;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 BSTR  mnuName;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 bool found = false ;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 for (long i=0; i < cnt; i++)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

  vtName.lVal = i;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  hr = mnuGrps->Item(vtName, &mnuGrp);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  if (FAILED(hr))

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

   return false;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  mnuGrp->get_Menus(&mnus);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  mnus->get_Count(&cntmnu);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  for(long j=0;j<cntmnu;j++)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

   vtMenu.lVal=j;

一個在AutoCAD裡添加菜單的類,用COM接口實作

   hr=mnus->Item(vtMenu,&pPopUpMenu);

一個在AutoCAD裡添加菜單的類,用COM接口實作

   if(FAILED(hr))

一個在AutoCAD裡添加菜單的類,用COM接口實作

    continue;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

   pPopUpMenu->get_Name(&mnuName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

   pPopUpMenu->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

   CString sMenuName(mnuName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

   SysFreeString(mnuName);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

   sMenuName.Replace("&","");//debug

一個在AutoCAD裡添加菜單的類,用COM接口實作

   if(sMenuName.CompareNoCase(menuname)==0)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

   ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

    found=true;

一個在AutoCAD裡添加菜單的類,用COM接口實作

    *pVal = mnuGrp;

一個在AutoCAD裡添加菜單的類,用COM接口實作

    break;

一個在AutoCAD裡添加菜單的類,用COM接口實作

   }

一個在AutoCAD裡添加菜單的類,用COM接口實作

  }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  mnus->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  if(found)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

   break;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  }

一個在AutoCAD裡添加菜單的類,用COM接口實作

  else

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

   mnuGrp->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作

  }

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 mnuGrps->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 return found;

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

bool  CAddCADFrameMenu::GetAcadMenuGroup(IAcadMenuGroup   ** pVal)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadApplication *acadApp = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 HRESULT hr = S_OK;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 if(!GetAcadApplication(acadApp))

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return false;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 LPDISPATCH  pTempDisp = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadMenuGroups *mnuGrps = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 long cnt = 0;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 //得到菜單組集

一個在AutoCAD裡添加菜單的類,用COM接口實作

 hr = acadApp->get_MenuGroups(&mnuGrps);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 if (FAILED(hr))

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

  acadApp->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return false;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作

 acadApp->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 mnuGrps->get_Count(&cnt);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 //得到菜單組

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadMenuGroup *mnuGrp = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 VARIANT  vtName;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 vtName.vt = VT_I4;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 BSTR  grpName;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 bool found = false ;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 for (long i=0; i < cnt; i++)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

  vtName.lVal = i;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  hr = mnuGrps->Item(vtName, &mnuGrp);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  if (FAILED(hr))

一個在AutoCAD裡添加菜單的類,用COM接口實作

   continue;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  hr  = mnuGrp->get_Name(&grpName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  CString cgrpName(grpName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  SysFreeString(grpName);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  if (cgrpName.CompareNoCase("Acad")==0) 

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

   found = true;

一個在AutoCAD裡添加菜單的類,用COM接口實作

   *pVal = mnuGrp;

一個在AutoCAD裡添加菜單的類,用COM接口實作

   break;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  }

一個在AutoCAD裡添加菜單的類,用COM接口實作

  else

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

   mnuGrp->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作

  }

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 mnuGrps->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 return found;

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

void  CAddCADFrameMenu::CreateMenus()

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 CMDIFrameWnd * pMainFrame = acedGetAcadFrame();

一個在AutoCAD裡添加菜單的類,用COM接口實作

 pMainFrame->LockWindowUpdate();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 //得到菜單欄上面的最後一個菜單

一個在AutoCAD裡添加菜單的類,用COM接口實作

 CString sName;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 if(!GetLastMenuFromMenubar(sName))

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 sName.Replace("&","");//debug

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadMenuGroup *mnuGrp = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 if (!GetAcadMenuGroup(&mnuGrp,sName))

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return ;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 //得到所有菜單組

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadPopupMenus   *mnus = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  IAcadPopupMenu   *mnu = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadPopupMenuItem  *mnuitem = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 HRESULT hr = S_OK;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 hr = mnuGrp->get_Menus(&mnus);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 long cnt = 0l;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 hr = mnus->get_Count(&cnt);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 int i = 0;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 int j = 0;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 int k = 0;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 VARIANT index;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 VariantInit(&index);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 V_VT(&index) = VT_I4;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 CArray<IAcadPopupMenu*, IAcadPopupMenu*> MnuAdrs; 

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 long lIndex=0;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 WCHAR MenuName[256];

一個在AutoCAD裡添加菜單的類,用COM接口實作

 for (i = 0; i < m_menuCount; i++) 

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

  CString tmpMenu=m_TopMenuNames[i];

一個在AutoCAD裡添加菜單的類,用COM接口實作

  tmpMenu.Replace("&","");

一個在AutoCAD裡添加菜單的類,用COM接口實作

  if(IsMenuExist(mnu,lIndex,tmpMenu,mnus))//處理二次加載

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

   V_I4(&index) = lIndex;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  }

一個在AutoCAD裡添加菜單的類,用COM接口實作

  else

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

   MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, m_TopMenuNames[i], -1, MenuName, 256); 

一個在AutoCAD裡添加菜單的類,用COM接口實作

   mnus->Add(MenuName, &mnu); 

一個在AutoCAD裡添加菜單的類,用COM接口實作

   V_I4(&index) = cnt++;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  MnuAdrs.Add(mnu);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  mnu->InsertInMenuBar(index);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadPopupMenu *MenuItem = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 int subMenuNum = 0;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 CCADMenuArray* Menus;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 WCHAR szSubMenu[256];

一個在AutoCAD裡添加菜單的類,用COM接口實作

 WCHAR szSubMenuMacro[256];

一個在AutoCAD裡添加菜單的類,用COM接口實作

 CString MenusName;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 CString Menusorder;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 for (j = 0; j < m_menuCount; j++) ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

  Menus = m_menus.GetAt(j);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  subMenuNum = Menus->GetSize();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  for (k = 0; k < subMenuNum; k++) ...{ 

一個在AutoCAD裡添加菜單的類,用COM接口實作

   mnu = MnuAdrs.GetAt(j);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

   if (!strcmp("--", Menus->GetAt(k)->name)) ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

    V_I4(&index) = k;

一個在AutoCAD裡添加菜單的類,用COM接口實作

    mnu->AddSeparator(index, &mnuitem);

一個在AutoCAD裡添加菜單的類,用COM接口實作

   }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

   else ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

    V_I4(&index) = k;    

一個在AutoCAD裡添加菜單的類,用COM接口實作

    MenusName = Menus->GetAt(k)->name; 

一個在AutoCAD裡添加菜單的類,用COM接口實作

    Menusorder = Menus->GetAt(k)->order;

一個在AutoCAD裡添加菜單的類,用COM接口實作

    MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, MenusName, -1, szSubMenu, 256); 

一個在AutoCAD裡添加菜單的類,用COM接口實作

    MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, Menusorder, -1, szSubMenuMacro, 256); 

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

    if (strcspn(Menus->GetAt(k)->name, "*") < (size_t)MenusName.GetLength())...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

     MenusName.TrimLeft('*');

一個在AutoCAD裡添加菜單的類,用COM接口實作

     MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, MenusName, -1, szSubMenu, 256); 

一個在AutoCAD裡添加菜單的類,用COM接口實作

     hr = mnu->AddSubMenu(index, szSubMenu, &MenuItem);

一個在AutoCAD裡添加菜單的類,用COM接口實作

    }    

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

    else if (strcspn(Menus->GetAt(k)->name, "$") < (size_t)MenusName.GetLength() )...{        

一個在AutoCAD裡添加菜單的類,用COM接口實作

     MenusName.TrimLeft('$');

一個在AutoCAD裡添加菜單的類,用COM接口實作

     if(MenusName.Compare("--")==0)//添加子菜單的分隔符

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

     ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

      hr = MenuItem->AddSeparator(index, &mnuitem);

一個在AutoCAD裡添加菜單的類,用COM接口實作

     }

一個在AutoCAD裡添加菜單的類,用COM接口實作

     else

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

     ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

      MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, MenusName, -1, szSubMenu, 256); 

一個在AutoCAD裡添加菜單的類,用COM接口實作

      hr = MenuItem->AddMenuItem(index, szSubMenu, szSubMenuMacro, &mnuitem);

一個在AutoCAD裡添加菜單的類,用COM接口實作

     }

一個在AutoCAD裡添加菜單的類,用COM接口實作

    }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

    else ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

     hr = mnu->AddMenuItem(index, szSubMenu, szSubMenuMacro, &mnuitem);

一個在AutoCAD裡添加菜單的類,用COM接口實作

    }

一個在AutoCAD裡添加菜單的類,用COM接口實作

   }

一個在AutoCAD裡添加菜單的類,用COM接口實作

  }

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 for (i=0; i<MnuAdrs.GetSize(); i++)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

  MnuAdrs[i]->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作

 mnuitem->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作

 mnus->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作

 mnuGrp->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作

 pMainFrame->UnlockWindowUpdate(); 

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 stcMyTopMenuNames.Copy(m_TopMenuNames);//将頂級菜單名存入靜态數組中,解除安裝時使用

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 return ;

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

bool  CAddCADFrameMenu::IsMenuExist(IAcadPopupMenu  *& pMnu, long   & index, const   char   * mnuname,IAcadPopupMenus  * mnus)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 ASSERT(mnus!=NULL);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 long cnt = 0l;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 HRESULT hr = mnus->get_Count(&cnt);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 bool found = false;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 int curMenuIndex=-1;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 BSTR tempName;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

#ifdef _DEBUG

一個在AutoCAD裡添加菜單的類,用COM接口實作

 acutPrintf("IsMenuExist cnt=%ld ",cnt);

一個在AutoCAD裡添加菜單的類,用COM接口實作

#endif

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 //

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadPopupMenu *toolsMenu = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 for (long i=0; i < cnt; i++)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

  VARIANT vtName;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  VariantInit(&vtName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  V_VT(&vtName) = VT_I4;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  V_I4(&vtName) = i;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  hr = mnus->Item(vtName, &toolsMenu);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  if (FAILED(hr))

一個在AutoCAD裡添加菜單的類,用COM接口實作

   return false;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  hr = toolsMenu->get_NameNoMnemonic(&tempName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  CString mnuName(tempName);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

#ifdef _DEBUG

一個在AutoCAD裡添加菜單的類,用COM接口實作

  acutPrintf(" %d,%s",i,mnuName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

#endif

一個在AutoCAD裡添加菜單的類,用COM接口實作

  if(mnuName.Compare(mnuname)==0)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

   index=i;

一個在AutoCAD裡添加菜單的類,用COM接口實作

   pMnu=toolsMenu;

一個在AutoCAD裡添加菜單的類,用COM接口實作

   return true;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  } 

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作

 pMnu=NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 return false;

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

void  CAddCADFrameMenu::CleanUpMenus()

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadMenuGroup *mnuGrp = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 for(int i=0;i<stcMyTopMenuNames.GetSize();i++)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

  CString sMenu=stcMyTopMenuNames.GetAt(i);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  sMenu.Replace("&","");

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  if (!GetAcadMenuGroup(&mnuGrp,sMenu))

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

#ifdef _DEBUG

一個在AutoCAD裡添加菜單的類,用COM接口實作

   acutPrintf("沒有找到 %s 所屬的菜單組,無法解除安裝。 ",sMenu);

一個在AutoCAD裡添加菜單的類,用COM接口實作

#endif

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

//   mnuGrp->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作

   continue;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  //得到所有菜單組 

一個在AutoCAD裡添加菜單的類,用COM接口實作

  IAcadPopupMenus  *mnus = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  HRESULT hr = S_OK;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  hr = mnuGrp->get_Menus(&mnus);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  ClearMenu(mnus,sMenu);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  mnus->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作

  mnuGrp->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 stcMyTopMenuNames.RemoveAll();

一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

void  CAddCADFrameMenu::ClearMenu(IAcadPopupMenus  * mnus,LPCTSTR menuname)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

... {

一個在AutoCAD裡添加菜單的類,用COM接口實作

 long cnt = 0l;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 HRESULT hr = mnus->get_Count(&cnt);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 //now get Tools menu

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadPopupMenu *toolsMenu = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 BSTR   tempName;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 VARIANT vtName;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 VariantInit(&vtName);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 bool found = false;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 for (long i=0; i < cnt; i++)...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

  vtName.vt = VT_I4;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  vtName.lVal = i;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  hr = mnus->Item(vtName, &toolsMenu);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  if (FAILED(hr))

一個在AutoCAD裡添加菜單的類,用COM接口實作

   return ;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  hr = toolsMenu->get_NameNoMnemonic(&tempName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  CString mnuName(tempName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  SysFreeString(tempName);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  if(mnuName.CompareNoCase(menuname)==0)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

  ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

   found = true;

一個在AutoCAD裡添加菜單的類,用COM接口實作

   break;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  }

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 if (!found)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

  acutPrintf("沒有找到菜單 : %s ",menuname);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  return;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 hr = toolsMenu->get_Count(&cnt);

一個在AutoCAD裡添加菜單的類,用COM接口實作

 VARIANT vIndex;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 vIndex.vt = VT_I4;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 vIndex.lVal = cnt;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 IAcadPopupMenuItem *cmd1 = NULL;

一個在AutoCAD裡添加菜單的類,用COM接口實作

 while(cnt--)

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 ...{

一個在AutoCAD裡添加菜單的類,用COM接口實作

  vIndex.lVal=cnt;

一個在AutoCAD裡添加菜單的類,用COM接口實作

  hr=toolsMenu->Item(vIndex,&cmd1);

一個在AutoCAD裡添加菜單的類,用COM接口實作

  hr=cmd1->Delete();

一個在AutoCAD裡添加菜單的類,用COM接口實作

  cmd1->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作

 }

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 toolsMenu->RemoveFromMenuBar();

一個在AutoCAD裡添加菜單的類,用COM接口實作

 toolsMenu->Release();

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 mnus->RemoveMenuFromMenuBar(vtName);

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

 return;

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作

}

一個在AutoCAD裡添加菜單的類,用COM接口實作
一個在AutoCAD裡添加菜單的類,用COM接口實作