Мы с Вами попробуем пока просто закрасить. Создадим функцию 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); }
Как видите, во-первых, нам пришлось пересчитать прямоугольник в координаты окна. А вот результат.
Немного поработав с этим окном Вы увидите кучу недостатков, мигание изображения например или исчезновение клиентской области. Все это говорит о том, что зарисовывать нужно не все, а только четыре прямоугольника, которые еще нужно рассчитать.