Поиск:

Ответ в темуСоздание новой темы Создание опроса
> File Filters 
:(
    Опции темы
pablo
Дата 28.6.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

Репутация: нет
Всего: 6



Господа, помогите мне нормально создать фильтр файлов.

Пишу код:

CFileDialog dialog(TRUE);

dialog.m_ofn.lpstrFilter = "Microsoft Access files (*.mdb)";

Но при открытии окна, ничего не фильтруется.
Может кто подскажет как создать фильтр ?

Заранее благодарен smile



--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
En_t_end
Дата 28.6.2005, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 2
Всего: 20



pablo
dialog.m_ofn.lpstrFilter = "Microsoft Access files(*.mdb)\0*.mdb\0";
Попробуй так

Это сообщение отредактировал(а) En_t_end - 28.6.2005, 13:50
PM MAIL ICQ Skype GTalk Jabber   Вверх
Любитель
Дата 28.6.2005, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 7
Всего: 92



Или так: dialog.m_ofn.lpstrFilter = "Microsoft Access files(*.mdb)|*.mdb||";


--------------------
PM MAIL ICQ Skype   Вверх
Nuzur
Дата 28.6.2005, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: 3
Всего: 5



Точно работает так
[code=cpp][/code]
CFileDialog * Load;

Load = new CFileDialog(true,NULL,NULL,
OFN_HIDEREADONLY,
"TextFiles(*.txt)|*.txt"
);


--------------------
Never again...
PM MAIL   Вверх
Earnest
Дата 29.6.2005, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата
Или так: dialog.m_ofn.lpstrFilter = "Microsoft Access files(*.mdb)|*.mdb||";

Это неправильно, такой формат строки фильтра принят в MFC, а формат API - это как написал En_t_End.
Короче, если передаете сроку-фильтр в конструктор CFileDialog, то разделяющим символом должен быть '|', если записываете прямо в структуру OPENFILENAME, то разделяющий символ - 0.



--------------------
...
PM   Вверх
chaos
Дата 29.6.2005, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 4
Всего: 44



вот тебе готовый пример
Код

{
    TCHAR title[] = "Sample";    

    CFileDialog fileDlg(TRUE);
    
    CString str("All files (*.*)"); str += (TCHAR)NULL;
    str += "*.*"; str += (TCHAR)NULL;

    str += ("All text files (*.txt)"); str += (TCHAR)NULL;
    str+= "*.txt"; str += (TCHAR)NULL;
         
    fileDlg.m_ofn.lpstrFilter = str;
    fileDlg.m_ofn.nFilterIndex = 2;

    TCHAR strName[_MAX_PATH];
    strName[0] = (TCHAR)NULL;
    fileDlg.m_ofn.lpstrFile = strName;

    fileDlg.m_ofn.lpstrTitle = title;

    if (fileDlg.DoModal() == IDOK)
    {
                 //......                 
    }
}

PM WWW   Вверх
seevkaboorka
Дата 26.2.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



такой вопрос: есть 2 строки, как из них сделать правильный фильтр?

Код

TCHAR szFilter1[1001] = {0};
TCHAR szFilter1[1001] = {0};
...
ofn.lpstrFilter = ... // надо как-то szFilter1 + \0 + szFilter2 + \0\0


и хочется, чтобы стандартными средствами. без использования CString.
PM MAIL   Вверх
Earnest
Дата 26.2.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Выдели память + strcat


--------------------
...
PM   Вверх
seevkaboorka
Дата 26.2.2008, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



а можно попдробнее? что-то все мои попытки сделать strcat не увенчались успехом...
PM MAIL   Вверх
Earnest
Дата 27.2.2008, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



А учебник почитать? Все-таки это основы C, их знать надо.


--------------------
...
PM   Вверх
seevkaboorka
Дата 27.2.2008, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



дело в том, что strcat убивает '\0' и делает "нормальную" строку с терминатором на конце. а мне нужно, чтобы терминатор был. вот если б учебник мне помог я бы никого не беспокоил. 
PM MAIL   Вверх
Earnest
Дата 28.2.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Понятно. 
Тогда просто определи позицию этого нуля (точнее, за нулем): int pos = str + strlen(str) + 1;
а потом используй strcpy: strcpy (str + pos, str2). Естественно, памяти в str должно быть достаточно.
Соответственно, если нужно дальше добавлять строки, то strlen общей строки делать уже нельзя - остановишься на первом нуле - а нужно инкрементировать: pos += strlen (str2) + 1;

Еще способ: сначала использовать какой-нибудь заменитель вместо 0, например '\n', а потом в конце в едином цикле заменить все \n на 0. Тогда можно использовать strcat.

Еще одно замечание: раз уж ты используешь макро-типы TCHAR, то и функции используй соответствующие (макросы, раскрываемые в зависимости от определения UNICODE) - n/e/ _tcscat и т.д. Чтобы узнать их имена, просто набери в MSDN имя стандартной функции (strcpy, например), и тебе покажут все имена для ASCII, mulibyte, unicode и макро-имя.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.