Windows消息发送与捕获:用来绘图

Windows消息发送与捕获:用来绘图  


 

上例,用弹出对话框来显示消息捕获成功,其实,消息在Windows应用程序中无处不在,用途也是广而又广,用鼠标绘图实际上就是对鼠标按钮消息的捕获。下面,我们来做一个简单的绘图程序,来体会Windows的消息机制。

 

 一、新建一个工程Draw:

Windows消息发送与捕获:用来绘图_第1张图片

 

 添加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

 

 

 

 

 

 

Windows消息发送与捕获:用来绘图_第2张图片

 CWindowDC dc(GetDesktopWindow());

你可能感兴趣的:(windows,null,mfc)