MFC画线的问题

smilenot 2011-10-28 04:58:46
1, 新建MFC SDI工程Test
2, 在视图类CTestView添加成员变量 CDC *pDc
3, 响应OnLButtonDown消息

void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
pDc = GetDC();
pDc->MoveTo(point);
}

4, 响应OnLButtonUp消息

void CTestView::OnLButtonUp(UINT nFlags, CPoint point)
{
pDc->LineTo(point);

}

然后我运行程序,在A点按下鼠标不放,拖动到B点放开鼠标,为什么没有画出线出来?
如果我将pDc->LineTo(point)移动到OnLButtonDown函数里面是可以画线的
我跟踪的了程序,发现OnLButtonUp函数被执行了,里面的pDc->LineTo(point)这个代码也被执行到了,但就是没有线条出来

还有我想知道为什么MFC中总是有这些莫名其妙的,让我无法解释的,稀奇古怪的错误出现?
...全文
218 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangyuer_xx 2011-11-21
  • 打赏
  • 举报
回复
好像问题解决了,学习了
向立天 2011-11-21
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
Young0910 2011-11-21
  • 打赏
  • 举报
回复
4,5,6的方法都可以解决问题。其实这个问题在于,在响应onLbuttonup时,引起了界面重绘,以前的绘图都被刷新,消失了。你可以调试一下,在OnDraw里打一个断点,然后使其响应OnLbuttonup消息,应该会执行到断点。
请叫我涛哥0-0 2011-10-28
  • 打赏
  • 举报
回复

void CMoveToView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

m_sPoint = point;

CView::OnLButtonDown(nFlags, point);
}

void CMoveToView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_pDc = GetDC();
m_pDc->MoveTo(m_sPoint);
m_pDc->LineTo(point);
ReleaseDC(m_pDc);
CView::OnLButtonUp(nFlags, point);
}


你的有问题,这样就OK了,看看。
dahaiI0 2011-10-28
  • 打赏
  • 举报
回复

void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_ptStart = point;
}


void CTestView::OnLButtonUp(UINT nFlags, CPoint point)
{
CClientDC dc(this);
dc.MoveTo(m_ptStart);
dc.LineTo(point);

}


yuucyf 2011-10-28
  • 打赏
  • 举报
回复

void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
pDc = GetDC();
m_ptStart = point;
}


void CTestView::OnLButtonUp(UINT nFlags, CPoint point)
{
pDc->MoveTo(m_ptStart);
pDc->LineTo(point);

}


这样就可以了,但是画图要到画图的消息函数里进行.
而且用GetDC完后要进行::ReleaseDC,否则会内存泄露,还有要判断指针pDC是否为空...
bdshr 2011-10-28
  • 打赏
  • 举报
回复
画图的代码要写到OnDraw函数里.

在鼠标消息响应函数中保存需要的点,然后在OnDraw函数中绘制.
mayudong1 2011-10-28
  • 打赏
  • 举报
回复
pDc->LineTo(point);
这个pDC是从哪来的呢?
yeah2000 2011-10-28
  • 打赏
  • 举报
回复
画图要到画图的消息函数里进行

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