| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Переключение видов в сплиттере |
| Автор: voov 23.7.2008, 14:39 | ||||||||
MDI приложение, сплиттер. Правый вид переключается между следующими видами
Само переключение делаю так
Запускаю приложение и переключаюсь туда-сюда. Несколько переключений происходит нормально. На n-ом переключении вылетает на асерте в одном из этих видов
при этом в аутпуте пишутся такие варнинги
В чем может быть дело? |
| Автор: voov 23.7.2008, 16:30 |
| заметил, что переключаться можно сколь угодно долго, если вид не делать активным. Если клацнуть по виду (сделать его активным), то следующее переключение выбрасывает ассерт. видимо, чтото неправильно сделал или чегото недоделал в переключении... |
| Автор: Earnest 24.7.2008, 07:35 |
| А зачем ты их удаляешь-то? Создай один раз и просто показывай\прячь... Ну, понятно, что объекты самому как-то менеджить придется, но не велика беда - посмотри в код сплиттера, там не так много, разберешься. Определи свой класс-наследник. |
| Автор: voov 24.7.2008, 10:05 |
| А стандартным классом никак нельзя обойтись? Может подругому создавать нужно? |
| Автор: voov 24.7.2008, 10:43 |
| хорошо. буду наследоваться от сплиттера. в каком направлении двигаться? насоздавать объектов видов нужных классов, прятать и показывать их не проблема. мне непонятно как прицепить все эти виды в нужную ячейку сплиттера (стандартный сплиттер не дает прицепить больше 1го вида) может туда фрейм вставить, а в фрейм все виды? |
| Автор: Earnest 25.7.2008, 10:25 |
| Конечно, придется поизвращаться. Там вся фишка в том, что виды в сплиттере - это просто его чайлды, а доступается он к ним по их ид-ру, который получается из row\col. Т.е., чтобы создать еще один вид, нужно у старого поменять ид-р - на любой другой. Но это жуть как криво. Лучше действительно создать промежуточное окно (только не фрейм, просто наследник CWnd), и создать там все эти виды. Это окно будет нормальной панелью сплиттера, а переключение видов нужно повесить на него. Представь, что в панели сплиттера у тебя tab-control. Кстати, может действительно tab сделать? Или тебе принципиально, что юзер сам не мог переключить вид, а они показывалиь автоматом? |
| Автор: voov 25.7.2008, 16:50 | ||||||||
Была сразу мысль переопределить метод получения ид из row\col, токо ж он не виртуальный Ну вобщем сделал. Сплиттер не переопределял. Унаследовался от окна, засунул туда виды. И показываю нужный. Вот код кому интересно.
Создаю в фрейме так
|