Использование класса CFileDialog
Переменная m_ofn, содержится в объектах этого класса, представляет собой структуру типа OPENFILENAME,имеющую множество полей. Напр., дескриптор окна, владеющего блоком диалога, указатель на фильтры для выбора имён файлов и т.д.. Перед открытием окна некоторые компоненты этой структуры можно установить и/или изменить. (Самостоятельно посмотреть в справочнике OPENFILENAME, m_ofn)
Первый параметр конструктора объекта класса CFileDialog определяет тип стандартного диалога: “File Open” или “File Save As”. Могут формироваться списки фильтров и т.д.. После создания объекта к нему применяется метод DoModal() и окно диалога появится на экране.
Следующие методы позволяют получить информацию о выбранном имени файла:
GetFileExt(), GetFileName(), GetPathName(), GetFileTitle().
Присутствуют метод, используемые при мультиселекции (выбор нескольких файлов) файлов: GetStartPosition(),GetNextPathName() и т.д..
Имеется и несколько обработчиков сообщений, которые используются для более гибкой подстройки класса CFileDialog под конкретное приложение:
OnShareViolation() – при нарушении прав совместного доступа
OnLBSelChangedNotify() – когда изменился выбор в поле списка и т.д.
CFileDialog fileDlg(TRUE);//создание объекта
CString str("Все файлы (*.*)");//формирование шаблонов имён файлов
str+=(TCHAR)NULL;
str+="*.*";
str+=(TCHAR)NULL;
fileDlg.m_ofn.lpstrFilter = str;//установка фильтра
//указываем список фильтров использующихся при открытии диалога
fileDlg.m_ofn.nFilterIndex = 2;
TChar strName[_MAX_PATH];//буфер для полного имени файла
strName[0] = (TCHAR)NULL;
fileDlg.m_oft.lpstrFile = strName;
fileDlg.m_ofn.lpstrTitle = title;//формируем заголовок диалога
//выводим диалог на экран
if (fileDlg.DoModal() == IDOK)
{
//вывод имени файла в заголовок текущего окна.
CChildWnd *pWnd = (CChildWnd*)GetActiveFrame();
pWnd->SetWindowText(fileDlg.m_ofn.lpstrFile);
...
}
Параметры конструктора CFileDialog
CFileDialog::CFileDialog( BOOLbOpenFileDialog, LPCTSTRlpszDefExt= NULL, LPCTSTRlpszFileName= NULL, DWORDdwFlags= OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTRlpszFilter= NULL, CWnd*pParentWnd= NULL, DWORDdwSize= 0);Параметры:1. TRUE – для диалога “File Open”, FALSE – для “File Save as…”2. расширение файла по умолчанию автоматически присоединяется, если пользователь не указал расширение в поле, где указывается имя файла.3. имя файла по умолчанию, в поле, где указывается имя файла в диалоговом окне.4. флаг, которые позволяют модифицировать диалоговое окно подходящим образом. Описание флагов в структуре OPENFILENAME. (по умолчанию – спрятать флажок ReadOnly, запрашивать подтверждение на перезапись файла)5. файловые фильтры – последовательности строковых пар, которые позволяют отобразить в диалоговом окне только файлы соответствующие фильтрам.6. ссылка на окно родитель (обычно не указывается, или указывается this – т.е. текущее окно из которого вызывается диалоговое окно). Пример с установкой фильтра В примере фрагмент метода, связанного с реализацией диалога выбора файлов для загрузчика. В диалоге может выполняться группа файлов:.......::OnFileLoad() – вызов из меню.CFileDialog fDlg(TRUE,NULL,NULL,OFN_LONGNAMES|OFN_ALLOWMULTISELECT|
OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|
OFN_PATHMUSTEXIST);
fDlg.m_ofn.Flags&=~OFN_EXPLORER;//стиль окна Explorer
fDlg.m_ofn.lpstrTitle = "File(s) to Load";//заголовок
fDlg.m_ofn.lpstrFilter=
"Programs(*.act;*.fst;*.txt)\0*.act;*.fst;*.txt;
\0NotCompiled(*.act;*.txt)\0*.act;*.txt
\0Fast(*.fst)\0*.fst\0\0";
char bufr[BUFR_SIZE] = "";//буфер для имени файла
fDlg.m_ofn.lpstrFile = (LPTSTR)bufr;
fDlg.m_ofn.lpstrDefExt= (LPTSTR)".act";
fDlg.m_ofn.nMaxFile = BUFR_SIZE;
if (fDlg.DoModal() == IDOK)
{
...
}
}
Указывается возможность длинных имён, мультиселекция, что флаг ReadOnly надо прятать, если файл не существует, то выводится предупреждение. Для диалога – стиль Explorer и окно “File Open”.
В DevStudio С++ имеется возможность дополнить стандартные окна диалога собственными элементами управления (кнопками, полями и т.д.) |
Дата добавления: 2016-05-26; просмотров: 2120;