MFC动态画直线并且具有窗口重绘功能和保存在磁盘上

本文介绍了如何在MFC中实现动态画直线功能,包括设置拖曳标记、光标句柄,以及处理鼠标事件。同时,讲解了窗口重绘的实现,通过定义线段类CLine并使用CObArray存储线段数据。此外,还详细说明了序列化过程,以便将画的线条保存到磁盘并能在程序重新打开时恢复。
摘要由CSDN通过智能技术生成

动态画直线

(1)设置拖曳标记以及光标句柄。在视图类CMyDrawView的头文件中添加如下成员变量的定义
public:
int m_down;
int m_up;
int m_uy1;
int m_ux1;
int m_dy1;
int m_dx1;
(2)在视图类CMyDrawView的构造函数中初始化拖曳标记,设置十字光标。
CMyLineView::CMyLineView()
{
// TODO: add construction code here
m_bDragging=false;
m_hCross=AfxGetApp()->LoadStandardCursor(IDC_CROSS);
}
(3)利用ClassWizard类向导为视图类添加按下鼠标左键WM_LBUTTONDOWN、移动鼠标WM_MOUSEMOVE和释放鼠标左键WM_LBUTTONUP的消息处理函数。
void CMyLineView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_down=1;
m_dx1=point.x;
m_dy1=point.y;
SetCapture();
::SetCursor(m_hCross);
m_ptOrigin=point;
m_bDragging=TRUE;
CView::OnLButtonDown(nFlags, point);

}

void CMyLineView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_down)
{
CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
m_ptOrigin=point;
}
if(m_up)
{
CMyLineDoc* pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->AddLine(m_dx1,m_dy1,m_ux1,m_uy1);
CClientDC dc1(this);
dc1.MoveT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值