SelectObject选择画笔问题

嘻嘻AND嘿嘿 2013-07-28 11:46:16
我看孙鑫的视频教程作图的时候遇到这个函数,看了msdn不大明白。
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_ptBegin=point;//m_ptBegin是类的成员,类型为CPoint

CView::OnLButtonDown(nFlags, point);
}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CPen pen(PS_SOLID, 1, RGB(255, 0, 0));//红色
CClientDC dc(this);
CPen* pOldPen=dc.SelectObject(&pen);//保存原始的CPen,即黑色的CPen
dc.MoveTo(m_ptBegin);
dc.LineTo(point);
dc.SelectObject(pOldPen);//恢复原始的CPen
}

SelectObject返回值为先前的画笔颜色,刚开始画笔为黑色,执行完CPen pen之后画笔为红色,然后执行SelectObject后画笔为黑色,然后作图,那做出来的图应该是黑色的啊?然后执行SelectObject,就是返回黑色之前的颜色?
还有把CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
CClientDC dc(this);这两句代码调换以后,运行的程序会变得非常慢,画一个直线得等半分钟,这是什么原因啊?
...全文
166 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hdg3707 2013-07-28
  • 打赏
  • 举报
回复
对,是这样的
嘻嘻AND嘿嘿 2013-07-28
  • 打赏
  • 举报
回复
引用 1 楼 hdg3707 的回复:
CPen pen(PS_SOLID, 1, RGB(255, 0, 0));//红色 CClientDC dc(this); CPen* pOldPen=dc.SelectObject(&pen);//保存原始的CPen,即黑色的CPen 这第三句已把画笔选为红色画笔了,因此下面的画线都是红色的,而不是黑色的,pOldPen是保存原先的画笔,并不是代表当前选择的画笔 至于调换那两句造成画线慢,应该不会这样,你是不是有什么资源用完后没释放,如果是这样,你没调换这两句也会出这种情况,你可以试试出这情况时都是如何操作的,都操作了多长时间
SelectObject的意思就是把当前的画笔选为红色,并且返回原先的画笔吗?
hdg3707 2013-07-28
  • 打赏
  • 举报
回复
CPen pen(PS_SOLID, 1, RGB(255, 0, 0));//红色 CClientDC dc(this); CPen* pOldPen=dc.SelectObject(&pen);//保存原始的CPen,即黑色的CPen 这第三句已把画笔选为红色画笔了,因此下面的画线都是红色的,而不是黑色的,pOldPen是保存原先的画笔,并不是代表当前选择的画笔 至于调换那两句造成画线慢,应该不会这样,你是不是有什么资源用完后没释放,如果是这样,你没调换这两句也会出这种情况,你可以试试出这情况时都是如何操作的,都操作了多长时间
嘻嘻AND嘿嘿 2013-07-28
  • 打赏
  • 举报
回复
引用 4 楼 oYinGui1 的回复:
你这是消息响应,它虽然画完以后换回来了,但是你再次画的时候,它又重新执行消息响应函数了,所以它又选择红色了。
大哥 我问的不是这个问题
嘻嘻AND嘿嘿 2013-07-28
  • 打赏
  • 举报
回复
引用 3 楼 hdg3707 的回复:
对,是这样的
Okay Thank You
Morrisss_ 2013-07-28
  • 打赏
  • 举报
回复
你这是消息响应,它虽然画完以后换回来了,但是你再次画的时候,它又重新执行消息响应函数了,所以它又选择红色了。

19,472

社区成员

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

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