![]() |
|
|
![]()
|
|
| AnikinAleksey |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
Уже 2 дня сижу над этим, а в чем дело понять не могу |
|||
|
||||
| Dray |
|
|||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
код в студию
|
|||
|
||||
| AnikinAleksey |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
вроде все ... если есть необходимость поясню все сто нужно.. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Где именно вылетает ошибка (в какой строке) и какая (точное сообщение)?
Кстати, по коду, есть некоторая несогласованность... 1) Переменную Update лучше сбрасывать в false в самой ф-и UpdateContent, иначе возможны лишние вызовы UpdateContent. 2) Для симметрии, проверять лучше там же (но необязательно). 3) Еще, в OnMouseMove лучше не вызывать UpdateContent, а ставить флаг Update=true и вызывать InvalidateRect. И убрать InvalidateRect из UpdateContent (вызов InvalidateRect из OnDraw вызывает содрогание). 4) Если нужно инвалидайтить весь клиент, можно просто вызвать Invalidate(True\False). -------------------- ... |
|||
|
||||
| AnikinAleksey |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
Если бы я мог найти строку с ошибкой, то не обращался бы на форум. При работе с приложением в какой то момент(закономерности я не обнаружил) вываливается Мессадж бокс с таким текстом "a required resource was". Как я понимаю тут либо что то с памятью, ибо вообще непонятно что. Поэтому и спросил может ктото сталкивался. Т.к. память где занимаю, там и освобождаю, утечки нет... а что может быть еще?? Мне хотябы какую-нибудь ниточку
лишних вызовов нет, т.к. эта переменная становится тру, только при создании окна, далее всегда фалсе. Это необходимо для того чтобы заполнение виртуального контекста происходило лишь при создании, а обновление происходило лишь под моим контролем. соответственно в онДрав происходит лишь копирование инфы из виртуального контекста в текущий, инвалидате не вызывается соответственно содрогания не будет
ок, учту |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Когда вывалится MessageBox, переключись в отладчик, прерви выполнение и посмотри, откуда растет.
Мои замечания прямо следуют из приведенного тобою кода: 1) В приведенном коде есть 2 вызова UpdateContent: в OnDraw и в MouseMove. Причем, в одном случае флаг сбрасывается, в другом нет. Это грязь и источник будущих ошибок, нарушающий принцип одного места, чтобы ты там не говорил о своих задумках. 2) Из кода OnDraw следует, что флаг Update имеет смысл "перед прорисовкой нужно обновить нек. внутреннее состояние". Если в обработчике MouseMove вызван UpdateContent, то в следующем вызове OnDraw вроде ничего обновлять не нужно. Тем не менее, флаг никто не сбрасывает. 3) Если "контент" нужно обновлять, из OnDraw вызывается UpdateContent, а там в свою очередь вызывается Invalidate. Это некорректно! Нельзя этого делать в WM_PAINT. А под содроганием я имела ввиду вовсе не мерцание, а содрогание души. От этого точно нужно избавиться. -------------------- ... |
|||
|
||||
| AnikinAleksey |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
но ведь его ни кто и не устанавливает... Все же спасибо за совет, учту. если это внесет какуюто ясность, вот текст вкладки debug:
последняя строка меня приводит в ужас... Добавлено @ 17:42 да, а как посмотреть название процедуры в момент ошибки? если вы об окне context то название функции выглядит примерно так "user32 77d5ea24()"... P.S. извиняюсь за глупый вопрос, я не так давно занимаюсь программированием, не слишком много знаю |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Лучше радуйся. Стало быть, у тебя возникает исключение, а message почему-то показывается дурацкий. Это бывает, не страшно. Тебе нужно понять, кто его возбуждает. После запуска программы иди в Debug->Exceptions и строке C++ Exceptions поставь опцию "break into debugger". Потом продолжай возить мышью пока не прервется. По идее, должно показать место возбуждения исключения. Не забудь потом вернуть установки Exceptions на место. По поводу UpdateContent, я бы сделала так: 1) оставить только один вызов UpdateContent, в OnDraw 2) выкинуть Invalidate из UpdateContent 3) в MouseMove, при возникновении необходимых условий, поставить флаг Update и вызывать Invalidate. Добавлено @ 17:57
Лучше смотреть в окне стека... Но в момент MessageBox это уже бесполезно: код, который обрабатывает исключение, никак не поможет найти место, где оно возбуждается. Нужно перехватить момент возбуждения, как написано выше. Добавлено @ 18:00 Все-таки у меня сильные подозрения по поводу Invalidate в момент прорисовки... Попробуй закомментировать UpdateContent в MouseMove и посмотри, будет ли валиться. Если не будет, сделай как написано выше (UpdateContent только в OnDraw и т.д.). (Если будет, все равно сделай -------------------- ... |
|||
|
||||
| AnikinAleksey |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
сейчас переделаю функцию UpdateContxt в соответствии с вашим советом, может быть это поможет... Добавлено @ 18:18 не помогло |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Context это cтек? Посмотри вниз до первого вразумительного входа...
Поток у тебя один? Надеюсь, это debug-версия? Если ничего не получится, давай проект. -------------------- ... |
|||
|
||||
| AnikinAleksey |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
Вылетает в конструкторе карандаша... при попытке создания
при вызове функции рисования элемента
поток один, версия дебаг. Добавлено @ 18:53 куда продж то кинуть? я не ленивый, но просто не могу даже представить куда копать |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Заархивируй и прямо сюда клади (нажми ответить, там будет место для файла).
Посмотри с какими параметрами создается перо. НО похоже ты просто не освобождаешь использованные перья, и они кончились... delete pen кто будет делать? А вообще, нафиг тебе там динамический объект? Можно ведь так:
И далее по тексту... тогда объекты само-уничтожаться... Добавлено @ 19:10 Или даже сделай перо членом класса и создай заранее, один раз. А потом только выбирай в контекст. -------------------- ... |
|||
|
||||
| AnikinAleksey |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
точно спасибо за помощь. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |