Шаг 71 - Пробуем рисовать

Мы с Вами попробуем пока просто закрасить. Создадим функцию DrawWindowArea.

void CTestPaintDlg::DrawWindowArea(BOOL b)
{

}

И будем вызывать ее из сообщений.

BOOL CTestPaintDlg::OnNcActivate(BOOL bActive) 
{
	DrawWindowArea(TRUE);
	return TRUE;
}

void CTestPaintDlg::OnNcPaint() 
{
	DrawWindowArea(TRUE);
}

Ничего не изменится. Для того, чтобы отрисовать окно нам нужно получить контекст окна. Получим его.

void CTestPaintDlg::DrawWindowArea( BOOL b)
{
	CDC* cdWinDC= GetWindowDC();
	ReleaseDC(cdWinDC);
}

А теперь просто закрасим его красным цветом:

void CTestPaintDlg::DrawWindowArea( BOOL b)
{
	CDC* cdWinDC= GetWindowDC();
	CRect cr;
	CRect crtemp;
	GetWindowRect(&cr);
	crtemp.left=0;
	crtemp.top=0;
	crtemp.right = cr.Width();
	crtemp.bottom =  cr.Height();
	CBrush tempBrush1;
	tempBrush1.CreateSolidBrush(RGB(255,0,0));
	cdWinDC->FillRect(&crtemp,&tempBrush1);
	ReleaseDC(cdWinDC);
}

Как видите, во-первых, нам пришлось пересчитать прямоугольник в координаты окна. А вот результат.

71_1.gif (3181 b)

Немного поработав с этим окном Вы увидите кучу недостатков, мигание изображения например или исчезновение клиентской области. Все это говорит о том, что зарисовывать нужно не все, а только четыре прямоугольника, которые еще нужно рассчитать.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 05.07.2002