zcj331的专栏

这是一个绘制直线的简单绘图程序,能过实现动态轨迹画线,在拖动时产生临时线来表示可能画出的直线效果。

首先:建立一个单文档程序,名称为Demo然后:在视图类的声明文件里面加入数据成员

classCDemoView:publicCView{//········protected:intm_Dragging;HCURSORm_HCross;CPointm_PointOld;CPointm_PointOrigin;//········};

接着:在视图类的构造函数里面

CDemoView::CDemoView(){//TODO:addconstructioncodeherem_Dragging=0;m_HCross=AfxGetApp()->LoadStandardCursor(IDC_CROSS);//载入标准的十字光标}

接着:为视图类添加鼠标左键,鼠标移动,鼠标左键释放消息

voidCDemoView::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefault::SetCursor(m_HCross);//这一句能防止左键单击的时候,保持鼠标样式不变m_PointOrigin=point;m_PointOld=point;SetCapture();//捕获鼠标,充分控制鼠标m_Dragging=1;RECTRect;GetClientRect(&Rect);//取得窗口当前显示坐标ClientToScreen(&Rect);//转换为屏幕坐标::ClipCursor(&Rect);//限定光标在指定矩形了吗CView::OnLButtonDown(nFlags,point);}

voidCDemoView::OnMouseMove(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefault::SetCursor(m_HCross);if(m_Dragging){CClientDCClientDC(this);ClientDC.SetROP2(R2_NOT);//逆转当前屏幕颜色来画线的绘图方式ClientDC.MoveTo(m_PointOrigin);//ClientDC.LineTo(m_PointOld);//擦去上一次的线ClientDC.MoveTo(m_PointOrigin);ClientDC.LineTo(point);//绘制这一次的临时线m_PointOld=point;}CView::OnMouseMove(nFlags,point);}

voidCDemoView::OnLButtonUp(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultif(m_Dragging){m_Dragging=0;::ReleaseCapture();//结束捕获鼠标::ClipCursor(NULL);//解锁鼠标CClientDCClientDC(this);ClientDC.SetROP2(R2_NOT);ClientDC.MoveTo(m_PointOrigin);ClientDC.LineTo(m_PointOld);//擦去上一次的临时线ClientDC.SetROP2(R2_COPYPEN);//缺省绘图模式,像素为画笔颜色ClientDC.MoveTo(m_PointOrigin);ClientDC.LineTo(point);//绘制固定线}CView::OnLButtonUp(nFlags,point);}

,还深深埋在心底,要除去,怕是不能活命。

zcj331的专栏

相关文章:

你感兴趣的文章:

标签云: