找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 622|回复: 11

[ARX程序]:如何直接通过CMenu类函数在autocad菜单中添加一条菜单命令项?

[复制链接]
发表于 2004-2-28 09:18:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
不使用autocad的menu文件,如何直接通过CMenu类函数在autocad菜单中添加一条菜单命令项,并能发送命令执行?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-3-23 16:15:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
[php]
CWnd* pWnd=NULL;
pWnd=CWnd::FromHandle (adsw_acadMainWnd());
CMenu* pMenu=NULL;
pMenu=pWnd->GetMenu ();//get the menu of the main wnd
int count=pMenu->GetMenuItemCount ();//change the setting
CString str;
for (int i = 0; i < count; i++)
{
      CString str;
      if (pMenu->GetMenuString(i, str, MF_BYPOSITION)){
                  AfxMessageBox(str);
          }
      
   }
   pMenu->AppendMenu (MF_BYPOSITION,ID_SHOW,"窗口(&S)");
   pWnd->DrawMenuBar ();
[/php]
我能得到菜单,并且也可以往上面添加,可是怎么添加消息处理函数啊???
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-4-19 16:42:00 | 显示全部楼层
我觉得最好最简单的方法是修改菜单文件
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-20 08:02:11 | 显示全部楼层
按照帮助文件中Using COM to Access AutoCAD ActiveX Automation 介绍的方法,从COM实现
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-21 00:44:09 | 显示全部楼层
[php]
TRY
    {
        IAcadApplication IAcad(acedGetAcadWinApp()->GetIDispatch(TRUE));
      
        IAcadMenuBar IMenuBar(IAcad.GetMenuBar());
        
        long numberOfMenus;
        numberOfMenus = IMenuBar.GetCount();
        
        IAcadMenuGroups IMenuGroups(IAcad.GetMenuGroups());
   
        VARIANT index;
        VariantInit(&index);
        V_VT(&index) = VT_I4;
        V_I4(&index) = 0;

        IAcadMenuGroup IMenuGroup(IMenuGroups.Item(index));
   
        IAcadPopupMenus IPopUpMenus(IMenuGroup.GetMenus());

        CString cstrMenuName = "电子报批";

        VariantInit(&index);
        V_VT(&index) = VT_BSTR;
        V_BSTR(&index) = cstrMenuName.AllocSysString();
        
        IDispatch* pDisp = NULL;

        //see if the menu is already there
        TRY
                {
                        pDisp = IPopUpMenus.Item(index);
                        pDisp->AddRef();
                }
               
                CATCH(COleDispatchException,e)
                {
                }
                END_CATCH;
        
        if (pDisp==NULL)
                {
                       
                        VARIANT subMenuIndex;
                        VariantInit(&subMenuIndex);
                        V_VT(&subMenuIndex) = VT_I4;
                        V_I4(&subMenuIndex) = 0;
                       

                        IAcadPopupMenu IPopUp;
            //create it
            IAcadPopupMenu IPopUpMenu(IPopUpMenus.Add(cstrMenuName));
            
            VariantInit(&index);
            V_VT(&index) = VT_I4;
            V_I4(&index) = 0;

                        //0
                        IPopUpMenu.AddMenuItem(index,"图层","IniLayer ");
            VariantInit(&index);
            V_VT(&index) = VT_I4;
            //1
                        V_I4(&index) = 1;
            IPopUpMenu.AddSeparator(index);

                        //2
            V_I4(&index) = 2;
                        IAcadPopupMenu subMenu(IPopUpMenu.AddSubMenu(index,"预处理"));
                        subMenu.AddMenuItem(subMenuIndex,"重复点", "Deldup ");
                       
                        V_I4(&subMenuIndex) = 1;
                        subMenu.AddMenuItem(subMenuIndex,"自叉", "CKSC ");

                        V_I4(&subMenuIndex) = 2;
                        subMenu.AddMenuItem(subMenuIndex,"封闭", "CKCLOSE ");

       
                        //3
            V_I4(&index) = 3;
            IPopUpMenu.AddSeparator(index);
            
                        //4
                        V_I4(&index) = 4;
                        V_I4(&subMenuIndex) = 0;
                        subMenu.AttachDispatch(IPopUpMenu.AddSubMenu(index,"通用检测模块"));

                        subMenu.AddMenuItem(subMenuIndex,"检测", "CCRS ");

                        V_I4(&subMenuIndex) = 1;
                        subMenu.AddMenuItem(subMenuIndex,"重叠检测", "CKLAP ");
                       
                        V_I4(&subMenuIndex) = 2;
                        subMenu.AddMenuItem(subMenuIndex,"检测", "CKPOS ");
               
                        V_I4(&subMenuIndex) = 3;
                        subMenu.AddMenuItem(subMenuIndex,"检测", "CKPR ");
                       
                        V_I4(&subMenuIndex) = 4;
                        subMenu.AddMenuItem(subMenuIndex,"检测", "CKBD ");
               
                        //5
                        V_I4(&index) = 5;
            IPopUpMenu.AddSeparator(index);

                        //6
                        V_I4(&index) = 6;
                        V_I4(&subMenuIndex) = 0;
                        subMenu.AttachDispatch(IPopUpMenu.AddSubMenu(index,"专业检测模块"));

                        subMenu.AddMenuItem(subMenuIndex,"检测", "CRBUGR ");

                        V_I4(&subMenuIndex) = 1;
                        subMenu.AddMenuItem(subMenuIndex,"检测", "ROADGR ");
                       
                        V_I4(&subMenuIndex) = 2;
                        subMenu.AddMenuItem(subMenuIndex,"退让", "HXBK ");
               
                        V_I4(&subMenuIndex) = 3;
                        subMenu.AddMenuItem(subMenuIndex,"退让", "HRB ");
                       

                        //7
                        V_I4(&index) = 7;
            IPopUpMenu.AddSeparator(index);

                        //8
                        V_I4(&index) = 8;
                        IPopUpMenu.AddMenuItem(index,"阴影","shadow ");

                       
                        //9
                        V_I4(&index) = 9;
                        IPopUpMenu.AddMenuItem(index,"指标输出","Calcinfo ");

                        //10
                        V_I4(&index) = 10;
                        IPopUpMenu.AddMenuItem(index,"转换","dwg2shp ");
               
                        //11
                        V_I4(&index) = 11;
                        IPopUpMenu.AddMenuItem(index,"3图","CR3DBL ");

                        //12
                        V_I4(&index) = 12;
            IPopUpMenu.AddSeparator(index);

                        //13
                        V_I4(&index) = 13;
                        V_I4(&subMenuIndex) = 0;
                        subMenu.AttachDispatch(IPopUpMenu.AddSubMenu(index,"规整"));

                        subMenu.AddMenuItem(subMenuIndex,"属性", "ADDX ");

                        V_I4(&subMenuIndex) = 1;
                        subMenu.AddMenuItem(subMenuIndex,"外轮廓", "gb ");
                       

            pDisp = IPopUpMenu.m_lpDispatch;
            pDisp->AddRef();
        }

        IAcadPopupMenu IPopUpMenu(pDisp);
        if (!IPopUpMenu.GetOnMenuBar())
        {
            VariantInit(&index);
            V_VT(&index) = VT_I4;
            V_I4(&index) = numberOfMenus - 2;;
            IPopUpMenu.InsertInMenuBar(index);
        }
        else
        {
            VariantInit(&index);
            V_VT(&index) = VT_BSTR;
            V_BSTR(&index) = cstrMenuName.AllocSysString();
            IPopUpMenus.RemoveMenuFromMenuBar(index);
        }
        pDisp->Release();
    }
    CATCH(COleDispatchException,e)
    {
        e->ReportError();
        e->Delete();
    }
    END_CATCH;
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-21 12:35:54 | 显示全部楼层

谢谢了,原来ObjectArx中有例子。

谢谢了,原来ObjectArx中有例子。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-21 14:36:21 | 显示全部楼层
但是如果是在启动autocad的时候加载arx程序时产生自己添加的菜单好像用com接口时不能实现的吧,还不如修改菜单文件来的实在啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-21 18:22:00 | 显示全部楼层
最初由 xinxiande 发布
[B]但是如果是在启动autocad的时候加载arx程序时产生自己添加的菜单好像用com接口时不能实现的吧,还不如修改菜单文件来的实在啊! [/B]


在启动autocad的时候加载arx程序时产生自己添加的菜单用com接口时始能实现的,只不过你不能放在InitApplication()中实现,因为这时文档还不存在
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-22 11:43:34 | 显示全部楼层
请教如何的实现啊???
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-22 21:25:31 | 显示全部楼层
还是搞不明白?各位大侠能不能讲得详细一点!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-29 09:37:45 | 显示全部楼层
如果使用修改菜单文件的方法,如何在打开autocad的同时使其自动加载要添加的菜单项中的下拉菜单项需要加载的arx?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-30 12:32:57 | 显示全部楼层
启动autocad的时候自动加载该arx就好了吧!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-21 17:38 , Processed in 0.215635 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表