Использование класса 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; просмотров: 2130;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.