

Программирование на языке 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 () );
}
Программа откомпилировалась без ошибок!
