PDA

Просмотр полной версии : Изменение представления



Alezis
11.09.2004, 21:19
КАК сделать так что бы при нажатии кнопки в SDI , вместо основного Вью появлялась другое Вью ? т.е. жмём хотя бы даже в меню чего-нить и вместо списка (например) нам появляется что то другое (например) CTreeCtrl &

Romeo
13.09.2004, 14:33
А можно несколько пояснее? Куда жмём и где именно появляется? То ли я тупой, то ли слепой уже, никак не пойму :)

Alezis
20.09.2004, 23:16
А можно несколько пояснее? Куда жмём и где именно появляется? То ли я тупой, то ли слепой уже, никак не пойму :)
Нет тупой скорее я :lol: Ну да ладно. Короче вот есть обычное SDI приложение, которое построено на базе CListView . Вот тама выбираем какой нить пункт лист контрола и кликаем на него мышью. Надо чтоб этот лист контрол убрался к бабушке а вместо него(например) появилася какайнить форма другая , например на основе диалоговых окон.
Вот! Т.е. или это на SDI не сделаешь ни коим образом, или это в CDocument надо 2 представление регистрировать. ,т.е. вообще как поменять вот это представление. Или же вообще как сделать тоже самое но не на SDI ??? Заранее спасибо. :D :lol: :?:

Hup
21.09.2004, 05:25
А разве нет таких свойств. как Visible и Enabled?
Я так понял. что тебе нужно в одном окне просто нужно заранее предопределить контролы, а потом ими умело опериравать через вышеупомянутые свойства(или функции, не помню... же отвык от С++)

Romeo
21.09.2004, 11:47
Alezis, если ты настаиваешь на том что View должен именно подмениться, то, боюсь ничем помочь не могу. Т.е. опыта подобного у меня не было и потому нужно разбирать с нуля, что ставит нас на один уровень, а это неприемлемо (форум ведь сделан для того, чтобы более опытные могли делиться с менее опытными).

Единственный совет касается самой изобретённой идеологии. Если вопрос поставить так: что-то щёлкаем и открывается новое окошко с другим View - то реализавть это будет значительно проще (опять-таки, по крайней мере, я с таким сталкивался), да и логичнее, наверное, будет (уж извини, но никак не могу придумать задачу, для которой требуется именно замена View контрола).

Romeo
21.09.2004, 11:53
А если делать не на SDI, то Hup прав. Расположи на диалоге все необходимые контролы, а потом виртуозно прячь и показывай лишь те, которые требуются по контексту. Либо создавай и разрушай необходимые контролы (CreateWindow[Ex] и DestroyWindow) - но этот способ менее приемлемый.

Alezis
21.09.2004, 20:15
да ты прав наверное Romeo лучше будет в отдельном окне. А с диалогами тож спасибо. Чтож попробуем по-другому.

Hup
22.09.2004, 02:53
Alezis, у меня есть примерчик собственноручного извращения... :) Правда не уверен, что именно такой тебе нужен. Могу скинуть

Alezis
22.09.2004, 14:23
Alezis, у меня есть примерчик собственноручного извращения... :) Правда не уверен, что именно такой тебе нужен. Могу скинуть
Если не трудно скинь на 1005@tut.by. Буду очень благодарен.

arris
28.09.2004, 19:36
Alezis, ты если честно поднял аффигенно класную проблему! Столкнулся я с ней года два-три назад! И ты не прав - докопай до конца! Не пожалеешь!!!
Для тех кто не понял: В MFC более менее реализовано сопоставление одному представлению несколько документов, а вот наоборот довольно трудно. Т. е. у вас есть один класс документа, а под каждое другое представление свой класс. Очень удобная штука для реализации сложных приложений, где данные одни и те же, а показывать их надо по разному
К сожалению копал эту проблему давно исходники нарыть будет трудно. В MSDN есть решение этой проблемы, но ссылку тоже не помню. Что-то связанное с RUNTIME_CLASS, или где-то созвучное! Попробуй это стоит того!

arris
30.09.2004, 11:38
Alezis, загляни сюда, только что нарыл:
http://forum.vingrad.ru/index.php?showtopic=30446

Dragonfly
01.10.2004, 19:18
Ну вот, опять по низкоуровневому framework'у пошли :) Итак, фактическая суть проблемы и ее решения, которая напрашивается, это заменить по горячему CListView на CFormView, так? Для начала можно потренироваться в написании MDI с DocumentTemplate и т.п. а уже потом попробовать впихнуть это все в single view. Для этого скорее всего понадобиться написать два view'а, ссылающиеся на один и тот же document. Это несложно в случае с MDI, но для SDI... Посмотри, для регистрации шаблона документа нужно 3 вещи: документ, вид, и экземпляр CMDIChildWnd. Т.е... :( Я бы порекомендовал тебе сделать MDI приложение и замаскировать его под SDI. Какая разница пользователю если он не видит на стандартной менюшке кнопочек минимизировать, максимизировать, закрыть, то ничего он с ним не сделает.

arris
04.10.2004, 11:23
Dragonfly, для пользователя никакой разницы, а для тебя??? Прости, это не переход на личности это просто сатисфекшн!

Dragonfly
04.10.2004, 11:38
Писание на Visual C++ само по себе не есть такой уж великий satisfaction :) - я имею в виду что все равно писать придется много. А вообще, скорее всего, лучше написать себе MDI. Кстати, насчет сопоставления одного документа нескольким представлениям (я правильно понял?) - так ведь ничто не мешает связать несколько видов с одним документом и представлять его как угодно. Т.е. я не хотел быть резким, извини.

arris
04.10.2004, 19:11
Во-первых, всем: как это понять:
"Кстати, насчет сопоставления одного документа нескольким представлениям (я правильно понял?) - так ведь ничто не мешает связать несколько видов с одним документом и представлять его как угодно"
во-вторых, по моему разговариваем мы вдвоем. Мне кажется, проблема уже давно решена
в-третьих, вопрос касался именно SDI