13/02/2016
Программное создание диалога "Сохрани как..."
Эта статья появилась как результат запроса от пользователя. Здесь я покажу простую реализацию диалога для сохранения файла.
Хотя у нас есть функция acedGetNavDialog, но у неё нет возможности управлять списком форматов чертежей.
Код - C++: [Выделить]
- void SaveDialog()
- {
- acutPrintf(L"Тест\n");
- AcApDocument *pDoc = acDocManager->mdiActiveDocument();
- acDocManager->lockDocument(pDoc);
- AcDbDatabase *pDB = pDoc->database();
- AcDbBlockTable *pBT = NULL;
- ErrorStatus es = pDB->getBlockTable(pBT,AcDb::kForRead);
- AcDbBlockTableRecord *pBTR =NULL;
- pBT->getAt(ACDB_MODEL_SPACE,pBTR,AcDb::kForWrite);
- ::AcDbLine *pLine = new AcDbLine(AcGePoint3d(0,0,0), AcGePoint3d(10,10,0));
- pBTR->appendAcDbEntity(pLine);
- pLine->close();
- pBT->close();
- pBTR->close();
- acDocManager->unlockDocument(pDoc);
- // Создаём диалог сохранения
- CFileDialog fileDlg(FALSE, NULL,NULL,
- OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |OFN_EXTENSIONDIFFERENT, NULL);
- DWORD dwSelItem;
- /* Устанавливаем индекс для выбора – это поможет нам получить выбор пользователя */
- fileDlg.m_pOFN->nFilterIndex = 1;
- /* Буфер содержит пары заканчивающихся нулям строк фильтра.
- Последняя строка должна заканчиваться двумя нулями. */
- fileDlg.m_pOFN->lpstrFilter = L"Чертеж AutoCAD 2013 (*.dwg)\0*.DWG\0
- Чертеж AutoCAD 2012 (*.dwg)\0*.DWG\0
- Чертеж AutoCAD 2010 (*.dwg)\0*.DWG\0
- Чертеж AutoCAD 2008 (*.dwg)\0*.DWG\0
- Чертеж AutoCAD 2007 (*.dwg)\0*.DWG\0
- AutoCAD 2007 DXF(*.dxf)\0*.DXF\0\0";
- // Показываем диалог выбора. Если пользователь нажмёт «Да» («OK»), то
- // fileDlg.DoModal() вернёт IDOK.
- if(fileDlg.DoModal() == IDOK)
- {
- CString pathName = fileDlg.GetPathName();
- /* Выбор пользователя */
- dwSelItem = fileDlg.m_pOFN->nFilterIndex;
- switch(dwSelItem)
- {
- case 1:
- acutPrintf(L"Выбран чертеж AutoCAD 2013 (*.dwg)");
- /* Здесь наша собственная логика сохранения */
- break;
- case 2:
- acutPrintf(L"Выбран чертеж AutoCAD 2012 (*.dwg)");
- break;
- case 3:
- acutPrintf(L"Выбран чертеж AutoCAD 2010 (*.dwg)");
- break;
- case 4:
- acutPrintf(L"Выбран чертеж AutoCAD 2008 (*.dwg)");
- break;
- case 5:
- acutPrintf(L"Выбран чертеж AutoCAD 2007 (*.dwg)");
- break;
- case 6:
- acutPrintf(L"Выбран AutoCAD 2007 DXF(*.dxf) ");
- break;
- default:
- acutPrintf(L"Ничего не выбрано");
- break;
- }
- acutPrintf(L"\nВыбрали файл: %s\n", pathName);
- pDoc->database()->saveAs(pathName, true);
- }
- acedPostCommandPrompt();
- }
Источник: http://adndevblog.typepad.com/autocad/2015/11/programmatically-creating-saveas-dialog.html
Автор перевода: Александр Ривилис
Отредактировано 14.02.2016 в 17:18:55
Обсуждение: http://adn-cis.org/forum/index.php?topic=4261
Опубликовано 13.02.2016Отредактировано 14.02.2016 в 17:18:55