Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2011, 00:11   #1
LockHeart
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 14
По умолчанию winapi, утечка памяти

Пытался в своей программе использовать двойную буферизацию, все прекрасно работает, за исключением того, что через продолжительное время работы рамка пропадает, вместо нее созерцаю черный фон.))

Код:
case WM_PAINT:	
			{			    
				GetClientRect(hWnd,&Rect);
				hdc =  BeginPaint (hWnd,&ps);

				memdc = CreateCompatibleDC(hdc); 
				hCompatibleDC = CreateCompatibleDC(hdc);  
                                hMemBmp = CreateCompatibleBitmap(hdc, 
                                                           GetDeviceCaps(hdc, HORZRES),
                                                           GetDeviceCaps(hdc, VERTRES));
				hMemBmpOld = SelectObject(memdc,hMemBmp); 
				SelectObject(memdc,hMemBmp); 

				hBitmap = LoadImageA(NULL, "Ramka.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);   
				GetObject(hBitmap, sizeof(BITMAP), &Bitmap);	
				hOldBitmap = SelectObject(hCompatibleDC, hBitmap);  
				BitBlt(memdc, 0, 0, Rect.right, Rect.bottom, hCompatibleDC, nHPos, nVPos, SRCCOPY);
				SelectObject(hCompatibleDC, hOldBitmap);
				DeleteObject(hBitmap);

                             <...>

			BitBlt(hdc, 0, 0, GetDeviceCaps(hdc, HORZRES), GetDeviceCaps(hdc, VERTRES), memdc, 0,0, SRCCOPY);

		        SelectObject(memdc, hMemBmpOld);
				DeleteObject(hMemBmp);
				DeleteDC(memdc);
				DeleteDC(hCompatibleDC);
				EndPaint(hWnd, &ps);
Судя по всему, что-то не делейтится, но при каждой перерисовке окошка создается, из-за чего в конечном итоге все и происходит. Только в чем именно проблема - никак понять не могу...

Последний раз редактировалось LockHeart; 07.12.2011 в 00:17. Причина: Чуток дополнил код...
LockHeart вне форума Ответить с цитированием
Старый 07.12.2011, 00:33   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

че-то как-то мрачновато. не WM_PAINT, а WM_PAIN какой-то.

на каждый Paint подгрузка битмапа !?
на каждый Paint как минимум две копии чего-то куда-то !?

если битмап такой красивый, то может имеет смысл загрузить его один раз держать хендл глобально?

в целом, по теме рисования рекомендую присмотреться к GDI+.

да, и как-то не наблюдаю связи между названием темы и проблемой.

Последний раз редактировалось f.hump; 07.12.2011 в 00:36.
f.hump вне форума Ответить с цитированием
Старый 07.12.2011, 00:51   #3
LockHeart
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 14
По умолчанию

Проблема в том, что эта мрачноватая конструкция работает какое-то время, после чего внезапно работать перестает. Это и наводит на мысли именно об утечке памяти...
LockHeart вне форума Ответить с цитированием
Старый 08.12.2011, 02:28   #4
LockHeart
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 14
По умолчанию

Проблема решена.
LockHeart вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятная утечка памяти FReeZ777 Работа с сетью в Delphi 14 11.02.2012 18:16
Утечка памяти Juffin Общие вопросы Delphi 3 02.11.2010 12:11
Утечка памяти ZvEr_HaCkEr Свободное общение 13 24.09.2010 19:30
утечка памяти в С++ vengo Общие вопросы C/C++ 9 10.06.2008 21:24
DrawState - утечка памяти? unnamed Win Api 2 11.04.2007 18:36