Официальный сайт студ.городка НГТУ
Программирование и БД » [Снова MFC] Двойная Буферизация 

#1  05.06.06 12:41

[Снова MFC] Двойная Буферизация

SDI приложение, в функции onDraw создаю виртуальный контекст, потом по его данным отрисовываю рабочую облась, но при этом "Мерцание" не исчезает. Что делать?
Как вариант, причина мерцания - очиска экрана при обновлении, а потом непосредственно отрисовка. Но тут такой вопрос - как запретить очистку фона??

Offline

#2  05.06.06 12:44

Re: [Снова MFC] Двойная Буферизация

Код покажи, какие сообщения обрабатываешь?

Offline

#3  05.06.06 12:52

Re: [Снова MFC] Двойная Буферизация

Код: с:

void CBaseProjView::OnDraw(CDC* pDC)
{
	CBaseProjDoc* pDoc = GetDocument();	
	CDC MemDC;
	CBitmap MemBit;
	CRect Rect;
	GetClientRect(&Rect);
	MemDC.CreateCompatibleDC(pDC);    // ñîçäàåì äåñêðèïòîð
	MemBit.CreateCompatibleBitmap(pDC,Rect.right,Rect.bottom);
	MemDC.SelectObject(&MemBit);
 
	MemDC.Rectangle(Rect);
	/*
	*Рисую в MemDC
	*/
 
	pDC->BitBlt(0,0,Rect.right,Rect.bottom,&MemDC,0,0,SRCCOPY);
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

Исправлено _|ex (05.06.06 12:53)

Offline

#4  05.06.06 13:03

Re: [Снова MFC] Двойная Буферизация

сообщения от мыши обрабатываю... Перетаскиванеи элементов в рабочей области.

Offline

#5  05.06.06 13:05

Re: [Снова MFC] Двойная Буферизация

Не, всмысле какие еще в этом окне сообщения обрабатываешь.
И еще вопрос - зачем каждый раз создавать новый контекст и битмап в OnDraw, а потом рисовать в него? Это же тоже ест время.
По моему логичней MemDC и MemBit вынести в переменные твоего класса окна, инициализацию которым сделать в начали по WM_CREATE. (CreateCompatibleDC, CreateCompatibleBitmap, SelectObject)

Потом, при необходимости изменить что то в окне, рисовать прямо в этот виртуальный контекст, а при событии WM_ERASEBKGND, делать просто pDC->BitBlt(0,0,Rect.right,Rect.bottom,&MemDC,0,0,SRCCOPY);
Попробуй так

Исправлено MadSlayer (05.06.06 13:06)

Offline

#6  05.06.06 13:12

Re: [Снова MFC] Двойная Буферизация

MadSlayer, конечно попробую, но по-моему причина мерцания - очиска экрана перед перерисовкой, поэтому мне кажеться что это не поможет. Надо как то запретить это действие ИМХО.
или я что то путаю?

Offline

#7  05.06.06 13:18

Re: [Снова MFC] Двойная Буферизация

WM_ERASEBKGND - это как раз и есть сообщение по которому происходит отчистка экрана. Тоесть если в обработчике этого сообщения будешь просто делать BitBlt из виртуального контекста, то это и будет являться отчисткой по хорошему - вместо мусора нарисуеться текущее изображение окна. )

Offline

#8  05.06.06 13:20

Re: [Снова MFC] Двойная Буферизация

ок, спасибо :))

Offline

Программирование и БД » [Снова MFC] Двойная Буферизация 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 1.878 сек.
Выполнено 14 запросов.