CDialog
PS - может какие-то флаги надо ставить??
Спасибо.
Никто не знает как сделать выбор не одного, а нескольких файлов в окне диалога открыть. И как запомнить все выбранные файлы.
PS - может какие-то флаги надо ставить??
Спасибо.
Если вы имеете в виду CFileDialog, то при его создании нужно в четвертом параметре добавить флаг OFN_ALLOWMULTISELECT. Тогда можно будет выбрать несколько файлов. Получить их имена можно примерно так:
CFileDialog FileDialog(true, NULL, "*.*", OFN_ALLOWMULTISELECT|OFN_EXPLORER);
// Если был сделан выбор
if (FileDialog.DoModal()==IDOK)
{
// получаем ссылку на имя первого файла
POSITION pos = FileDialog.GetStartPosition();
// Пока эта ссылка не NULL
while (pos)
{
// получаем ПОЛНОЕ имя очередного файла
CString Name = FileDialog.GetNextPathName(pos);
// и делаем с ним все что нужно
...
}
}
Метод GetNextPathName возвращает имя файла с полным путем и переставляет ссылку на следующий файл или присваивает ей NULL, если больше файлов нет.
Имена всех выбранных файлов помещаются в буфер по адресу CFileDialog.m_ofn.lpstrFile, так что можно обращаться и напрямую к нему. В начале буфера расположено имя папки, в которой выбирались файлы(с полным путем), затем символ-разделитель, имя первого выбранного файла, символ-разделитель, имя второго файла ... имя последнего файла, два символа-разделителя.
В качестве символа-разделителя используется либо пробел (если диалог в старом стиле), либо нуль-байт (если диалог - в стиле Explorer, это задается добавлением флага OFN_EXPLORER). Если был выбран только один файл, то в буфере будет просто имя файла с полным путем (без разделителя).
Буфер должен быть достаточно большим, чтобы в него поместились все имена. Его размер содержится в переменной CFileDialog.m_ofn.nMaxFile (по умолчанию - 256 байт).
Никто не знает как сделать выбор не одного, а нескольких файлов в окне диалога открыть. И как запомнить все выбранные файлы.
PS - может какие-то флаги надо ставить??
Спасибо.
Зайди сюда :
http://www.firststeps.ru/mfc/steps/r.php?15
Тема очень не плохо изложена.
Зайди сюда :
http://www.firststeps.ru/mfc/steps/r.php?15
Тема очень не плохо изложена.
А еще можно посмотреть r.php?139 и r.php?140 по тому же адресу.
А еще можно посмотреть r.php?139 и r.php?140 по тому же адресу.
Огромное спасибо всем!!!!!
А еще можно посмотреть r.php?139 и r.php?140 по тому же адресу.
Товарищи посмотрите пожалуйста проект. С множественным выбором файлов теперь все в порядке. Может посоветуете как-то улучшить работу прогресс-бара.
Товарищи посмотрите пожалуйста проект. С множественным выбором файлов теперь все в порядке. Может посоветуете как-то улучшить работу прогресс-бара.
У вас в CDom2Dlg::OnFind объявлены две переменных i: одна в команде for, а другая - внутри цикла. При этом m_progress.SetPos(i) использует вторую из них (номер строки), хотя по логике программы должен использовать первую (номер файла), поэтому прогресс-бар отображает не то, что нужно. Так что переименуйте одну из переменных, и все будет хорошо.
Кстати, о выборе файлов. Если общая длина имен выбранных файлов превысит 256 байт, то они не поместятся в буфер (я об этом упоминал и на firststeps.ru об этом тоже говорится). Рекомендую добавить в CDom2Dlg::OnOpen перед вызовом fd.DoModal следующий код:
fd.m_ofn.lpstrFile = new char[fd.m_ofn.nMaxFile];
fd.m_ofn.lpstrFile[0] = NULL;
и тогда 64 килобайт хватит практически на любое число файлов. Только не забудьте потом сделать delete [] fd.m_ofn.lpstrFile.
fd.m_ofn.lpstrFile = new char[fd.m_ofn.nMaxFile];
fd.m_ofn.lpstrFile[0] = NULL;
и тогда 64 килобайт хватит практически на любое число файлов. Только не забудьте потом сделать delete [] fd.m_ofn.lpstrFile.
Спасибо большое. Про переменные - просто не заметил. Всех с праздником.
Христос воскрес!!