Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Gans Гость
|
Добавлено: Пн Сен 29 2003 17:55 Заголовок сообщения: Visual C++ Стандартный файловый диалог |
|
|
Создаю проект MFC. Хчу сделать так, чтобы при выборе в Меню File->Open открывался стандартный файловый диалог, но чтобы там не было All files *.* а были те фильтры, которые бы я сам мог задать. Где эта хрень прячется не могу найти .. Помогите, я уже выбился из сил... Свой диалог не хочется создавать ... хочется использовать уже то, что сделано другими. |
|
Вернуться к началу |
|
|
КСВ
Зарегистрирован: 24.05.2002 Сообщения: 24
|
Добавлено: Чт Окт 02 2003 18:22 Заголовок сообщения: Попробуйте так |
|
|
1) Запустить прогу под дебаггером 2) В ней вызвать диалог (File->Open) 3) в VisulaStudio нажать кнопочку "пауза" (забыл, как правильно называется, но на пиктограммке - значек паузы). 4) Посмотреть стек вызванных функций. Если потоков в проге несколько, то выбрать нужный поток и в нём посмотреть стек вызовов. 5) Найти самую старшую функцию, имеющую отношение к обработке исследуемого сообщения 6) Поставить в ней брейкпойнт 7) Перезапустить прогу и дойти до брейкпойнта. пошаговым проходом (возможно с заходом в другие функции) выяснить, кто и что делает.
Это общий подход в таких случаях.
Теперь конкретно по вашему случаю. MFC (не помню точно, какая именно функция - скорее всего CWinApp::OnFileOpen) при вызове File->Open просматривает зарегистрированные в *App шаблоны документов и формирует фильтр для диалога на их основе - реально просто всё в кучу сваливает. Для каждого шаблона документа информация для фильтра {должна быть} прописана в String Table в строке с идентификатором сответствующего ресурса. Вам по-видимому нужно переопределить либо CWinApp::OnFileOpen либо CDocument::OnFileOpen либо CView::OnFileOpen . |
|
Вернуться к началу |
|
|
Gans Гость
|
Добавлено: Пт Окт 03 2003 17:45 Заголовок сообщения: Re: Попробуйте так |
|
|
Все оказалось намного банальнее ))) Правда не знаю, насколько это красиво, но способ такой : 1. Я залез в ресурс проекта ... String Table 2. там нашел ID_TYPE Эта хренова строка сожержит много всякой хрени о приложении ... в том числе там можно вписать и фильтр диалога.
у меня это выглядит так: \n\n\nDataFile (*.dab;*.dat)\n.dab;.dat;\n.Document\n.Document
Т.е., через разделитель \n вписываются параметры документа. Тупой ручной способ )))
Если кому-то хочется разобраться, то начинать следует с анализа параметров функции GetDocString(…) в MSDN CMultiDocTemplate* pDocTemplate; pDocTemplate->GetDocString(…);
Думаю разобраться можно в этом. Этот способ я где-то подглядел. Не помню где правда. В принципе мне этого было достаточно.
Одно скажу - на решение проблемы потратил кучу времени. Смех в том, что во всех своих книжках по Visual C++ решение своей проблемы не нашел. |
|
Вернуться к началу |
|
|
|