QQ登录

只需一步,快速开始

107上位机VC MFC设备上下文本CDC实现画图程序

[ 复制链接 ]

107上位机VC MFC设备上下文本CDC实现画图程序

107上位机VC MFC设备上下文本CDC实现画图程序

107上位机VC MFC设备上下文本CDC实现画图程序
功能展示
窗口的设备上下文本类CDC是我们编程上位机程序,极为常用的类,我们当前例程通过编写简单的绘图程序,学习与熟悉CDC相关的绘图函数,效果如图;
要点提示
任何的窗口,都有设备上下文供我们在窗口上绘制图文,我们当前例程通过客服区上下文实现绘图功能CClientDC dc(this);画点可用函数SetPixel()画线可用MoveTo(), LineTo()画圆椭圆可用Ellipse(),画矩形可用Rectangle();  通过鼠标的点击,放开,移动,三个消息就可以快速的绘制图形,具体实现我们看例程代码
实现功能
1.新建基于单文档的应用程序
2.在视窗类中添加变量private: BOOL m_bFreeDraw; BOOLm_bDrawPoint; BOOL m_bDrawCircle; BOOL m_bDrawRect; BOOL m_bDrawLine; CPointm_StartPt; CPoint m_EndPt;
用于标识当前绘制何种图形及起点坐标点,终点坐标点;
并在构造函数中初始化  m_bFreeDraw =FALSE;  m_bDrawPoint= FALSE;  m_bDrawCircle= FALSE; m_bDrawRect= FALSE;m_bDrawLine= FALSE;
3.在菜单中添加自由绘制,点,线,圆,矩形菜单项,用于选择绘制何种图形,并实现响应函数及刷新函数,如我们当前例程
  1. void CGkbc8View::OnFreedraw()
  2. {
  3.          m_bFreeDraw = TRUE;
  4.          m_bDrawPoint= FALSE;
  5.          m_bDrawCircle= FALSE;
  6.          m_bDrawRect= FALSE;
  7.          m_bDrawLine= FALSE;
  8. }

  9. void CGkbc8View::OnUpdateFreedraw(CCmdUI* pCmdUI)
  10. {
  11.         pCmdUI->SetCheck(m_bFreeDraw);
  12. }
复制代码
  1. void CGkbc8View::OnLint()
  2. {
  3.          m_bFreeDraw = FALSE;
  4.          m_bDrawPoint= FALSE;
  5.          m_bDrawCircle= FALSE;
  6.          m_bDrawRect= FALSE;
  7.          m_bDrawLine= TRUE;
  8. }

  9. void CGkbc8View::OnUpdateLint(CCmdUI* pCmdUI)
  10. {
  11.         pCmdUI->SetCheck(m_bDrawLine);
  12. }

  13. void CGkbc8View::OnPoint()
  14. {
  15.          m_bFreeDraw = FALSE;
  16.          m_bDrawPoint= TRUE;
  17.          m_bDrawCircle= FALSE;
  18.          m_bDrawRect= FALSE;
  19.          m_bDrawLine= FALSE;
  20. }

  21. void CGkbc8View::OnUpdatePoint(CCmdUI* pCmdUI)
  22. {
  23.         pCmdUI->SetCheck(m_bDrawPoint);
  24. }

  25. void CGkbc8View::OnRect()
  26. {
  27.          m_bFreeDraw = FALSE;
  28.          m_bDrawPoint= FALSE;
  29.          m_bDrawCircle= FALSE;
  30.          m_bDrawRect= TRUE;
  31.          m_bDrawLine= FALSE;
  32. }
