Страница 3 из 7 Диалог открытия файла Чтобы показать пользователю диалоговое окошко выбора файла, сперва необходимо заполнить структуру 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);
|