| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > File Filters |
| Автор: pablo 28.6.2005, 13:40 |
| Господа, помогите мне нормально создать фильтр файлов. Пишу код: CFileDialog dialog(TRUE); dialog.m_ofn.lpstrFilter = "Microsoft Access files (*.mdb)"; Но при открытии окна, ничего не фильтруется. Может кто подскажет как создать фильтр ? Заранее благодарен |
| Автор: En_t_end 28.6.2005, 13:48 |
| pablo dialog.m_ofn.lpstrFilter = "Microsoft Access files(*.mdb)\0*.mdb\0"; Попробуй так |
| Автор: Любитель 28.6.2005, 21:20 |
| Или так: dialog.m_ofn.lpstrFilter = "Microsoft Access files(*.mdb)|*.mdb||"; |
| Автор: Nuzur 28.6.2005, 22:11 |
| Точно работает так [code=cpp][/code] CFileDialog * Load; Load = new CFileDialog(true,NULL,NULL, OFN_HIDEREADONLY, "TextFiles(*.txt)|*.txt" ); |
| Автор: Earnest 29.6.2005, 08:35 | ||
Это неправильно, такой формат строки фильтра принят в MFC, а формат API - это как написал En_t_End. Короче, если передаете сроку-фильтр в конструктор CFileDialog, то разделяющим символом должен быть '|', если записываете прямо в структуру OPENFILENAME, то разделяющий символ - 0. |
| Автор: chaos 29.6.2005, 08:42 | ||
вот тебе готовый пример
|
| Автор: seevkaboorka 26.2.2008, 14:50 | ||
такой вопрос: есть 2 строки, как из них сделать правильный фильтр?
и хочется, чтобы стандартными средствами. без использования CString. |
| Автор: Earnest 26.2.2008, 17:47 |
| Выдели память + strcat |
| Автор: seevkaboorka 26.2.2008, 19:27 |
| а можно попдробнее? что-то все мои попытки сделать strcat не увенчались успехом... |
| Автор: Earnest 27.2.2008, 09:18 |
| А учебник почитать? Все-таки это основы C, их знать надо. |
| Автор: seevkaboorka 27.2.2008, 10:31 |
| дело в том, что strcat убивает '\0' и делает "нормальную" строку с терминатором на конце. а мне нужно, чтобы терминатор был. вот если б учебник мне помог я бы никого не беспокоил. |
| Автор: Earnest 28.2.2008, 19:30 |
| Понятно. Тогда просто определи позицию этого нуля (точнее, за нулем): 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 и макро-имя. |