Maximilien Ответов: 1

Есть ли способ, чтобы CFileDialog автоматически менял имя файла при изменении фильтра расширения ?


Если у меня есть CFileDialog с несколькими расширениями файлов (фильтрами), есть ли способ заставить его изменить имя файла изменить его расширение в зависимости от выбранного фильтра ?

если у меня есть (упрощенный) следующий фильтр "*.тхт;*.формате xls;*.формат JPG;*.ЧГК" и в диалоговом окне файл у меня есть имя файла по умолчанию "myfile.txt"; когда я изменить фильтр ".txt" для ".форматы jpg" имя файла не меняется "myfile.jpg".

Это одна из особенностей CFileDialog на Висте ?

Я попытался сделать то же самое (до vista), но новый диалог файла не поддерживает те же функции, что и старый (например, получение элемента управления edit (GetDlgItem(idt1) или SetControlText(edt1, myString) ).

Если я изменю стиль диалогового окна файла на нет vista с флагом bVistaStyle конструктора CFileDialog; тогда он работает так, как ожидалось. но не наоборот.

Я хотел бы сохранить диалоги в стиле vista (также проще быть совместимым с Win7 / 8)

Есть Идеи ?


Спасибо.

1 Ответов

Рейтинг:
1

krmed

Для имени файла по умолчанию не указывайте расширение. Вместо "myfile.txt" просто используйте "myfile". Таким образом (если ваш фильтр настроен правильно) соответствующее расширение будет применено, когда пользователь нажмет OK.

Типичная строка фильтра будет больше похоже на "*.в формате txt\0*.в формате txt\0*.формате xls\0*.формате xls\0*.\файлы jpg 0*.\файлы jpg 0*.НПК\0*.НПК\0\0"

Надеюсь, это поможет.


Maximilien

Нет, если я наберу "toto "(без расширения) в поле Имя файла и нажму OK, имя файла все равно будет" toto"; если я изменю фильтр, то имя файла все равно останется"toto".
Что касается строки фильтра, то именно поэтому я написал "упрощенный"...

Gast128

Он работает @ my PC только в том случае, если lpszDefExt также заполнен правильным расширением.