VC编程之VC中利用MFC设计绘图程序初步
小标 2019-03-28 来源 : 阅读 1572 评论 0

摘要:本文主要向大家介绍了VC编程之VC中利用MFC设计绘图程序初步,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程之VC中利用MFC设计绘图程序初步,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

VC编程之VC中利用MFC设计绘图程序初步

 

       首先我们说下通过鼠标的移动来绘制直线。

  这里要捕获到鼠标的两个消息:WM_LBUTTONDOWN, WM_LBUTTONUP。响应WM_LBUTTONDOWN消息记录直线的起始点,响应WM_LBUTTONUP消息记录直线的终点并绘制直线。

  好了,我们看看怎么响应。
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) 
{
 //MessageBox("Left Button Clicks DrawView");
 m_ptOrigin = point ; //这里先定义了一个内部变量保存直线的起始点
 CView::OnLButtonDown(nFlags, point);
}

  下面看看响应WM_LBUTTONUP消息记录直线的终点并绘制直线。
//方法一
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) 
{
 HDC hdc;
 hdc = ::GetDC(m_hWnd); //调用全局函数
 MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,0);
 LineTo(hdc,point.x,point.y);
 ::ReleaseDC(m_hWnd,hdc);
 CView::OnLButtonUp(nFlags, point);
}
//方法二
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) 
{
 CDC *pDC = GetDC();
 pDC->MoveTo(m_ptOrigin);
 pDC->LineTo(point);
 ReleaseDC(pDC);
}
//方法三
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) 
{
 CClientDC dc(this) ; //CClientDC对象构造的时候就调用了GetDC,析构的时候调用

 ReleaseDC ,只能访问客户区
 CClientDC dc(GetParent());
 dc.MoveTo(m_ptOrigin);
 dc.LineTo(point);
}
//方法四
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) 
{
 CWindowDC dc(this) ; //CWindowDC可以访问客户区和非客户区
 dc.MoveTo(m_ptOrigin);
 dc.LineTo(point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) 
{
 CWindowDC dc(GetDesktopWindow()) ; //现在可以访问桌面
 dc.MoveTo(m_ptOrigin);
 dc.LineTo(point);
}

  连续线绘图:

  思路:鼠标移动的信号被捕捉到,然后随时响应该信号,绘制图线。

  这里要设置一个BOOL变量 m_bDraw 来判断是否鼠标左键按下了。
//画连续的线条
void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
 if ( m_bDraw )
 {
  CClientDC dc(this) ;
  dc.MoveTo(m_ptOrigin); //移动到原来的点
  dc.LineTo(point); //绘制直线 
  m_ptOrigin = point ; //将现在的点赋值给原来的坐标,以便下次调用
 }
 CView::OnMouseMove(nFlags, point);
}

//改变画笔的颜色
void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
 if ( m_bDraw )
 {
  CClientDC dc(this) ;
  CPen pen( PS_SOLID , 1 , RGB(255,128,128) );
  CPen *pOldPen = dc.SelectObject(&pen);
  dc.MoveTo(m_ptOrigin);
  dc.LineTo(point);
  m_ptOrigin = point ;
  dc.SelectObject(pOldPen);
 }
 CView::OnMouseMove(nFlags, point);
}

//画扇型
void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
 if ( m_bDraw )
 {
  CClientDC dc(this) ;
  CPen pen( PS_SOLID , 1 , RGB(255,128,128) );
  CPen *pOldPen = dc.SelectObject(&pen);
  dc.MoveTo(m_ptOrigin);
  dc.LineTo(m_ptOld);
  dc.MoveTo(m_ptOrigin);
  dc.LineTo(point);
  m_ptOld = point ;
  dc.SelectObject(pOldPen);
 }
 CView::OnMouseMove(nFlags, point);
}
//画带边线的扇型
void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
 if ( m_bDraw )
 {
  CClientDC dc(this) ;
  CPen pen( PS_SOLID , 1 , RGB(255,128,128) );
  CPen *pOldPen = dc.SelectObject(&pen);
  dc.MoveTo(m_ptOrigin);
  dc.LineTo(m_ptOld);
  dc.MoveTo(m_ptOrigin);
  dc.LineTo(point);
  dc.MoveTo(m_ptOld);
  dc.LineTo(point);
  m_ptOld = point ;
  dc.SelectObject(pOldPen);
 }
 CView::OnMouseMove(nFlags, point);
}

//看看绘图的模式设置方法
void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 

 if ( m_bDraw )
 {
  CClientDC dc(this) ;
  dc.SetROP2(R2_BLACK); //绘图的模式设置,始终绘制黑色图形
  CPen pen( PS_SOLID , 1 , RGB(255,128,128) );
  CPen *pOldPen = dc.SelectObject(&pen);
  dc.MoveTo(m_ptOrigin);
  dc.LineTo(m_ptOld);
  dc.MoveTo(m_ptOrigin);
  dc.LineTo(point);
  dc.MoveTo(m_ptOld);
  dc.LineTo(point);
  m_ptOld = point ;
  dc.SelectObject(pOldPen);
 }
 CView::OnMouseMove(nFlags, point);
}

  到此,我们知道了一般地绘图方法了。    

以上就介绍了VC/MFC的学习,希望对VC/MFC有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言VC/MFC频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved