|
[code]目录
一、自动加载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] |
|