MFC消息映射机制的剖析,讲述如何运用ClassWizard,,理解发送给窗口的消息是如何被MFC框架通过窗口句柄映射表和消息映射表来用窗口类的 函数进行响应的。掌握设备描述表及其封装类CDC的使用,CDC是如何与具体的设备发生关联的,融合具体的画图程序进行分析。如何设置封闭图形的填充刷子 (位图画刷与透明画刷的使用)。
void CMy1View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_bDraw=FALSE;
/* HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,m_ptOrg.x,m_ptOrg.y,NULL); //移动到点
LineTo(hdc,point.x,point.y); //画线到点
::ReleaseDC(m_hWnd,hdc); //记得释放dc
*/
/* CDC *pDC=GetDC(); //CWnd::GetDC()
pDC->MoveTo(m_ptOrg);
pDC->LineTo(point);
ReleaseDC(pDC); //释放CDC资源
*/
// CClientDC dc(this); //CClientDC客户区dc,自动调用getdc 和releasedc
/* CClientDC dc(GetParent()); //CWnd* GetParent() 得到父窗口窗口指针
dc.MoveTo(m_ptOrg);
dc.LineTo(point); //不需要调用releasedc
*/
// CWindowDC dc(this);
// CWindowDC dc(GetParent()); //得到了整个窗口
/* CWindowDC dc(GetDesktopWindow()); //得到了整个桌面屏幕
dc.MoveTo(m_ptOrg);
dc.LineTo(point);
*/
/* CPen pen(PS_SOLID,10,RGB(0,0,255)); //创建画笔
CClientDC dc(this);
CPen *pOldPen=dc.SelectObject(&pen); //保持旧的的画笔
dc.MoveTo(m_ptOrg);
dc.LineTo(point);
dc.SelectObject(pOldPen); //恢复画笔
*/
// CBrush brush(RGB(255,0,0)); //创建颜色画刷
CClientDC dc(this);
CBitmap bitmap; //加载位图
bitmap.LoadBitmap(IDB_BITMAP1);
// CBrush brush(&bitmap); //位图画刷
CBrush* pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//创建透明画刷
CBrush* pOldBrush=dc.SelectObject(pBrush);
dc.Rectangle(CRect(m_ptOrg,point)); //画刷填充矩形
dc.SelectObject(pOldBrush);
CView::OnLButtonUp(nFlags, point);
}
void CMy1View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CPen pen(PS_SOLID,10,RGB(152,25,98)); //创建画笔
CPen *pOldPen=dc.SelectObject(&pen);
if (m_bDraw == TRUE)
{
dc.SetROP2(R2_BLACK); //设置绘图模式
dc.MoveTo(m_ptOrg);
dc.LineTo(point);
m_ptOrg=point;
}
CView::OnMouseMove(nFlags, point);
}