СообЧа > База Знаний > Программирование > Win32 API

Вопрос

Как выбрать сразу несколько файлов в диалоге открытия GetOpenFileName из «comdlg32.dll» ? Установка .lngFlags = OFN_ALLOWMULTISELECT не помогает. Подскажите пожалуйста, уже выбился из сил и людей подвожу.

Ответ

При открытии нескольких файлов проставь OFN_ALLOWMULTISELECT в Flags Если пользователь выбирает при этом несколько файлов, то в строке lpstrFile будет путь к каталогу, а далее через NULLы будут идти имена выделенных файлов, с дополнительным NULLом в конце. В nFileOffset храниться смещение имени файла, т.е. адрес по которому находится име первого файла. Формируй смещение прибавляя к базовому длинну текущего имени файла и 1 (чтобы перескочить '\0'). Ну и так пока не наткнешься на '\0' (дубль). Если пользователь выбрал один файл, то двойного NULLа в конце не будет. Смещение там не 0 и в lpstrFile сразу до '\0' храниться ПОЛНЫЙ ПУТЬ к файлу (а не к каталогу). Для выявления этого проверь не меньше ли смещение длинны первой части. Если да, то выбран один файл.

Ну и конечно же прмер на перечисление выделенных файлов, ну а там уж делай что хочешь.

void MyOpenFile(HWND hWnd) { OPENFILENAME ofn;
char szBuf[255];
char szFilter[]=TEXT("
Jpeg Files (*.*)\0*.*\0\0");
memset(&ofn, 0, sizeof(OPENFILENAME));
ofn.lStructSize =sizeof(OPENFILENAME);
ofn.hwndOwner =hWnd;
ofn.lpstrFilter =szFilter;
ofn.nFilterIndex =1L;
ofn.lpstrTitle =NULL;
ofn.lpstrFile =szBuf;
ofn.nMaxFile =sizeof(szBuf);
ofn.Flags =OFN_ALLOWMULTISELECT | OFN_EXPLORER;
if (GetOpenFileName(&ofn)) { int nOffset = ofn.nFileOffset;
// Первая часть директорий MessageBox(hWnd, ofn.lpstrFile, "Directory"
, MB_OK);
// Выделено много файлов? if (nOffset >
lstrlen(ofn.lpstrFile))
{
// Составим перечень считанных файлов while(ofn.lpstrFile[nOffset]!='\0')
{ MessageBox(hWnd, ofn.lpstrFile + nOffset, "Files"
, MB_OK);
nOffset +=strlen(ofn.lpstrFile+nOffset) + 1;
}
}
}
}
/*MyOpenFile*/


Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация