Программирование на языке MFC

Мой второй блог в серии программирования

Сообщение WM PAINT


Какое сообщение получает окно в том случае, когда окно должно перерисовать себя? Естественно, сообщение WM__PAINT. Какой метод должен отвечать за обработку сообщения WM_PAINT у объекта класса CView? Конечно же, CView::OnPaint(). Следовательно, нам неплохо было бы заглянуть в исходный текст этого метода, который, кстати, находится в файле viewcore.cpp:

void CView::OnPaint() {

// standard paint routine
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
}_________

[CView::OnPaint ) Видно, что вызов конструктора класса

Ucview.OnPrepareDC) СРаПЮС опРеделяетчт0 «”вод будет
^ – > осуществляться на окно класса CView.

Что ж, логично, иного трудно было ожидать. Теперь заглянем в код

метода CView::OnPrepareDC():

void CView::OnPrepareDC(CDC* pDC, CPrintlnfo* plnfo) {

ASSERT_VALID(pDC);

UNUSED(pDC); // unused in release builds

// Default to one page printing if doc length not known if (plnfo != NULL)

plnfo->m_bContinuePrinting =

(pInfo->GetMaxPage() != Oxffff || (plnfo->m_nCurPage == 1) ) ;

}

void CView::OnDraw(CDC*)

{

}

только подтверждает нашу догадку. Наверное, для того чтобы убе­диться в правильности нашей догадки, лучше всего будет привес­ти написанную программу, осуществляющую вывод информации в окно представления. Сделаем так, чтобы программа выводила в окно представления имя файла, на основе которого создан до­кумент. Итак, описание класса CDocView нашей программы прини­мает следующий вид:

Пример

class CDocView : public CView {

DECLARE_DYNCREATE ( CDocView ) public:

CDocView();

virtual ~CDocView(); void OnDraw( CDC* pDC );

};

Ниже я привожу текст метода OnDraw():

void CDocView::OnDraw( CDC* pDC ) {

pDC->TextOut( 10, 10, GetDocument()->GetPathName () );

}

Программа откомпилировалась без ошибок!