ADN Open CIS
Сообщество программистов Autodesk в СНГ

13/02/2016

Программное создание диалога "Сохрани как..."

Эта статья появилась как результат запроса от пользователя. Здесь я покажу простую реализацию диалога для сохранения файла.

Хотя у нас есть функция acedGetNavDialog, но у неё нет возможности управлять списком форматов чертежей.

Код - C++: [Выделить]
  1. void SaveDialog()
  2. {
  3.   acutPrintf(L"Тест\n");
  4.  
  5.   AcApDocument *pDoc = acDocManager->mdiActiveDocument();
  6.  
  7.   acDocManager->lockDocument(pDoc);
  8.  
  9.   AcDbDatabase *pDB = pDoc->database();
  10.   AcDbBlockTable *pBT = NULL;
  11.   ErrorStatus es = pDB->getBlockTable(pBT,AcDb::kForRead);
  12.   AcDbBlockTableRecord *pBTR =NULL;
  13.  
  14.   pBT->getAt(ACDB_MODEL_SPACE,pBTR,AcDb::kForWrite);
  15.  
  16.   ::AcDbLine *pLine = new AcDbLine(AcGePoint3d(0,0,0), AcGePoint3d(10,10,0));
  17.   pBTR->appendAcDbEntity(pLine);
  18.   pLine->close();
  19.  
  20.   pBT->close();
  21.   pBTR->close();
  22.  
  23.   acDocManager->unlockDocument(pDoc);
  24.   // Создаём диалог сохранения
  25.   CFileDialog fileDlg(FALSE, NULL,NULL,
  26.     OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |OFN_EXTENSIONDIFFERENT, NULL);
  27.   DWORD dwSelItem;
  28.   /* Устанавливаем индекс для выбора – это поможет нам получить выбор пользователя */
  29.   fileDlg.m_pOFN->nFilterIndex = 1;
  30.   /* Буфер содержит пары заканчивающихся нулям строк фильтра.
  31.   Последняя строка должна заканчиваться двумя нулями. */
  32.   fileDlg.m_pOFN->lpstrFilter = L"Чертеж AutoCAD 2013 (*.dwg)\0*.DWG\0
  33.     Чертеж AutoCAD 2012 (*.dwg)\0*.DWG\0
  34.     Чертеж AutoCAD 2010 (*.dwg)\0*.DWG\0
  35.     Чертеж AutoCAD 2008 (*.dwg)\0*.DWG\0
  36.     Чертеж AutoCAD 2007 (*.dwg)\0*.DWG\0
  37.     AutoCAD 2007 DXF(*.dxf)\0*.DXF\0\0";
  38.  
  39.     // Показываем диалог выбора. Если пользователь нажмёт «Да» («OK»), то
  40.     // fileDlg.DoModal() вернёт IDOK.
  41.     if(fileDlg.DoModal() == IDOK)
  42.     {
  43.  
  44.       CString pathName = fileDlg.GetPathName();
  45.       /* Выбор пользователя */
  46.       dwSelItem = fileDlg.m_pOFN->nFilterIndex;
  47.  
  48.       switch(dwSelItem)
  49.       {
  50.       case 1:
  51.         acutPrintf(L"Выбран чертеж AutoCAD 2013 (*.dwg)");
  52.         /* Здесь наша собственная логика сохранения */
  53.         break;
  54.       case 2:
  55.         acutPrintf(L"Выбран чертеж AutoCAD 2012 (*.dwg)");
  56.         break;
  57.       case 3:
  58.         acutPrintf(L"Выбран чертеж AutoCAD 2010 (*.dwg)");
  59.         break;
  60.       case 4:
  61.         acutPrintf(L"Выбран чертеж AutoCAD 2008 (*.dwg)");
  62.         break;
  63.       case 5:
  64.         acutPrintf(L"Выбран чертеж AutoCAD 2007 (*.dwg)");
  65.         break;
  66.       case 6:
  67.         acutPrintf(L"Выбран AutoCAD 2007 DXF(*.dxf) ");
  68.         break;
  69.       default:
  70.         acutPrintf(L"Ничего не выбрано");
  71.         break;
  72.       }
  73.  
  74.       acutPrintf(L"\nВыбрали файл: %s\n", pathName);
  75.       pDoc->database()->saveAs(pathName, true);
  76.     }
  77.  
  78.     acedPostCommandPrompt();
  79.  
  80. }

 

Источник: http://adndevblog.typepad.com/autocad/2015/11/programmatically-creating-saveas-dialog.html

Автор перевода: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=4261

Опубликовано 13.02.2016
Отредактировано 14.02.2016 в 18:18:55