明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1748|回复: 1

ObkectARX为cad添加新的菜单

[复制链接]
发表于 2008-2-29 10:51:00 | 显示全部楼层 |阅读模式

请教各位怎样使用objectARX为cad添加新的菜单和菜单项。

相关的代码怎么写啊

谢谢!

发表于 2008-2-29 17:50:00 | 显示全部楼层
<pre class="prog_in_0">看帮助Com and ActiveX Automation中有</pre><pre class="prog_in_0">void addMenuThroughCom()</pre><pre class="prog_in_0">{</pre><pre class="prog_in_0">    AutoCAD::IAcadApplication *pAcad;</pre><pre class="prog_in_0">    AutoCAD::IAcadMenuBar *pMenuBar;</pre><pre class="prog_in_0">    AutoCAD::IAcadMenuGroups *pMenuGroups;</pre><pre class="prog_in_0">    AutoCAD::IAcadMenuGroup *pMenuGroup;</pre><pre class="prog_in_0">    AutoCAD::IAcadPopupMenus *pPopUpMenus;</pre><pre class="prog_in_0">    AutoCAD::IAcadPopupMenu *pPopUpMenu;</pre><pre class="prog_in_0">    AutoCAD::IAcadPopupMenuItem *pPopUpMenuItem;</pre><pre class="prog_in_0">    HRESULT hr = NOERROR;</pre><pre class="prog_in_0">    CLSID clsid;</pre><pre class="prog_in_0">    LPUNKNOWN pUnk = NULL;</pre><pre class="prog_in_0">    LPDISPATCH pAcadDisp = NULL; </pre><pre class="prog_in_0"></pre><pre class="prog_in_0">    hr = ::CLSIDFromProgID(L"AutoCAD.Application",</pre><pre class="prog_in_0">        &amp;clsid);</pre><pre class="prog_in_0">    if (FAILED(hr))</pre><pre class="prog_in_0">        return;</pre><pre class="prog_in_0">    if(::GetActiveObject(clsid, NULL, &amp;pUnk) != S_OK)</pre><pre class="prog_in_0">        return;</pre><pre class="prog_in_0"></pre><pre class="prog_in_0">    hr = pUnk-&gt;QueryInterface(IID_IDispatch, (LPVOID*) &amp;pAcadDisp);</pre><pre class="prog_in_0">    pUnk-&gt;Release();</pre><pre class="prog_in_0">    if (FAILED(hr))</pre><pre class="prog_in_0">        return;</pre><pre class="prog_in_0"></pre><pre class="prog_in_0">    hr = pAcadDisp-&gt;QueryInterface(AutoCAD::IID_IAcadApplication,             (void**)&amp;pAcad);</pre><pre class="prog_in_0">    pAcadDisp-&gt;Release();</pre><pre class="prog_in_0">    if (FAILED(hr))</pre><pre class="prog_in_0">        return;</pre><pre class="prog_in_0"></pre><pre class="prog_in_0">    pAcad-&gt;put_Visible(true);</pre><pre class="prog_in_0">    pAcad-&gt;get_MenuBar(&amp;pMenuBar);</pre><pre class="prog_in_0">    pAcad-&gt;get_MenuGroups(&amp;pMenuGroups);</pre><pre class="prog_in_0">    pAcad-&gt;Release();</pre><pre class="prog_in_0">    long numberOfMenus;</pre><pre class="prog_in_0">    pMenuBar-&gt;get_Count(&amp;numberOfMenus);</pre><pre class="prog_in_0">    pMenuBar-&gt;Release();</pre><pre class="prog_in_0">    VARIANT index;</pre><pre class="prog_in_0">    VariantInit(&amp;index);</pre><pre class="prog_in_0">    V_VT(&amp;index) = VT_I4;</pre><pre class="prog_in_0">    V_I4(&amp;index) = 0;</pre><pre class="prog_in_0">    pMenuGroups-&gt;Item(index, &amp;pMenuGroup);</pre><pre class="prog_in_0">    pMenuGroups-&gt;Release();</pre><pre class="prog_in_0"></pre><pre class="prog_in_0">    pMenuGroup-&gt;get_Menus(&amp;pPopUpMenus);</pre><pre class="prog_in_0">    pMenuGroup-&gt;Release();</pre><pre class="prog_in_0">    WCHAR wstrMenuName[256];</pre><pre class="prog_in_0">    MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, </pre><pre class="prog_in_0">        "AsdkComAccess", -1, wstrMenuName, 256); </pre><pre class="prog_in_0">    if (!bIsMenuLoaded) {</pre><pre class="prog_in_0">        pPopUpMenus-&gt;Add(wstrMenuName, &amp;pPopUpMenu);</pre><pre class="prog_in_0">        if (pPopUpMenu != NULL) {</pre><pre class="prog_in_0">            pPopUpMenu-&gt;put_Name(wstrMenuName);</pre><pre class="prog_in_0">            WCHAR wstrMenuItemName[256];</pre><pre class="prog_in_0">            MultiByteToWideChar(CP_ACP, 0,"&amp;Add A ComCircle",</pre><pre class="prog_in_0">                -1, wstrMenuItemName, 256); </pre><pre class="prog_in_0">            WCHAR wstrMenuItemMacro[256];</pre><pre class="prog_in_0">            MultiByteToWideChar(CP_ACP, 0, "AsdkComCircle ",</pre><pre class="prog_in_0">                -1, wstrMenuItemMacro, 256); </pre><pre class="prog_in_0">            VariantInit(&amp;index);</pre><pre class="prog_in_0">            V_VT(&amp;index) = VT_I4;</pre><pre class="prog_in_0">            V_I4(&amp;index) = 0;</pre><pre class="prog_in_0">            pPopUpMenu-&gt;AddMenuItem(index, wstrMenuItemName,</pre><pre class="prog_in_0">                wstrMenuItemMacro, &amp;pPopUpMenuItem);</pre><pre class="prog_in_0">            VariantInit(&amp;index);</pre><pre class="prog_in_0">            V_VT(&amp;index) = VT_I4;</pre><pre class="prog_in_0">            V_I4(&amp;index) = 1;</pre><pre class="prog_in_0">            pPopUpMenu-&gt;AddSeparator(index, </pre><pre class="prog_in_0">                &amp;pPopUpMenuItem);</pre><pre class="prog_in_0">            MultiByteToWideChar(CP_ACP, 0,</pre><pre class="prog_in_0">                "Auto&amp;LISP Example", -1, </pre><pre class="prog_in_0">                wstrMenuItemName, 256); </pre><pre class="prog_in_0">            MultiByteToWideChar(CP_ACP, 0,</pre><pre class="prog_in_0">                "(prin1 \"Hello\") ", -1, </pre><pre class="prog_in_0">                wstrMenuItemMacro, 256); </pre><pre class="prog_in_0">            VariantInit(&amp;index);</pre><pre class="prog_in_0">            V_VT(&amp;index) = VT_I4;</pre><pre class="prog_in_0">            V_I4(&amp;index) = 2;</pre><pre class="prog_in_0">            pPopUpMenu-&gt;AddMenuItem(index, wstrMenuItemName,</pre><pre class="prog_in_0">                wstrMenuItemMacro, &amp;pPopUpMenuItem);</pre><pre class="prog_in_0">            VariantInit(&amp;index);</pre><pre class="prog_in_0">            V_VT(&amp;index) = VT_I4;</pre><pre class="prog_in_0">            V_I4(&amp;index) = numberOfMenus - 2;;</pre><pre class="prog_in_0">            pPopUpMenu-&gt;InsertInMenuBar(index);</pre><pre class="prog_in_0">            pPopUpMenu-&gt;Release();</pre><pre class="prog_in_0">            pPopUpMenuItem-&gt;Release();</pre><pre class="prog_in_0">
        </pre><pre class="prog_in_0">            bIsMenuLoaded = true;</pre><pre class="prog_in_0">        } else {</pre><pre class="prog_in_0">            acutPrintf("\nMenu not created.");</pre><pre class="prog_in_0">        }</pre><pre class="prog_in_0">    } else {</pre><pre class="prog_in_0">        VariantInit(&amp;index);</pre><pre class="prog_in_0">        V_VT(&amp;index) = VT_BSTR;</pre><pre class="prog_in_0">        V_BSTR(&amp;index) = wstrMenuName;</pre><pre class="prog_in_0">        pPopUpMenus-&gt;RemoveMenuFromMenuBar(index);</pre><pre class="prog_in_0">        VariantClear(&amp;index);</pre><pre class="prog_in_0">        bIsMenuLoaded = false;</pre><pre class="prog_in_0">    }</pre><pre class="prog_in_0">    pPopUpMenus-&gt;Release();</pre><pre class="prog_in_0">}</pre>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 16:20 , Processed in 0.163352 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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