IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Помогите исправить баг...., WinAPI
blackhard
сообщение 8.10.2008 13:45
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


В общем делаю программу чертеж в которой есть зум и все такое.........Так вот в чем проблема....Если пару десятков раз изменить размер окна или использовать зумм все окна(нетолько моей программы)перестают обнавляться(незнаю как подругому объяснить лучше сами посмотрите(после завершения моей программы все вновь начинает обнавляться))..Никак не могу понять с чем это связано???Ставил комментарии на все что только можно и всеравно тоже самое......Помогите найти причину....

P.S Заранее извиняюсь за код, это моя первая серьезная прога на WinAPI)))


Полностью не добавился поэтому пришлось разбить...


Прикрепленные файлы
Прикрепленный файл  project.zip ( 38.45 килобайт ) Кол-во скачиваний: 148
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 8.10.2008 17:25
Сообщение #2


Гость






Хм... blink.gif

Ну, как я и говорил, у тебя утечка памяти, причем очень большая. Попробуй запустить TaskManager при работе своей программы, и посмотреть число GDI Objects... А знаешь, почему? Потому, что все, что ты делаешь

// Описание переменных

... // <--- Вот тут, после описания переменных, но перед switch-ем

switch(msg) {
в WndProc выполняется при получении каждого сообщения Windows твоим приложением. Ты представляешь, сколько сообщений приложение получает? Сотни ежесекундно. И у тебя каждый раз создается новый Pen, который нигде не удаляется, и новый BITMAP, а это - утечка. В какой-то момент счетчик GDI-объектов просто зашкаливает, и ты получаешь то, что описано в первом посте... Перенеси создание этого карандаша (если он тебе нужен, конечно), куда-нибудь в другое место, скажем, в WM_CREATE...

Кстати. Совсем не обязательно на все события мыши вешать SetCursor(hcguetar), вместо этого достаточно опять же при создании окна в WM_CREATE один раз прописать установку курсора для твоего окна... Все остальные действия - лишние. Ну, в методе draw класса вообще полный бардак, проверь, все ли созданные объекты там удаляются.

Сообщение отредактировано: volvo - 8.10.2008 19:18
 К началу страницы 
+ Ответить 
Гость
сообщение 9.10.2008 16:02
Сообщение #3


Гость






Цитата(volvo @ 8.10.2008 17:25) *

Хм... blink.gif

Ну, как я и говорил, у тебя утечка памяти, причем очень большая. Попробуй запустить TaskManager при работе своей программы, и посмотреть число GDI Objects... А знаешь, почему? Потому, что все, что ты делаешь

// Описание переменных

... // <--- Вот тут, после описания переменных, но перед switch-ем

switch(msg) {
в WndProc выполняется при получении каждого сообщения Windows твоим приложением. Ты представляешь, сколько сообщений приложение получает? Сотни ежесекундно. И у тебя каждый раз создается новый Pen, который нигде не удаляется, и новый BITMAP, а это - утечка. В какой-то момент счетчик GDI-объектов просто зашкаливает, и ты получаешь то, что описано в первом посте... Перенеси создание этого карандаша (если он тебе нужен, конечно), куда-нибудь в другое место, скажем, в WM_CREATE...

Кстати. Совсем не обязательно на все события мыши вешать SetCursor(hcguetar), вместо этого достаточно опять же при создании окна в WM_CREATE один раз прописать установку курсора для твоего окна... Все остальные действия - лишние. Ну, в методе draw класса вообще полный бардак, проверь, все ли созданные объекты там удаляются.

Спасибо за помощь)Блин глупая ошибка.....Начну разгребать свой бардак)
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 13:15
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"