Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > таб контрол "внутри" таб контрола |
Автор: 0x07L 26.11.2006, 20:19 | ||
Есть диалог, в диалоге - два таб контрола и кнопка. Кнопка и один из таб контролов помещены на другой таб контрол. Проблема в том, что внутренний таб контрол не отображается. Замечу, внутренний таб контрол и кнопка не перекрываются. Содержимое файла ресурсов
При запуске программы кнопка и внутренний таб контрол оказываются ПОД внешним таб контролом, что однако не мешает отображаться кнопке. Как сделать, чтобы отображался и внутренний таб контрол? Если поменять порядок контролов в файле ресурсов, поместив внутренний таб перед внешним, то он будет отображаться, но мы будем иметь кривой таб ордер. Мне бы хотелось, чтобы было [внешний таб] --> [внутренний таб] --> [кнопка]. В последнем же случае внутренний таб будет идти перед внешним. Делать внутренний таб потомком внешнего тоже не хотелось бы, поскольку во внутреннем табе будут размещены контролы, а WM_NOTIFY и прочая таб-родитель моему диалогу пересылать не будет (проверено). Между тем "архитектура приложения" ( ![]() Итак, как добиться отображения таб контрола, сохранив при этом таб ордер, который я хочу? Возможно ли это? Если нет, может стоит забить на таб ордер? Варианты кодирования собственного таб ордера с помощью хуков на нажатие клавиши Tab просьба не предлагать. Муторно это и программа того не стОит |
Автор: Earnest 27.11.2006, 16:42 |
Может, транспарент поможет? Кнопка-то небось стиль defaultButton получает (если она пока одна), вот и рисуется поверх еще раз. Но вообще как-то криво. Я бы все же сделала внутренний таб и кнопку дитем внешнего, а сообщения просто транслировала. Всего то OnCommand и OnNotify переопределить. Или забить на Таб-ордер - вообще сделай внешний таб не таб-стоп - какой смысл? Кстати, контролы чьи дети будут? Если хочешь сделать что-то типа расширенного блокнота, то удобнее контролы распихивать по отдельным окнам (ресурсам). И зачем тебе понадобился таб в табе? По-моему, не очень это красиво будет смотреться. |
Автор: Earnest 28.11.2006, 08:37 | ||
Просто проклянешь все на свете. Думай заранее о технологичности поддержки. Я такое однажды имела, правда не в С++, но сути это не меняло... Получила в наследство. Сначала маялась, потом нафиг переделала, хоть пришлось попотеть... Но зато наступило щастье... Ты когда-нибудь такое видел - таб в табе? И не стоит думать, что твоя задача супер-уникальная. Что за задача-то? Альтернатива всегда есть... Внешний таб можно заменить, скажем, деревом... с любым уровнем вложения... Ведь подумай, все закладки видны всегда, и, значит, здорово загромождают интерфейс... А нафига? Пользователь-то за один раз работает с одной страницей. Кстати, если хочешь, чтобы контролы были детьми диалога, совсем не обязательно их сразу в диалог пихать. Все равно проще создать отдельные ресурсы, а потом, подгрузив ресурс, скопировать из него контролы в диалог. Код, конечно, придется пописать, но это один раз... Хотя дочерние вложенные диалоги у меня всегда нормально (в смысле таб-ордера) себя вели... |
Автор: 0x07L 28.11.2006, 09:58 |
Делаем на занятиях программу для работы с изображениями: для наложения фильтров, подавления шума и пр. Во внешнем табе будут вкладки "Наложение фильтров", "Подавление шума" и т.д., во внутреннем табе - либо вкладки с названиями фильтров, либо со способами подавления. Табы я выбрал потому что 1) Сразу видна вся функциональность 2) Они не занимают много места, что важно, ведь мне и изображения (две штуки - исходное и результат) нужно куда-то засунуть, и гистограммы должны быть постоянно видны Рассматривал также вариант, когда маленькие диаложики с фильтром или подавителем шума появляются по нажатию соответствующих пунктов меню, но это мне не понравилось по пункту 1 Что же касается варинта с деревом, то он, пожалуй, больше места на диалоге будет требовать, хотя ненамного. Так что, если с таб ордером ничего не выйдет, буду использовать такой способ |
Автор: Earnest 28.11.2006, 10:19 |
Если вариантов немного, и вложенность только двухуровневая, используй комбобокс вместо внешнего таба. Гораздо проще, чем дерево, и места почти не занимает. Кроме всего прочего, интерфейс должен быть стандартным, тем более, если это учебная задача. |
Автор: 0x07L 28.11.2006, 10:29 |
Да, это хорошее решение. Спасибо большое! |