明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 744|回复: 3

ObjectARX(C++)创建工具栏源码

[复制链接]
发表于 2023-7-17 17:03 | 显示全部楼层 |阅读模式
void createtoolbar(bool bShow = true)
{
    HRESULT hr = NOERROR;
    LPDISPATCH pAcadDisp = acedGetIDispatch(TRUE);
    if (pAcadDisp == NULL)
    {
        ASSERT(0);
        return;
    }
    AutoCAD::IAcadApplication* pAcad = nullptr;
    hr = pAcadDisp->QueryInterface(AutoCAD::IID_IAcadApplication, (void**)&pAcad);
    pAcadDisp->Release();
    if (FAILED(hr))
        return;
    AutoCAD::IAcadMenuGroups* pMenuGroups = nullptr;
    AutoCAD::IAcadMenuGroup* pMenuGroup = nullptr;
    hr = pAcad->get_MenuGroups(&pMenuGroups);
    if (FAILED(hr))
        return;
    VARIANT index;
    VariantInit(&index);
    V_VT(&index) = VT_I4;
    V_I4(&index) = 0;
    hr = pMenuGroups->Item(index, &pMenuGroup);
    if (FAILED(hr))
        return;
    pMenuGroups->Release();

    AutoCAD::IAcadToolbars *pToolBars = NULL;
    hr = pMenuGroup->get_Toolbars(&pToolBars);
    if (FAILED(hr))
        return;
    pMenuGroup->Release();
    long toolbarCnt = 0;
    pToolBars->get_Count(&toolbarCnt);
    AutoCAD::IAcadToolbar *pToolBar = NULL;
    for (int i = 0; i < toolbarCnt; i++)
    {
        VARIANT index;
        VariantInit(&index);
        V_VT(&index) = VT_I4;
        V_I4(&index) = i;
        AutoCAD::IAcadToolbar *pToolBarFind = NULL;
        pToolBars->Item(index, &pToolBarFind);
        BSTR bstrName;
        if (FAILED(pToolBarFind->get_Name(&bstrName)))
        {
            pToolBarFind->Release();
            continue;
        }
        CString strName;
        strName.Format(_T("%s"), bstrName);
        if (strName.CompareNoCase(ToolBarName) == 0)
        {
            pToolBar = pToolBarFind;
            break;
        }
        pToolBarFind->Release();
    }

    if (pToolBar != nullptr)
    {
        pToolBar->put_Visible(bShow ? VARIANT_TRUE : VARIANT_FALSE);
        pToolBar->Release();
        pToolBars->Release();
        return;
    }
    if (bShow == false)
    {
        return; //如果是隐藏,直接返回。
    }

    //添加工具
    pToolBars->Add(ToolBarName, &pToolBar);
    if (pToolBar == NULL)
    {
        pToolBars->Release();
        return;
    }

    AutoCAD::IAcadToolbarItem *pToolBarItem = NULL;

    CString appFileName = acedGetAppName(); //取出完整的应用程序名称,含路径
    TCHAR dir[_MAX_DIR], drive[_MAX_DRIVE], path[_MAX_PATH];
    _tsplitpath(appFileName, drive, dir, NULL, NULL);
    _tmakepath(path, drive, dir, NULL, NULL);
    CString bmpFile;

    long lIndex = 0;
    hr = pToolBar->AddToolbarButton(_variant_t((long)lIndex), L"参数设置", L"设置参数", L"\3\3_Setting\r", _variant_t(FALSE), &pToolBarItem);
    if (FAILED(hr))
        return;
    bmpFile.Format(_T("%s%s"), path, _T("icons\\Settings.bmp"));
    pToolBarItem->SetBitmaps((BSTR)(const TCHAR*)bmpFile, (BSTR)(const TCHAR*)bmpFile);
    pToolBarItem->Release();

    lIndex++;
    hr = pToolBar->AddSeparator(_variant_t((long)lIndex), &pToolBarItem);
    if (FAILED(hr))
        return;
    pToolBarItem->Release();

    pToolBar->Dock(AutoCAD::acToolbarDockLeft);
    pToolBar->Release();

    pToolBars->Release();
}

效果图:

本帖子中包含更多资源

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

x
发表于 2023-7-18 16:13 | 显示全部楼层
虽然看不懂还是顶一个
回复 支持 1 反对 0

使用道具 举报

发表于 2024-3-10 09:34 | 显示全部楼层
看着挺好,但不会用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 06:33 , Processed in 0.229057 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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