Подготавливаем структуру для выбора исходного
char szFilter[256] =
"Text Files\0*.txt\0Any Files\0*.*\0";
char szDlgTitle[] = "Select source file";
char szDlgTitleSave[] = "Select destination file";
// Подготавливаем структуру для выбора исходного файла
memset(&ofn, 0, sizeof(OPENFILENAME));
GetCurrentDirectory(sizeof(szDirName), szDirName);
szFile[0] = '\0';
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = szFilter;
ofn.lpstrInitialDir = szDirName;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFileTitle = szFileTitle;
ofn.nMaxFileTitle = sizeof(szFileTitle);
ofn.lpstrTitle = szDlgTitle;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST
| OFN_HIDEREADONLY;
// Выводим на экран диалоговую панель, предназначенную
// для выбора исходного файла
if(GetOpenFileName(&ofn))
{
// Если файл выбран, открываем его
if (*ofn.lpstrFile)
{
#if FILEOP == SYNCHRONOUS_IO
// В синхронном режиме указываем флаг
// FILE_FLAG_SEQUENTIAL_SCAN
hSrcFile = CreateFile(ofn.lpstrFile, GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN, NULL);
#elif FILEOP == ASYNCHRONOUS_IO
// В асинхронном режиме необходимо указывать
// флаг FILE_FLAG_OVERLAPPED
hSrcFile = CreateFile(ofn.lpstrFile, GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, NULL);
#elif FILEOP == MEMORYMAPPED_IO
// В режиме отображения на память мы не используем
// дополнительные флаги, однако указываем, что
// файл будет открываться не только для чтения,
// но и для записи
hSrcFile = CreateFile(ofn.lpstrFile,
GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
#endif
Содержание Назад Вперед