关于使用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之后,必须要先单击一下鼠标左键直线才会出现,这是怎么回事?
展开
 我来答
hzzlyz_
2013-07-06
知道答主
回答量:6
采纳率:0%
帮助的人:7.5万
展开全部
你这本身就不是一个标准的做法
绘制必须在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);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式