MFC绘制直线

MFC绘制直线,第1张

这样试试:

public:

CMFC练习Doc* GetDocument() const

CPoint startpoint //起始点

RECT rcOldClip//原先的鼠标活动区域

//在头文件中声明

void CMFC练习View::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

GetClipCursor(&rcOldClip) // 获得原鼠标活动的有效区域

startpoint=point //鼠标所在点为起始点

SetCapture() //进行鼠标捕捉

CView::OnLButtonDown(nFlags, point)

}

void CMFC练习View::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

ClipCursor(&rcOldClip) //恢复原来的鼠标活动区

ReleaseCapture() //释放鼠标捕捉

CView::OnLButtonUp(nFlags, point)

}

void CMFC练习View::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

CClientDC dc(this) //获得DC

HCURSOR cusor //鼠标光标句柄

RECT rcClip //限值矩形区域

if((nFlags&MK_LBUTTON)==MK_LBUTTON) //移动鼠标左键时是按下的

{

GetWindowRect(&rcClip)//获得客户去窗口区域

ClipCursor(&rcClip) //将鼠标的移动限制在客户区

if((nFlags&MK_CONTROL) !=MK_CONTROL)//ctrl键没有按下

{

cusor=AfxGetApp()->LoadStandardCursor(IDC_CROSS) //载入标准十字光标

SetCursor(cusor) //使用新光标

dc.MoveTo(startpoint.x,startpoint.y) //开始画线

dc.LineTo(point.x,point.y)

startpoint=point

}

else

{

cusor=AfxGetApp()->LoadStandardCursor(IDC_SIZENS) //载入标准箭头光标

SetCursor(cusor) //使用光标

CBrush mybrush(RGB(0,0,255)) //生成刷子

CBrush *oldbrush //原刷子指针

oldbrush=dc.SelectObject(&mybrush) //将刷子选入设备,并返回原刷子指针

dc.Rectangle(startpoint.x,startpoint.y,point.x,point.y) //绘制矩形

dc.SelectObject(oldbrush) //恢复原有刷子

}

}

CView::OnMouseMove(nFlags, point)

}

CPoint m_ptOrigin,point//两个座标自己加

CClientDC dc(this)//创建一个dc

dc.MoveTo(m_ptOrigin)//移到第一个点

dc.LineTo(point)//画直线


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12024347.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存