Страница 27 из 30
Открытие файла Эта статья описывает типовой код, показывающий диалоговое окно Открыть (Open), в котором пользователь мог бы определить диск, каталог и имя открываемого файла. Типовой код сначала инициализирует структуру OPENFILENAME, а затем вызывает функцию GetOpenFileName, чтобы показать диалоговое окно. В этом примере элемент lpstrFilter указывает на буфер, который устанавливает два фильтра имен файлов, чтобы пользователь мог выбрать ограничения в отображении имен файлов. Буфер содержит массив строк, оканчивающийся двойным нулем, в котором каждая пара строк определяет фильтр. Элемент nFilterIndex устанавливает, какой использовать шаблон первым, когда создается диалоговое окно. Этот пример устанавливает флажки OFN_PATHMUSTEXIST и OFN_FILEMUSTEXIST в элементе Flags. Эти флажки принуждают диалоговое окно проверять, перед возвратом, какой путь и имя файла, установленные пользователем, фактически существуют. Функция GetOpenFileName возвращает значение ИСТИНА (TRUE), если пользователь щелкает мышью по кнопке ОК и устанавливает путь и имя существующего файла. В этом случае, буфер указывает на элемент lpstrFile, который содержит путь и имя файла. Типовой код использует эту информацию при вызове функции CreateFile для открытия файла. Хотя этот пример не устанавливает флажок OFN_EXPLORER, он по умолчанию показывает диалоговое окно Открыть (Open) в стиле Проводника. Однако, если вы хотите установить фильтр - процедуру или пользовательский шаблон и хотите иметь пользовательский интерфейс в стиле Проводника, вы должны установить флажок OFN_EXPLORER. OPENFILENAME ofn;// структура стандартного диалогового окна char szFile[260];// буфер для имени файла HWND hwnd; // окно владельца HANDLE hf; // дескриптор файла
// Инициализация OPENFILENAME ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); 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;
// Покажем диалоговое окно Открыть (Open).
if (GetOpenFileName(&ofn)==TRUE) hf = CreateFile(ofn.lpstrFile, GENERIC_READ, 0, (LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); |