![]() |
|
![]() ![]() ![]() |
|
Severyanin |
|
|||
![]() Исследователь ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 31.7.2007 Где: Россия, Омск Репутация: нет Всего: 9 |
Доброе время суток. При Запуске меню написанной программы, Винда выдает ошибку:
Debug Assertion failed .... on f:\rftm\vctools\vc7libs\ship\atlmfc\include\afxcmn.inl on line 255 ..... Во-первых, у меня нет диска f. И главный вопрос: из-за чего может вылазить такая ошибка, как ее отловить. Код не вывешиваю, т к не знаю. где именно косяк. Заранее спасибо. Добавлено через 12 минут и 18 секунд проблема решилась. Но вот только никак не могу заполнить TreeCntrl файлами текущей директории. Помогите найти ошибку, пожалуйста
-------------------- "Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл "Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов |
|||
|
||||
Severyanin |
|
|||
![]() Исследователь ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 31.7.2007 Где: Россия, Омск Репутация: нет Всего: 9 |
немного локализовал проблему. Debugger показал, что имена файлов читаются корректно. Значит, ошибка в выводе в TreeCtrl
-------------------- "Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл "Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Модератор: Название темы должно отражать ее суть!
В чем ошибка-то? Не те строки в дерево выводятся? Подозрение вызывает lpBuffer: память под него ты нигде не выделяешь, однако используешь, как будто туда прочитан текст... -------------------- ... |
|||
|
||||
Severyanin |
|
|||
![]() Исследователь ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 31.7.2007 Где: Россия, Омск Репутация: нет Всего: 9 |
Нет, Debug показывает, что в переменные записываются нормальные значения. По-крайней мере, имена файлов. В lpBuffer тоже, насколько я могу судить. Может, я просто не на то событие обработчик вешаю? Пока - на OnCreate.
-------------------- "Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл "Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов |
|||
|
||||
Severyanin |
|
|||
![]() Исследователь ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 31.7.2007 Где: Россия, Омск Репутация: нет Всего: 9 |
А текст в lpBuffer записывает GetCurrentDirectory() ровно WRIT_BYTES символов.
Добавлено через 46 секунд После того, как прописал экземпляр класса в конструктор, приложение начало вылетать. -------------------- "Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл "Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Записывать-то записывает, но память кто выделяет? У тебя этого кода нет, значит, никто. Т.е. функция пишет куда-то в область статических данных... -------------------- ... |
|||
|
||||
Severyanin |
|
|||
![]() Исследователь ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 31.7.2007 Где: Россия, Омск Репутация: нет Всего: 9 |
А, это просто старый вариант. Конечно, исправил уже
![]() -------------------- "Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл "Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
1) OnCreate в нормалном состоянии должен возвращать 0.
2) Заполнение на OnCreate вполне нормально. Не совсем понимаю, что значит твое "либо повесил обработчик не на то событие". Ты мог повесить OnCreate не на WM_CREATE? 3) И наконец, объясни толком, в чем проявляется ошибка! Добавлено через 4 минуты и 48 секунд У тебя хоття бы корень появляется? Попробуй убрать NULL из последнего параметра InsertItem (пусть будет по-умолчанию). А также, поскольку у тебя там сплошные нули кроме текста, используй другой вариант функции: InsertItem (filename, hRoot, TVI_LAST). -------------------- ... |
|||
|
||||
Severyanin |
|
||||
![]() Исследователь ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 31.7.2007 Где: Россия, Омск Репутация: нет Всего: 9 |
Ошибка проявляется в том, что TreeCtrl не заполняется вообще.
Earnest,
Нет, я, конечно, в первый раз пишу на VC, но все же не мог. Я имел в виду, что эту последовательность действий,может быть, надо было писать не в OnCreate, а в OnInitDialog. А с InsertItem попробую, Спасибо ![]() Добавлено через 3 минуты и 59 секунд Нет, не помогло. Видимо, дело не в этом. Или не только в этом. Добавлено через 8 минут и 34 секунды У меня еще вопрос появился. Мне нужно поменять цвет фона приложения. Пока я делаю
Это-обработчик события выбора радио-кнопки. Но он тоже не работает. -------------------- "Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл "Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов |
||||
|
|||||
Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ты же OnCreate своего контрола имел в виду, а не диалога? Ой, только что разглядела толком! Это же не его OnCreate! У тебя там случаем не 2 три-контрола? Если у тебя диалог, то почему ты не в ресурс-эдиторе его не диалог кладешь, а создаешь в OnCreate? А по поводу цвета фона - конечно, твой код не сработает - ты же просто выставляешь переменную временнолго DC, который тут же грохается. Кроме того, тебе цвет чего надо то? Твоего диалога, на котором кнопка? Тогда чего его искать так сложно. Разве this в этом обработчике - это не оно? А фон меняй так: подключи обработчик WM_ERASEBACKGND, заведи переменную m_bkClr, которую сначала установи в CRL_DEFALT, а по кнопке меняй на то, что хочешь. Обработчик OnEraseBackgnd будет примерно такой:
-------------------- ... |
||||
|
|||||
Severyanin |
|
|||
![]() Исследователь ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 31.7.2007 Где: Россия, Омск Репутация: нет Всего: 9 |
нет, контрол у меня один. Я его создал в ресурс-эдиторе, но при запуске он должен сразу показать содержимое текущего каталога, потом надо будет еще фильтр повесить, чтобы он отображал только определенные типы файлов, которые формирует автоматизированная система.
А цвет фона мне нужно менять у всего приложения, не считая дочерних файлов. Поэтому я и повесил его на OnCreate. То-есть, его надо было класть на OnCreate диалога? Добавлено через 12 минут и 24 секунды В смысле, повесил не смену цвета, а заполнение дерева. Еще не проснулся, поэотму иногда выдаю такое. ![]() -------------------- "Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл "Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов |
|||
|
||||
Severyanin |
|
|||
![]() Исследователь ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 31.7.2007 Где: Россия, Омск Репутация: нет Всего: 9 |
А для того, чтобы этот OnEraseBackgnd сработал, мне надо будет еще SendMessage вызывать?
Добавлено через 12 минут и 43 секунды CRL_DEFALT. Переменная точно так называется? Не могу найти в MSDN. Или аналога. прошу прощения за ламерские вопросы. -------------------- "Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл "Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов |
|||
|
||||
Severyanin |
|
|||
![]() Исследователь ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 31.7.2007 Где: Россия, Омск Репутация: нет Всего: 9 |
или это мой макрос, определяемый #define?
Добавлено через 2 минуты и 46 секунд Спасибо, цвет фона менять научился ![]() Как сделать, чтобы при изменении цвета были видны элементы управления? Добавлено через 4 минуты и 50 секунд И получить-таки handle всего приложения? -------------------- "Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл "Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов |
|||
|
||||
Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Что-то ты совсем меня запутал. И себя, похоже, тоже. Что такое CTreeCont? Если это диалог, то зачем там вызов if (CTreeCtrl::OnCreate(lpCreateStruct) == -1)? А если это три-контрол, то зачем m_wndTreeCtrl.Create(...)? Далее, если три-контрол ты кладешь на диалог редактором ресурсов, то его не надо создавать - без тебя создадут. А раз ты создаешь, то это что-то лишнее. Лучше я напишу, как надо, чем пытаться разобраться, что ты наделал. 1) Заводим класс, производный от три-контрола, скажем CMyTreeCtrl 2) Заводим класс диалога, CMyDialog, в котором объявляем переменную типа CMyTreeCtrl, скажем m_tvFiles 3) В редакторе ресурсов кладем на диалог три-контрол с идентификатором скажем IDC_FILES 4) В переопределенном методе диалога DoDataExchange добавляем такое предложение:
Здесь мы связываем нашу переменную m_tvFiles и три-контрол IDC_FILES, который создастся без нашего участия. Далее, его нужно заполнить. На OnCreate этого делать нельзя, просто потому, что мы (т.е. класс CMyTreeCtrl) этого сообщения не получит - как я уже сказала, три-контрол создается ДО связывания с нашей переменной. Но вариантов заполнения масса. Например, можно переопределить метод PreSubclassWindow (у CMyTreeCtrl), и сделать заполнение там. Этот метод вызывается изнутри DDX_Control. Во-вторых, можна написать отдельный метод CMyTreeCtrl::UpdateContent, и вызывать его из диалога в подходящих случаях. Первый раз - из OnInitDialog ПОСЛЕ вызова базового OnInitDialog, а затем - при изменении текущего каталога или фильтра. Скорее всего ты не видишь заполненное деревоиз-за путаницы с контролами и временем их создания. Добавлено через 2 минуты и 57 секунд
А оно что, все стирает? Кошмар... вроде не должно... покажи код... Что ты имеешь ввиду? Хандл главного окна приложения? Так это зависит от того, какое у тебя приложение. Если диалог-based, то это и есть твой диалог (если он - главное окно). А если SDI или MDI, то AfxGetMainWnd(). Добавлено через 5 минут и 55 секунд CLR_DEFAULT - это стандартная макроконстанта, но суть от этого не зависит, можно любую константу взять, которая отличается от нормальных цветов RGB. Чтобы пришло WM_ERASEBKGND, нужно просто после изменения переменной вызвать Invalidate (TRUE) для того окна, которое надо перерисовать. -------------------- ... |
||||
|
|||||
Severyanin |
|
||||||||
![]() Исследователь ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 31.7.2007 Где: Россия, Омск Репутация: нет Всего: 9 |
нет, оно не стирает. а делает сплошную заливку, в результате чего радиокнопки становятся видимыми только при наведении на них мыши. Обработчик события - твой, я его не менял, а на щелчке на radiobutton: Старый вариант
Новый вариант
а мой VS2005 ее не видел, пришлось переопределть через RGB. Добавлено через 1 минуту и 35 секунд И еще, как сделать так, чтобы цвет фона самих элементов управления менялся вместе с цветом фона окна. Я видел ответ hunter, но не понял. Можно поподробнее? -------------------- "Звонким вереском скроются наши следы, и не вспомнят о них. Кто поверит нам, рыцарям павшей звезды из отвергнутых книг? Пусть в узоре времен ни стихов. ни имен, но напомнит забывшим их полуночный крик." Тэм Гринхилл "Ужели суслик твоего коварства нагадит в плов доверья моего?". Л.Филатов |
||||||||
|
|||||||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |