int S3FExportController::DoExport(void)
{
//этот класс необходим чтобы изменять дефаултное расширение в зависимости от выбранного фильтра
    class CFileDialogEx : public CFileDialog
    {
    public:
        CFileDialogEx() : CFileDialog(FALSE,_T("s3f"), NULL, NULL,
                                          _T("SECU-3 Format Files (*.s3f)|*.s3f|All Files (*.*)|*.*||"), NULL) {};
        virtual ~CFileDialogEx() {};

    protected:
        virtual void OnTypeChange( )
        {
            if (m_ofn.nFilterIndex==1)
                m_ofn.lpstrDefExt = _T("s3f");
        }
    };

    CFileDialogEx save;
    if (save.DoModal()==IDOK)
    {
        //сохраняет имя файла выбранного пользователем для сохранения
        m_s3f_file_name = _TSTRING(save.GetFileName());

        int id = mp_view->DoModal();
        if (id == IDOK)
        {
            bool result = mp_s3f_io->Save(_TSTRING(save.GetPathName()));
            if (!result)
            {
                AfxMessageBox(MLL::LoadString(IDS_CANT_SAVE_THIS_FILE),MB_OK|MB_ICONWARNING);
                return IDCANCEL;
            }
        }
        return id;
    }
    else
        return IDCANCEL; //canceled by user
}
int MPSZExportController::DoExport(void)
{
 //этот класс необходим чтобы изменять дефаултное расширение в зависимости от выбранного фильтра
 class CFileDialogEx : public CFileDialog
 {
  public:
   CFileDialogEx() : CFileDialog(FALSE,_T("mpx"), NULL, NULL,
     _T("MPSZ Files (*.mpx)|*.mpx|MPSZ-II Files (*.mpx)|*.mpx|MPSZ Files (*.mpz)|*.mpz|All Files (*.*)|*.*||"), NULL) {};
   virtual ~CFileDialogEx() {};

  protected:
   virtual void OnTypeChange( )
   {
    if (m_ofn.nFilterIndex==1)
     m_ofn.lpstrDefExt = _T("mpx");
    if (m_ofn.nFilterIndex==2)
     m_ofn.lpstrDefExt = _T("mpx");
    if (m_ofn.nFilterIndex==3)
     m_ofn.lpstrDefExt = _T("mpz");
   }
 };

 CFileDialogEx save;
 if (save.DoModal()==IDOK)
 {
  MPSZFileDataIO::EFileTypes type;
  if (save.GetOFN().nFilterIndex == 1) //mpx
  {
   type = MPSZFileDataIO::FILE_TYPE_MPX;
   mp_mpsz_io->SetActualSetsNumber(MPSZ_NUMBER_OF_MAPS);
  }
  if (save.GetOFN().nFilterIndex == 2)  //mpx MPSZ II
  {
   type = MPSZFileDataIO::FILE_TYPE_MPXv2;
   mp_mpsz_io->SetActualSetsNumber(MPSZ_NUMBER_OF_MAPS);
  }
  else if (save.GetOFN().nFilterIndex == 3) //mpz
  {
   type = MPSZFileDataIO::FILE_TYPE_MPZ;
   mp_mpsz_io->SetActualSetsNumber(MPSZ_NUMBER_OF_MAPS_IN_MPZ_FILE);
  }
  else
  {
   type = MPSZFileDataIO::FILE_TYPE_MPX; //если у файла нет расширения или оно другое то по умолчанию mpx
   mp_mpsz_io->SetActualSetsNumber(MPSZ_NUMBER_OF_MAPS);
  }

  //сохраняет имя файла выбранного пользователем для сохранения
  m_mpsz_file_name = _TSTRING(save.GetFileName());

  int id = mp_view->DoModal();
  if (id == IDOK)
  {
   bool result = mp_mpsz_io->Save(_TSTRING(save.GetPathName()),type);
   if (!result)
   {
    AfxMessageBox(MLL::LoadString(IDS_CANT_SAVE_THIS_FILE),MB_OK|MB_ICONWARNING);
    return IDCANCEL;
   }
  }
  return id;
 }
 else
  return IDCANCEL; //отказ пользователя
}