Windows消息发送与捕获:用来绘图
上例,用弹出对话框来显示消息捕获成功,其实,消息在Windows应用程序中无处不在,用途也是广而又广,用鼠标绘图实际上就是对鼠标按钮消息的捕获。下面,我们来做一个简单的绘图程序,来体会Windows的消息机制。
一、新建一个工程Draw:
添加Windows消息处理器:
三、 编辑代码:
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//AfxMessageBox("你按下了鼠标左键");
this->m_ptOrigin=point; //保存左键按下时的坐标
CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//AfxMessageBox("你释放了鼠标左键");
//---------------------------------
//HDC hdc;
//hdc=::GetDC(m_hWnd); //在MFC当中,如果要用全局的函数,要加上::
//MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL); //移动当前位置到一个指定点并返回先前位置
//LineTo(hdc,point.x,point.y); //画线
//::ReleaseDC(m_hWnd,hdc); //释放DC资源
//----------------------------------
//---------------------------------
//CDC *pDC=GetDC();
//pDC->MoveTo(m_ptOrigin);
//pDC->LineTo(point);
//this->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(this->m_ptOrigin);
dc.LineTo(point);
//---------------------------------
CView::OnLButtonUp(nFlags, point);
}
以上用了三种方法画线
第一种方法,用HDC
第二种方法,CDC
第三种方法,CClientDC
CClientDC是从CDC派生出来的,构造的时候调用GetDC,析构的时候调用ReaseDC
CWindowDC dc(GetDesktopWindow());