Использование стандартных диалогов
Страница 3. Диалог открытия файла


 

Диалог открытия файла

 

Чтобы показать пользователю диалоговое окошко выбора файла, сперва необходимо заполнить структуру OPENFILENAME, а затем вызвать функцию GetOpenFileName.

В данном примере, переменная lpstrFilter указывает на буфер, который содержит два фильтра имён файлов, которые пользователь может использовать, чтобы ограничить количество файлов, показанных в диалоге. Буфер оканчивается двумя нулями и содержит массив строк, при этом на каждый фильтр отводится пара строк. Переменная nFilterIndex содержит номер фильтра, который будет использован при создании диалога.

В переменной Flags устанавливаются два флага OFN_PATHMUSTEXIST и OFN_FILEMUSTEXIST. Эти два флага заставляют диалоговое окно проверить на существование пути и имени файла, перед тем как он вернёт управление.

В случае успешного выбора файла, функция GetOpenFileName должна вернёть TRUE. В этом случае, буфер, на который указывает переменная lpstrFile, будет содержать путь и имя файла. Далее эту информацию можно использовать для открытия файла.

Пример:

OPENFILENAME ofn; // структура диалога открытия файла
char szFile[260]; // буфер для имени файла
HWND hwnd; // окно - владелец
HANDLE hf; // дескриптор файла

// Заполняем OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// Показываем диалог открытия файла.

if (GetOpenFileName(&ofn)==TRUE)
hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);

 

 
« Предыдущая статья   Следующая статья »