关于使用MFC画直线的问题
voidCMFCStudyView::OnLButtonDown(UINTnFlags,CPointpoint){m_cpoint=point;CView::OnLBut...
void CMFCStudyView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_cpoint = point;
CView::OnLButtonDown(nFlags, point);
}
void CMFCStudyView::OnLButtonUp(UINT nFlags, CPoint point)
{
CClientDC pdc(this);
pdc.MoveTo(m_cpoint);
pdc.LineTo(point);
CView::OnLButtonUp(nFlags, point);
}
运行后发现画完一根直线之后,就是鼠标左键up之后,必须要先单击一下鼠标左键直线才会出现,这是怎么回事? 展开
{
m_cpoint = point;
CView::OnLButtonDown(nFlags, point);
}
void CMFCStudyView::OnLButtonUp(UINT nFlags, CPoint point)
{
CClientDC pdc(this);
pdc.MoveTo(m_cpoint);
pdc.LineTo(point);
CView::OnLButtonUp(nFlags, point);
}
运行后发现画完一根直线之后,就是鼠标左键up之后,必须要先单击一下鼠标左键直线才会出现,这是怎么回事? 展开
1个回答
展开全部
你这本身就不是一个标准的做法
绘制必须在OnPaint或者OnDraw函数中进行, 否则刷新一下就没有了(如最小化)
你可以在OnLButtonDown, OnLButtonUp, OnMouseMove, 中记录状态
以及在OnTimer发送刷新消息, 在OnPaint或者OnDraw进行绘制
绘制必须在OnPaint或者OnDraw函数中进行, 否则刷新一下就没有了(如最小化)
你可以在OnLButtonDown, OnLButtonUp, OnMouseMove, 中记录状态
以及在OnTimer发送刷新消息, 在OnPaint或者OnDraw进行绘制
追问
视频上教的,但是我看视频上这么做,直接就可以产生直线
追答
这个涉及窗口重绘的问题
你这种做法是可以做出一条直接, 但正如我所说的, 最小化后再还原, 线就会没有了(因为重绘会调用OnPaint或者OnDraw), 你在OnLButtonUp中绘制的就会没有用了
做个测试,
在CView::OnLButtonUp(nFlags, point);的上面加一句话, this->Invalidate(); 你就会发现永远画不出东西来
给你个例子
void CWin32TestDlg::OnPaint()
{
CDialog::OnPaint();
CClientDC dc(this);
dc.MoveTo(m_pt1);
dc.LineTo(m_pt2);
}
void CWin32TestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
m_pt1 = point;
CDialog::OnLButtonDown(nFlags, point);
}
void CWin32TestDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
m_pt2 = point;
this->Invalidate();
CDialog::OnLButtonUp(nFlags, point);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询