![]() |
|
|
![]()
|
|
| pablo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 12.2.2005 Где: Вильнюс, Литва Репутация: нет Всего: 6 |
Господа, помогите мне нормально создать фильтр файлов.
Пишу код: CFileDialog dialog(TRUE); dialog.m_ofn.lpstrFilter = "Microsoft Access files (*.mdb)"; Но при открытии окна, ничего не фильтруется. Может кто подскажет как создать фильтр ? Заранее благодарен -------------------- Первый блин всегда похож на сферу, иногда бывает и куб. |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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 |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 7 Всего: 92 |
Или так: dialog.m_ofn.lpstrFilter = "Microsoft Access files(*.mdb)|*.mdb||";
|
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Точно работает так
[code=cpp][/code] CFileDialog * Load; Load = new CFileDialog(true,NULL,NULL, OFN_HIDEREADONLY, "TextFiles(*.txt)|*.txt" ); -------------------- Never again... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Это неправильно, такой формат строки фильтра принят в MFC, а формат API - это как написал En_t_End. Короче, если передаете сроку-фильтр в конструктор CFileDialog, то разделяющим символом должен быть '|', если записываете прямо в структуру OPENFILENAME, то разделяющий символ - 0. -------------------- ... |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 4 Всего: 44 |
вот тебе готовый пример
|
|||
|
||||
| seevkaboorka |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 24.5.2006 Репутация: нет Всего: нет |
такой вопрос: есть 2 строки, как из них сделать правильный фильтр?
и хочется, чтобы стандартными средствами. без использования CString. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Выдели память + strcat
-------------------- ... |
|||
|
||||
| seevkaboorka |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 24.5.2006 Репутация: нет Всего: нет |
а можно попдробнее? что-то все мои попытки сделать strcat не увенчались успехом...
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
А учебник почитать? Все-таки это основы C, их знать надо.
-------------------- ... |
|||
|
||||
| seevkaboorka |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 24.5.2006 Репутация: нет Всего: нет |
дело в том, что strcat убивает '\0' и делает "нормальную" строку с терминатором на конце. а мне нужно, чтобы терминатор был. вот если б учебник мне помог я бы никого не беспокоил.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 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 и макро-имя. -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |