天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 63|回复: 0

objectArx ---基础操作

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
目录
一、自动加载Base.arx
二、文件选择
2.1 CAD风格
2.2 windows原生风格
2.2.1 单选
2.2.2 多选
2.2.3 只选文件夹
一、自动加载Base.arx
功能:测试时不用频繁的打开关闭cad 去 加载 卸载 Base.arx

模板:以第(三)篇文件结构为基础

Commands.h

#include "StdAfx.h"

void AddCommands();
void lapp();
void uapp();


Commands.cpp

#include "StdAfx.h"
#include "Commands.h"
#include "Editor.h"
#include "acedCmdNF.h"

void AddCommands()
{        // 加载arx
        Editor::AddCommand(L"lapp", ACRX_CMD_MODAL, lapp);
        // 卸载arx
        Editor::AddCommand(L"uapp", ACRX_CMD_MODAL, uapp);
}


void lapp() {
        // 加载arx,acedCommandS模拟人工输入,注意添加头文件,注意加载文件位置
        if(acedCommandS(RTSTR, _T("arx"),
                                        RTSTR, _T("l"),
                                        RTSTR, _T("D:\\CPP\\Base\\x64\\Debug\\Base.arx"),
                                        RTNONE)
                                        ==RTNORM)
                        acutPrintf(_T("\n加载成功"));
}

void uapp() {
        if (acedCommandS(RTSTR, _T("arx"),
                                        RTSTR, _T("u"),
                                        RTSTR, _T("D:\\CPP\\Base\\x64\\Debug\\Base.arx"),
                                        RTNONE)
                                        == RTNORM)
                acutPrintf(_T("\n卸载成功"));
}

注意:

组名:修改Editor.cpp和acrxEntryPoint.cpp中的命令组名(去看代码),不可与Base.arx相同
保存位置:生成后改名为luapp.arx,文件单独保存
二、文件选择
2.1 CAD风格
打开文件对话框

// 创建文件的结果缓冲区节点
resbuf *fileName = NULL;

// 函数:对话框标题、默认路径、默认后缀名、默认名字、标识符(0打开)、文件的结果缓冲区节点
if (acedGetFileNavDialog(_T("文件选择"),
                                                 NULL,
                                                 _T("arx;dwg"),
                                                 _T("test"),
                                                 0,
                                                 &fileName) == RTNORM)
{
        if (acedArxLoad(fileName->resval.rstring) != RTNORM)
        {
                acutPrintf(_T("\n无法加载应用程序%s"), fileName->resval.rstring);
        }
        else
                acutPrintf(_T("\n加载%s应用程序成功!"), fileName->resval.rstring);
}

acutRelRb(fileName);


效果


查找文件绝对路径

ACHAR *fileName = _T("123.dwg");
// 接收返回值:
ACHAR fullPath[128];
// 返回结果类型码:RTNORM 或 RTERROR
acedFindFile(fileName, fullPath, 128);

查找范围:当前文件所在文件夹、acad.exe所在文件夹、CAD环境变量内的路径



2.2 windows原生风格
2.2.1 单选
代码
void singleSel()
{
        // 构造函数:true为打开,false为存储,也可CFileDialog dlg(true);
        CFileDialog dlg(true, NULL, NULL, NULL, _T("全部文件|*.*|dwg文件| *.dwg||"));

        // 设置初始目录
        CString path("C:\\Users\\Administrator\\Desktop");
        dlg.m_ofn.lpstrInitialDir = path;
        dlg.m_ofn.lpstrTitle =_T("此处为对话框标题");

        if (dlg.DoModal() == IDOK)
        {        // 返回 C:\Users\Administrator\Desktop\123.dwg
                acutPrintf(L"\n%s", dlg.GetPathName());
                // 返回 123.dwg
                acutPrintf(L"\n%s", dlg.GetFileName());
                // 返回 123
                acutPrintf(L"\n%s", dlg.GetFileTitle());
                // 返回 dwg
                acutPrintf(L"\n%s", dlg.GetFileExt());
        }
}

效果

2.2.2 多选
代码示例
void MultiSel()
{
        // TODO: 在此添加控件通知处理程序代码
        // 构造函数:第四个参数为允许多选,不包括文件夹
        CFileDialog dlg(true, NULL, NULL, OFN_ALLOWMULTISELECT);
        // 调整缓冲区大小:存储选择到的文件路径
        dlg.m_ofn.lpstrFile = new TCHAR[1024];
        // 最多存储文件个数
        dlg.m_ofn.nMaxFile = 1024;

        // 循环获取文件名
        CString pathName;
        if (dlg.DoModal() == IDOK)
        {
                POSITION mpos = dlg.GetStartPosition();
                while (mpos != NULL)
                {
                        pathName = dlg.GetNextPathName(mpos);
                        acutPrintf(_T("\n文件名为:%s"), pathName);
                }
               
        }
        // new与delete对应
        delete[] dlg.m_ofn.lpstrFile;
}


效果(不含筛选器)

2.2.3 只选文件夹
代码示例
void folderSel()
{        //存放选择的目录路径
        ACHAR szPath[MAX_PATH];     
        CString str;

        ZeroMemory(szPath, sizeof(szPath));
        // bi为结构体
        BROWSEINFO bi;
        bi.hwndOwner = m_hWnd;
        bi.pidlRoot = NULL;
        bi.pszDisplayName = szPath;
        bi.lpszTitle = _T("请选择目录:");
        bi.ulFlags = 0;
        bi.lpfn = NULL;
        bi.lParam = 0;
        bi.iImage = 0;
        //弹出选择目录对话框
        LPITEMIDLIST lp = SHBrowseForFolder(&bi);
        // 选择成功
        if (lp && SHGetPathFromIDList(lp, szPath))
                AfxMessageBox(szPath);
        // 选择失败
        else
                AfxMessageBox(_T("\n无效的目录,请重新选择"));
}
[code]————————————————
版权声明:本文为CSDN博主「chuck-Gemini」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chucksun0426/article/details/118305685[/code]

 

 

 

 

objectArx ---基础操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:41 , Processed in 0.116384 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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