admin 发表于 2024-3-18 19:25:29

objectArx ---基础操作

目录
一、自动加载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;
// 返回结果类型码: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;
        // 最多存储文件个数
        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;   
        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无效的目录,请重新选择"));
}


页: [1]
查看完整版本: objectArx ---基础操作