`
paulfzm
  • 浏览: 888232 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

MFC 画线的几种方式

    博客分类:
  • vc++
MFC 
阅读更多

一.画鼠标按下到弹起之间的直线

1.创建  CView 的私有成员变量 CPoint m_ptOrigin;

2.在构造函数中初始化 m_ptOrigin = 0;

3.添加 LButtonDown(鼠标左键按下)消息函数并在鼠标左键按下的事件中记录m_ptOrigin点的坐标;

4.添加 LButtonUp(鼠标左键弹起)消息函数并在鼠标左键弹起的事件中进行画线

 

/*HDC hdc;
 hdc=::GetDC(m_hWnd);       //HDC方式创建
 MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL); //线的初始点
 LineTo(hdc,point.x,point.y);     //线的终点
 ::ReleaseDC(m_hWnd,hdc);*/      //释放dc
 /*
 CDC *pDC=GetDC();        //CDC方式创建
 pDC->MoveTo(m_ptOrigin);      
 pDC->LineTo(point);
 ReleaseDC(pDC);*/

 /*
 CClientDC dc(this);        //ClientDC 方式创建
 //CClientDC dc(GetParent());      
 dc.MoveTo(m_ptOrigin);       
 dc.LineTo(point);
 */
 
 /*
 //CWindowDC dc(this);       //CWindowDC 方式创建
 //CWindowDC dc(GetParent());//父窗口
 CWindowDC dc(GetDesktopWindow());
 dc.MoveTo(m_ptOrigin);
 dc.LineTo(point);
 */

 /*
 CPen pen(PS_SOLID,1,RGB(255,0,0));    //定义画笔
 CClientDC dc(this);        //画板
 CPen *pOldPen=dc.SelectObject(&pen);
 dc.MoveTo(m_ptOrigin);
 dc.LineTo(point);
 dc.SelectObject(pOldPen);*/

 /* 用笔刷画矩形
 CBrush brush(RGB(255,0,0));//笔刷颜色
 CClientDC dc(this);
 dc.FillRect(CRect(m_ptOrigin,point),&brush);
 */

 /*  使用资源图填充笔刷画矩形
 CBitmap bitmap;  
 bitmap.LoadBitmap(IDB_BITMAP1);//载入图片资源
 CBrush brush(&bitmap);
 CClientDC dc(this);
 dc.FillRect(CRect(m_ptOrigin,point),&brush);
 */

 /*  画透明背景的矩形框
 CClientDC dc(this);    
 //dc.Rectangle(CRect(m_ptOrigin,point));
 CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//透明笔刷
 CBrush *pOldBrush=dc.SelectObject(pBrush);
 dc.Rectangle(CRect(m_ptOrigin,point));
 dc.SelectObject(pOldBrush);
 */

 

 

二.连续画线

1.在CView 中创建私有成员变量 BOOL m_bDraw;

2.在构造函数中初始化为 FALSE 即 m_bDraw = FALSE;

3.添加MouseMove(鼠标移动)事件响应函数,并添加

 

 CClientDC dc(this);
 CPen pen(PS_SOLID,1,RGB(255,0,0));
 CPen *oldPen = dc.SelectObject(&pen);
 if(m_bDraw)
 {
    //dc.SetROP2(R2_BLACK);
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(m_ptOld);
    dc.MoveTo(m_ptOld);
    dc.LineTo(point);
    //m_ptOrigin=point;
    m_ptOld=point;
 }
 dc.SelectObject(oldPen);

 

画出来为扇形

 

 

 

 

 

 

分享到:
评论

相关推荐

    MFC画线程序

    总结来说,"MFC画线程序"涵盖了以下几个关键知识点: 1. MFC框架的基本使用,尤其是CView类的继承与重写。 2. 橡皮筋画线算法的实现,涉及OnLButtonDown(), OnMouseMove(), 和 OnLButtonUp()事件处理。 3. CFile和...

    基于MFC的OpenGL几种基本用法(画线、画圆)

    本教程将深入讲解如何在MFC的单文档应用中集成OpenGL,实现基本的画线、画圆和画折线功能,以及创建画笔和笔刷。 1. **MFC与OpenGL集成** MFC是微软提供的一个C++类库,用于简化Windows应用程序的开发。在MFC中...

    MFC 实现Bresenham画线算法

    在计算机图形学中,Bresenham画线算法是一种用于高效绘制从一个点到另一个点直线的算法。它特别适用于像素级别的硬件,如图形处理器,因为它减少了浮点运算,主要依赖于整数加法和位操作。MFC(Microsoft Foundation...

    VC MFC 画线图类的多个实例程序

    在标题提及的“VC MFC 画线图类的多个实例程序”中,我们可以预期包含以下几种类型的图表: 1. 直线图:最基础的图表类型,用于展示两个变量之间的关系。MFC中,可以通过CDC::MoveTo()和CDC::LineTo()函数绘制直线...

    MFC 用鼠标画曲线

    常用的GDI函数包括MoveToEx()用于设置当前绘图位置,LineTo()用于画线,以及PolyBezierTo()或PolyBezier()用于画贝塞尔曲线。 7. **贝塞尔曲线** 贝塞尔曲线是一种平滑的曲线,可以通过控制点来定义。在MFC中,...

    MFC透明窗体画不透明的线

    以上是解决MFC透明窗体上画线不透明的一些常见方法。实际应用中,你需要根据项目需求和性能考虑选择合适的方法。在调试过程中,确保正确处理WM_NCPAINT消息,因为这涉及到非客户区的绘制,也会影响透明效果。 在...

    MFC画平滑直线

    ### MFC画平滑直线——基于DDA算法的改进 #### 概述 在计算机图形学领域中,绘制平滑的线条是一项基本且重要的技术。本文档主要介绍如何利用MFC(Microsoft Foundation Classes)框架来实现平滑直线的绘制,并在此...

    MFC图形学画线算法,可鼠标拖动,键盘按键平移

    本项目“MFC图形学画线算法,可鼠标拖动,键盘按键平移”聚焦于实现这一功能,利用MFC(Microsoft Foundation Classes)库,构建了一个交互式的图形界面,用户可以通过鼠标进行画线操作,并通过键盘控制线段的平移。...

    基于MFC和ChartCtrl的K线图.rar

    在MFC环境中,要使用ChartCtrl控件绘制K线图,你需要完成以下几个步骤: 1. **添加ChartCtrl控件**:首先,你需要在你的MFC工程中引入ChartCtrl。这通常通过资源编辑器完成,将控件添加到对话框或者窗口中,并为其...

    MFC画板功能

    MFC提供了一种结构化的框架,简化了Windows应用程序的开发,尤其是涉及到用户交互的部分。在这个特定的例子中,我们关注的是一个专门设计用于绘图操作的画板应用。 画板功能通常包括基本的绘图工具,如画笔、橡皮擦...

    MFC画直线C++源代码

    在C++编程环境中,Microsoft Foundation Class (MFC) 库为开发者提供了一种方便的方式来创建Windows应用程序。MFC是微软为了简化Windows API而设计的一套类库,它封装了Win32 API,使得开发人员可以更高效地编写图形...

    MFC bezier曲线

    在计算机图形学中,Bezier曲线是一种非常重要的数学工具,它被广泛用于绘制平滑的曲线,如在2D和3D图形、动画、CAD系统以及游戏开发中。本实验是基于C++6.0编程环境,利用Microsoft Foundation Classes (MFC) 类库...

    MFC自绘时间仪表盘

    MFC自绘时间仪表盘是利用MFC库的功能,通过编程方式绘制出一个模拟时间显示的仪表盘,通常用于可视化展示时间信息或者监控系统状态。这个程序的核心在于自定义控件的绘制,它允许开发者根据需求定制界面元素,实现更...

    hermite曲线,MFC实现

    在MFC中实现Hermite曲线,我们需要了解以下几个关键概念: 1. **Hermite插值公式**:Hermite曲线的数学表示通常由四个控制点P0、P1、T0和T1确定,其中P0和P1是曲线的起点和终点,而T0和T1是它们的切线向量。Hermite...

    VC画线的几种方法

    ### VC画线的几种方法 在Visual C++ (VC) 的开发过程中,画线是一项基本且常见的需求。本文将详细介绍几种在VC环境下实现画线功能的方法,并解释它们之间的区别及适用场景。 #### 1. 使用HDC(设备描述表) 在VC...

    vs2019 MFC 画波形图的简单demo

    它封装了Windows API,提供了一种面向对象的方式来编写Windows程序,包括窗口、控件、对话框等。 2. **VS2019集成开发环境**: Visual Studio 2019是微软的旗舰级IDE,支持多种编程语言,包括C++。它提供了丰富的...

    用MFC画二维坐标轴XY及原点test1.rar

    MFC是Microsoft为Windows应用程序开发提供的一种C++类库,它简化了Windows API的使用,使开发者能够更高效地构建图形用户界面(GUI)应用。 首先,让我们了解MFC中的绘图基础。MFC提供了CDC类,它代表设备上下文...

    计算机图形学(MFC)-三维图形变换(立方体)

    在这个项目中,我们将通过键盘按键来实现以下几种关键的变换: 1. 移动(Translation):通过改变立方体的坐标,使其在三维空间中平移。这是最基础的变换,可以将物体沿x、y、z轴任意方向移动。 2. 伸缩(Scaling...

    MFC实现万花筒效果画笔画出任意线条等

    我们将主要关注以下几个关键知识点: 1. **MFC 基础**:MFC 是微软为Windows平台开发的应用程序框架,它基于面向对象编程思想,提供了一系列的类,如CWinApp、CFrameWnd、CView等,用于构建窗口、菜单、对话框等...

    Hermite,Bezier,三次B样条曲线的MFC实现

    本项目聚焦于三种常见的曲线表示方法:Hermite曲线、Bezier曲线以及三次B样条曲线,并通过Microsoft Foundation Classes (MFC)进行实现。MFC是微软提供的一种C++类库,用于构建Windows应用程序,它简化了Windows API...

Global site tag (gtag.js) - Google Analytics