注释宏中间的内容显示为灰色。
建立MFC时,view类是覆盖在框架类窗口之上的。在建立的窗口上的所有显示都是在view类之上的,因此在处理消息响应时应该在
view类中进行处理。
MFC消息映射的机制,与实现原理?
消息映射就是建立一个消息和函数的对应表,当收到消息时查找表,如果表中有相应的消息,就将消息交给相应的函数处理。
通俗点讲,消息映射表就是一个记录了消息号和相应处理函数的数组。当然表中还有其他信息,这里先说矛盾的主要方面了。其中消
息映射表中的每个元素都是一个结构体变量,他的成员很多,最主要的就是消息号和相对应的消息处理函数。
关于消息映射表的查找,是通过虚函数实现的,通过父类的虚函数查找父类及其层层子类定义的消息映射表。如果找不到,就交给默
认的窗口处理函数处理。 如果一个类的消息映射表中定义了一个消息处理,那么就不再继续查找子类或者子类的子类,从而实现了
覆盖。
CDC类包含画图函数。CDC类还包含一个子类CClientDC,此类不需要显示调用GetDC和ReleaseDC,分别在构造和析构时调用.CDC类还包
含另一个子类CWindowDC,此类也不需要显式调用GetDC和ReleaseDC,此类可以在非客户区域画图。
//画一条直线示例
void CTestMFCView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//MessageBox("view click!");
m_ptOrigin = point;
CView::OnLButtonDown(nFlags, point);
}
void CTestMFCView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
/*HDC hdc;
hdc = ::GetDC(m_hWnd);
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);*/
/*CDC *pDC = GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);*/
/*CClientDC dc(this);
//CClientDC dc(GetParent());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);*/
//CWindowDC dc(this);
//CWindowDC dc(GetParent());
/*CWindowDC dc(GetDesktopWindow());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);*/
CView::OnLButtonUp(nFlags, point);
}