复制代码
  1. void CGkbc8View::OnUpdateRect(CCmdUI* pCmdUI)
  2. {
  3.         pCmdUI->SetCheck(m_bDrawRect);
  4. }
  5. void CGkbc8View::OnCircle()
  6. {
  7.          m_bFreeDraw = FALSE;
  8.          m_bDrawPoint= FALSE;
  9.          m_bDrawCircle= TRUE;
  10.          m_bDrawRect= FALSE;
  11.          m_bDrawLine= FALSE;        
  12. }

  13. void CGkbc8View::OnUpdateCircle(CCmdUI* pCmdUI)
  14. {
  15.         pCmdUI->SetCheck(m_bDrawCircle);
  16. }
  17. <div style="text-align: center;"><span style="font-size: large; line-height: 1.5;">4.添加鼠标点击,放开,移动消息,实现各种图形的绘制</span></div>
  18. void CGkbc8View::OnLButtonDown(UINT nFlags, CPoint point)
  19. {
  20.         if(m_bFreeDraw)//任意绘制
  21.         {
  22.                 m_StartPt = point;
  23.         }
  24.         if(m_bDrawPoint)//绘制点
  25.         {
  26.                 CClientDC dc(this);
  27.                 dc.SetPixel(point,RGB(255,0,0));//不明显,可以加下行代码
  28.                 dc.Ellipse(point.x-2,point.y-2,point.x+2,point.y+2);
  29.         }
  30.         if(m_bDrawPoint||m_bDrawRect||m_bDrawCircle)
  31.         {
  32.                 m_StartPt = point;
  33.                 m_EndPt  = point;
  34.                 SetCapture();
  35.         }
  36.   
复制代码
  1. if(m_bDrawLine)//绘制线
  2.         {
  3.                 m_StartPt = point;
  4.                 CClientDC dc(this);
  5.                 dc.MoveTo(m_StartPt);
  6.                 dc.LineTo(m_EndPt);
  7.                         if(m_StartPt != m_EndPt)
  8.                 m_EndPt  = m_StartPt;
  9.         }
  10.         CView::OnLButtonDown(nFlags, point);
  11. }
  12. void CGkbc8View::OnLButtonUp(UINT nFlags, CPoint point)
  13. {
  14.         ReleaseCapture();
  15.         CView::OnLButtonUp(nFlags, point);
  16. }
  17. void CGkbc8View::OnMouseMove(UINT nFlags, CPoint point)
  18. {
  19.         CClientDC dc(this);
  20.         if(m_bFreeDraw&&(nFlags&&MK_LBUTTON))//自由绘制
  21.         {
  22.                 dc.MoveTo(m_StartPt);
  23.                 dc.LineTo(point);
  24.                 m_StartPt = point;
  25.         }
  26.         if(m_bDrawLine&&(nFlags&&MK_LBUTTON))
  27.         {
  28.         }
  29.         if(m_bDrawRect&&(nFlags&&MK_LBUTTON))//绘制矩形
  30.         {
  31.                 CGdiObject*object = dc.SelectStockObject(NULL_BRUSH);
  32.                 int mdoe = dc.GetROP2();
  33.                 dc.SetROP2(R2_NOTCOPYPEN);
  34.                 dc.Rectangle(m_EndPt.x,m_EndPt.y,m_StartPt.x,m_StartPt.y);//擦除旧矩形
  35.                 dc.SetROP2(mdoe);
  36.                 dc.Rectangle(m_StartPt.x,m_StartPt.y,point.x,point.y);//绘制新矩形
  37.                 dc.SelectObject(object);
  38.                 m_EndPt = point;
  39.         }
  40.         
复制代码
  1. if(m_bDrawCircle&&(nFlags&&MK_LBUTTON))
  2.         {
  3.                 CGdiObject*object = dc.SelectStockObject(NULL_BRUSH);
  4.                 int mdoe = dc.GetROP2();
  5.                 dc.SetROP2(R2_NOTCOPYPEN);
  6.                 dc.Ellipse(m_EndPt.x,m_EndPt.y,m_StartPt.x,m_StartPt.y);
  7.                 dc.SetROP2(mdoe);
  8.                 dc.Ellipse(m_StartPt.x,m_StartPt.y,point.x,point.y);
  9.                 dc.SelectObject(object);
  10.                 m_EndPt = point;
  11.         }
  12.         CView::OnMouseMove(nFlags, point);
  13. }
  14. <div style="text-align: center;"><span style="font-size: large; line-height: 1.5;">我们来演示一步步实现功能的过程</span></div>
复制代码
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:107.上位机VC MFC设备上下文本CDC实现画图程序.rar 
文件大小:143.43 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索