以前一直疑惑,又mfc向导产生的文档类模板程序中绘图用的是OnDraw,而自动生成的对话框类程序中绘图用的是OnPaint,如果在文档类程序中添加OnPaint消息后,OnDraw就会失效。现在终于搞明白了,如果我们没有自定义OnPaint消息,则当WM_PAINT消息产生时,将会被其基类CView所截获,即调用CView::OnPaint函数,其定义如下
void CView::OnPaint(){
// standard paint routine
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
}
由以上定义可以看出,其实是CView中的OnPaint函数调用了OnDraw函数。如果我们自定义了OnPaint函数,则消息将被自定义的OnPaint函数所截获,而自定义的OnPaint函数中又没有调用OnDraw函数,故而OnDraw函数就失效了。