`
paulfzm
  • 浏览: 873088 次
  • 性别: 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的OpenGL几种基本用法(画线、画圆)

    几种基本的opengl算法,画图、画圆、画折线,建立画笔、笔刷等

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

    VC MFC 画线图类的多个实例程序,包括常用的几种花线图的类,以及demo,。。。。。。

    C++MFC教程

    Visual C++MFC入门教程 目录 +-- 第一章 VC入门 |------ 1.1 如何学好VC |------ 1.2 理解Windows消息机制 |------ 1.3 利用Visual C++/MFC开发Windows程序的优势 |------ 1.4 利用MFC进行开发的通用方法介绍 |----...

    MFC解决窗口保存及重绘闪烁问题的一种比较好的方案 v1.0.5

    直接运行demo里面的程序,在窗口上任意拖拉鼠标画线,然后点击菜单栏的几个示范菜单项,然后移动窗口、 改变窗口大小、最大最小化窗口、用其它窗口覆盖此窗口、鼠标放到任务栏。。。 以上种种操作观察窗口内的...

    MFC解决窗口保存及重绘闪烁问题的一种比较好的方案 v1.0.4

    直接运行demo里面的程序,在窗口上任意拖拉鼠标画线,然后点击菜单栏的几个示范菜单项,然后移动窗口、 改变窗口大小、最大最小化窗口、用其它窗口覆盖此窗口、鼠标放到任务栏。。。 以上种种操作观察窗口内的...

    MFC解决窗口保存及重绘闪烁问题的一种比较好的方案 框架

    直接运行里面的程序,在窗口上任意拖拉鼠标画线,然后点击菜单栏的几个示范菜单项,然后移动窗口、 改变窗口大小、最大最小化窗口、用其它窗口覆盖此窗口、鼠标放到任务栏。。。 以上种种操作观察窗口内的图像变化。...

    MFC解决窗口保存及重绘闪烁问题的一种比较好的方案 SolveFlashingAndRedraw框架 v1.0.2

    直接运行demo里面的程序,在窗口上任意拖拉鼠标画线,然后点击菜单栏的几个示范菜单项,然后移动窗口、 改变窗口大小、最大最小化窗口、用其它窗口覆盖此窗口、鼠标放到任务栏。。。 以上种种操作观察窗口内的...

    基于MFC单文档的绘图程序编写

    ②像“橡皮筋”那样画几种图形:直线、矩形、圆(圆心,半径)、圆(点,点)、圆弧(三个点确定)、椭圆 ③修改线型、线宽、线的颜色 ④清屏 ⑤窗口缩放、图形缩放 ⑥撤销与重做 2.说明: (1)使用的是vs2022编程 ...

    MFC解决窗口保存及重绘闪烁问题的一种比较好的方案 SolveFlashingAndRedraw框架 v1.0.3

    直接运行demo里面的程序,在窗口上任意拖拉鼠标画线,然后点击菜单栏的几个示范菜单项,然后移动窗口、 改变窗口大小、最大最小化窗口、用其它窗口覆盖此窗口、鼠标放到任务栏。。。 以上种种操作观察窗口内的...

    VC与Labview、Matlab编程论文资料[2].rar

    VC_中连接Oracle数据库的几种方法.pdf VC_串口通信中多线程技术的应用研究.pdf VC_和COM的预测控制算法的仿真研究.pdf VC_和Excel对象接口的研究与应用.pdf VC_和Matlab混合编程的语音识别研究.pdf VC_实现Excel操作...

    VC与Labview、Matlab编程论文资料

    VC_中连接Oracle数据库的几种方法.pdf VC_串口通信中多线程技术的应用研究.pdf VC_和COM的预测控制算法的仿真研究.pdf VC_和Excel对象接口的研究与应用.pdf VC_和Matlab混合编程的语音识别研究.pdf VC_实现Excel操作...

    VC与Labview、Matlab编程论文资料[4].rar

    VC_中连接Oracle数据库的几种方法.pdf VC_串口通信中多线程技术的应用研究.pdf VC_和COM的预测控制算法的仿真研究.pdf VC_和Excel对象接口的研究与应用.pdf VC_和Matlab混合编程的语音识别研究.pdf VC_实现Excel操作...

    Visual C++2010开发权威指南(共三部分).part1.rar

    5.23.1 使用MFC方法定制控件必备的几个基本概念 259 5.23.2 定制自定义控件的3种常见方法 260 5.24 Visual C++ 2010 SysLink控件简介与开发 260 5.25 Visual C++ 2010 Split Button控件简介与开发 261 5.26 Visual ...

    vc++ 应用源码包_1

    CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...

    vc++ 应用源码包_2

    CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...

    vc++ 开发实例源码包

    CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...

    vc++ 应用源码包_6

    CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...

    vc++ 应用源码包_5

    CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...

    vc++ 应用源码包_3

    CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...

Global site tag (gtag.js) - Google Analytics