![]() |
|
|
![]()
|
|
| Fazil6 |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 3 Всего: 60 |
Жизнь заставила рисовать GUI с MFC. Столкнулся с такой проблемой.
Имею класс
на этой фигне у меня есть констрол CTreeCtrl . Назначил ему переменную
заполняю я этот контрол такой функцией
запускаю и как казалось бы работает правильно, но если вызываю SysTreeInit() еще раз, то получаю пустой контрол, т.е. в этом дереве нет ничего. Пробовал в разных местах этой функции дергать UpdateData(FALSE) , но ничего не меняется... Даже не знаю в каком напрвлении ковырять. Вообще в рисовании GUI с помощью MFC я откровенно говоря ламер и по большому счету в первый раз в жизни такой работой занимаюсь так что приму любые идеи и советы. |
||||||
|
|||||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
в данном примере вообще не нужна, это из другой оперы (DDX_Control она не касается). типа прогрессивное человечество на юникод переходит тут собирал про это инфу, но ты, наверное, в курсе, так на всякий случай. можно просто: InsertItem(sys_n, ... ); CString умеет сам к LPCTSTR (const TCHAR *) преобразовываться. но это все мелочи, работать все равно должно, потому пример прикладываю. PS Удачи! Присоединённый файл ( Кол-во скачиваний: 6 )
testMFCTree.rar 21,31 Kb |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 3 Всего: 60 |
посмотрел пример... Честно говоря принципиальных отличий от моего проекта в этом вопросе не заметил. Я вобщем так и использую как ты показал (по большому счету ты просто мои функции как есть скопировал). Главная причина моего удивления состоит в том, что это дерево у меня не единственное в интерфейсе. Вобщем история такая : я имею диалог (главное окно программы), на нем тоже есть такой контрол (в него выводится другая инфа, но не в этом суть). С ним я работаю в общем по тому же принципу и там все нормально работает. И есть этот клас наследник CFormView, который используется как фрейм в этом главном диалоге. Короче в классе главного окна работает как надо, а тут глюк какой-то. Я думал, что может для CFormView нужно дополнительно чего-нибудь дергать или вроде того... Дебагером смотрел и в функции SysTreeInit() все нормально, узлы вроде создаются, данные есть, строками узлы инициализируются... Вобщем не знаю чего и думать. У меня, правда, студия 7.1, хотя не представляю какое это может иметь значение. Добавлено через 6 минут и 42 секунды причем алгоритм такой : при выделении узла определенного в дереве главного окна у меня на этом фрейме выводится некая инфа. Так вот после запуска первый раз выделив нужный узел все строится правильно и дальше щелкая по контролам в этом фрейме все работает как надо. Но если в главном дереве выделить другой узел контролы на фрейме обновляются кроме дерева, в дереве просто ничего нет и дальше куда ни кликай в главном дереве дерево на фрейме пустое, хоть тресни. Причем в дебагере вижу, что функция заполнения его вызывается, узлы в этой функции удаляются после первого удачного заполнения удаляются, но новые не отображаются |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
Fazil6, ну сам наверное понимаешь, что по этим данным можно только ребилд посоветовать сделать.
Нужно локализовывать ошибку, наверное стоит ее воссоздать на новом проекте, тогда или сам найдешь, или сюда выложишь - посмотрим. Добавлено через 1 минуту и 15 секунд
думаю тут никакого. |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 3 Всего: 60 |
вобщем имею такую функцию по нажатию кнопки.
нажав первый раз вижу в контроле рут узел "Системы". МессаджБокс выводит Системы. нажав второй раз в контроле ничего нет (точнее там вроде в руте есть прбел какой-то) и МессаджБокс выводит Системы. Ничего не понимаю... Сейчас попробую отдельным проектом смоделировать |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
Fazil6, а мой проект компилировал? Работает правильно?
Проблема с версией решается просто: нужно открыть файл .vcproj текстовым редактором, найти строку: <VisualStudioProject ProjectType="Visual C++" Version="8,00" ... заменить 8,00 на 7,1 сохранить, затем открыть в студии. это лишнее |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 3 Всего: 60 |
вот тут маленький нюанс. Вообще я предполагал, что это лишнее, но если убрать этот вызов, то все еще хуже. короче попробовал без лишней пыли сделать отдельный проект с данной проблемой. Вышло еще хуже. Я создаю консольное приложение с поддержкой MFC и добавляю в него диалог. Нажав OK инициализируется CFormView с деревом. Дальше все совсем интересно - при обращении к переменной связанной с CTreeCtrl получаю маловразумительный Assert Failed Присоединённый файл ( Кол-во скачиваний: 2 )
qSat2.zip 33,03 Kb |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 3 Всего: 60 |
имеем следующую картину. Вроде с эксепшеном втыркнул причину (хотя кто бы мог подумать...) Вобщем в прикрепленном проекте имею проблему описаную выше.
Если запустить приложение и нажать OK загрузится мой фрейм. Если на нем нажимать Load, то добавляются узла, но если нажать Clear, то все - жопа и новые узлы в дереве не отображаются сколько не тискай Load. Присоединённый файл ( Кол-во скачиваний: 3 )
qSat2.zip 18,51 Kb |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
Посмотрел проект.
ну если ни так ни так не работает, трудно судить что хуже. Ассерт вылетал потому что при обращении к контролам они еще не были созданы. Не были созданы, потому что FormView неправильно создавался. Стал вспоминать как правильно, и видимо в диалог его вставить не получиться так просто. Я считал что можно, потому что держал пару примеров на примете (один из них), но они из другой степи немного. Теперь по делу. Наверное сразу надо было советовать делать все через диалоги. Вообщем пример прилагаю. Присоединённый файл ( Кол-во скачиваний: 3 )
qSat2.rar 13,01 Kb |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |