绘制任意线条:

1、创建基于单文档工程:Draw

CDrawView类中添加成员变量:

CPoint m_ptOrigin;

BOOL m_bDraw;

2、CDrawView()中初始化:

m_ptOrigin = point;

m_bDraw = false;

3、添加消息响应函数:

WM_LBUTTONDOWN    WM_LBUTTONUP  WM_MOUSEMOVE

4、左键按下时:

m_ptOrigin = point;

m_bDraw = true;

5、左键抬起:

m_bDraw = false;

6、鼠标移动时:

//画连续线条

CClientDC dc(this);

if(m_bDraw)

{

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

m_ptOrigin = point;

}

//画扇形线条

CClientDC dc(this);

if(m_bDraw)

{

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

}

//画带外包线的扇形线条

析:画带外包线的扇形线条,不光记录初始位置,还要记录鼠标移动上一位置。

添加成员变量:

CPoint m_ptOld;

在鼠标左键按下时初始化:

m_ptOld = point;

在鼠标移动时进行改变:

CClientDC dc(this);

if(m_bDraw)

{

dc.MoveTo(m_ptOrigin);

dc.LineTo(m_ptOld);

dc.MoveTo(m_ptOld);

dc.LineTo(point);

m_ptOld = point;

}

画矩形:

画无边框的矩形

方法说明:利用FillRect函数填充矩形。填充内容为画刷的内容,即画刷对象的指针。

CBrush brush(RGB(5,255,255));

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);

画有边框的矩形

方法说明:利用Rectangle方法来画矩形。其中CBrush与CPen类分别负责矩形内部和矩形边框的属性

//画中心为白色的矩形

CClientDC dc(this);

dc.Rectangle(CRect(m_ptOrigin,point));

//画中心为透明的矩形

CClientDC dc(this);

CBrush *pBrush=CBrush::FromHandle((HBRUSH)

GetStockObject(NULL_BRUSH));

CBrush *pOldBrush=dc.SelectObject(pBrush);

dc.Rectangle(CRect(m_ptOrigin,point));

pOldBrush=pBrush;

//画中心为透明边为任意颜色的矩形

CClientDC dc(this);

CPen pen(PS_SOLID,1,RGB(234,23,53));

CPen *pOldPen=dc.SelectObject(&pen);

CBrush *pBrush=CBrush::FromHandle((HBRUSH)

GetStockObject(NULL_BRUSH))

CBrush *pOldBrush=dc.SelectObject(pBrush);

dc.Rectangle(CRect(m_ptOrigin,point));

dc.SelectObject(pOldPen);

dc.SelectObject(pOldBrush);

使用画笔、画刷

在OnLButtonUp函数中:

/

CPen pen(PS_SOLID,1,RGB(234,23,53));

//定义一个CPen类对象,并利用RGB宏改变其颜色

CClientDC dc(this);

CPen *pOldPen=dc.SelectObject(&pen); //将其选入设备表

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

dc.SelectObject(pOldPen);

/

CBrush brush(RGB(0,255,0));

CClientDC dc(this);

CRect rect(m_ptOrigin,point);

dc.FillRect(&rect,&brush);

/

使用位图创建画刷:

插入->资源->位图->引入,可以引入位图,初始一般命名为:IDB_BITMAP1

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1);

CBrush brush(&bitmap);

CClientDC dc(this);

CRect rect(m_ptOrigin,point);

dc.FillRect(&rect,&brush);

/

CBrush *brush;

brush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

CClientDC dc(this);

CBrush *pOldBrush =dc.SelectObject(brush) ;

dc.Rectangle(CRect(m_ptOrigin,point));

dc.SelectObject(pOldBrush) ;

注:

常用的绘图设备类对象的创建和将其引入到设备环境中的方法

在选择绘图设备类对象(GDI对象)进行绘图时,一般可按下列步骤进行:

(1)定义一个GDI对象,然后调用相应的函数(如CreatePen、CreateSolidBrush等)创建此GDI对象。

(2)将已构造出的GDI对象利用设备环境类对象的成员函数SelectObject选入到当前环境中,并同时将原来的GDI对象保存起

来。

(3)绘图结束后,恢复当前设备环境中原来的GDI对象。

注意:在Windows系统中包含了一些库存的GDI对象,在第(3)步中可直接利用设备环境类(CDC)的成员函数

SelectStockObject将一个Windows库存的GDI对象选入,系统可自动将原来选入的GDI对象从设备环境中分离出来。

转载于:https://www.cnblogs.com/lxshanye/archive/2013/05/20/3088591.html

MFC画图(画线、画矩形、画刷画笔的使用)相关推荐

  1. 【玩转嵌入式屏幕显示】(三)TFT-LCD屏幕打点 + 画线 + 画矩形 + 画圆Bresenham算法实现(基于打点函数,算法可移植到任何屏幕的驱动程序之上)

    0. 引言 TFT-LCD屏幕的画直线.画斜线.画矩形.画圆等算法都是基于打点函数的,所以此程序可以移植到任何屏幕的基本驱动程序之上. 1. 打点函数 -- 底层函数(移植需修改) 打点函数其实就是屏 ...

  2. Unreal Engine 4 画线DrawLines 画轨道

    Unreal Engine 4 画线DrawLines 画轨道 前言 环境配置 实现步骤 清除线,重新画 代码调试 前言 刚接触UE4没几天,从头开始实现了画轨道的功能,自己记录一下实现过程以及遇到的 ...

  3. android自动画线,android中实现自定义画线,画圆,画矩形,使用自定义字体

    首先,新建xml文件,resource type为drawble,root element为shape 一.自定义画线 android:shape="line" > andr ...

  4. 基于HTML5 画布功能canvas的绘画板:画线、画圆、画矩形、橡皮、改变线条

    写在前面 试看链接: https://yyywwwqqq.coding.me/draw 项目下载地址:https://coding.net/u/yyywwwqqq/p/draw 希望您能点个fork ...

  5. Android在图片画线(放大,旋转,平移后可继续正确画线,限制画线区域)

    最近因为公司业务需求,需要给学校的老师们做一个在手机和电脑上同步进行图片上画线批注的效果.刚开始在github上看了几天, 但跟我们要求吻合的开源项目几乎没有.最后只能自己来实现一个相应的功能,经过一 ...

  6. C#编写画直线,简单画线,鼠标交互画线,画一条线

    从最简单C#窗体画线开始,直接打开VS,选择C#的窗体应用程序,然后把代码放进去,事件绑定就OK,下面是详细步骤. using System; using System.Collections.Gen ...

  7. Android动态画线 坐标画线动画

    效果图如下 根据相对于图片本身的坐标xy数组 基于view的左上角为原点 在图片上动态画线 //参考数据类型//pointList [PointEntity(pointX=1, pointY=1), ...

  8. MFC 画线,画刷,文本

    CPaintDC dc(this);//只能在OnPaint函数中使用 CClientDC dc(this);//在哪里使用都可以 画直线 获得设备描述表->MoveTo -->LineT ...

  9. 小学计算机画线反思,画线段图解决问题教学反思

    画线段图解决问题教学反思 作为一位刚到岗的人民教师,我们的工作之一就是课堂教学,写教学反思能总结教学过程中的很多讲课技巧,教学反思我们应该怎么写呢?以下是小编整理的画线段图解决问题教学反思,欢迎阅读与 ...

  10. cad的lisp画线_CAD画缓和曲线lisp程序

    注: 本程序, 缓和曲线段拟合长度为 0.4m , 如需更改拟合长度, 将程序的第 8 行 (repeat(FIX(/Ls0.4)) 及 9 行 (setql(+l(/Ls(FIX(/Ls0.4))) ...

最新文章

  1. 平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。
  2. ASP中冒号: 和 下划线_ 的作用
  3. python字符串格式化方法 format函数的使用
  4. 不可靠的信号、可靠信号
  5. 前端学习(2783):封装myrequest并绑定到全局
  6. 要闻君说:微软拿下五角大楼超大云服务订单!恒大玩儿起了充电桩and新能源汽车?苹果公司要放弃自动驾驶业务?...
  7. NASNET-【论文理解】
  8. python爬虫笔记_python简单爬虫笔记
  9. 【SpringBoot】24、SpringBoot中实现数据字典
  10. python爬虫监控平台_scrapy-monitor,实现爬虫可视化,监控实时状态
  11. OctetString 转String
  12. 29 使用内核里的W25Q32设备驱动
  13. 电阻(6)限流、分压、采样、频率特性篇
  14. 在for循环中运行setTimeout的三种情况
  15. 如何做好项目沟通管理的工作
  16. Java--对象的比较2(类比)
  17. No adapter attached; skipping layout 原因、解决办法
  18. 人工智能时代,你的数学基础够用吗?
  19. 世界各个国家坐标位置和中国各个省份坐标位置json格式
  20. JarvisOJ-握手包

热门文章

  1. 当append遇到make遇到的坑
  2. android 横屏直播界面,Android安卓腾讯云互动直播随心播横屏的实现方式1.8.2
  3. dede article_eidt_action.php 5.7,织梦dedecmsV5.7后台编辑文章中文标题发布失败的解决方法...
  4. 代写php代码作业,代写phpmyadmin留学生作业、代做SQL语言作业、SQL程序设计作业调试、代做PHP script作业...
  5. 生成随机序列的算法c语言,一个C语言编写的不重复随机序列算法
  6. php url 非根目录,PHP 系统根目录、根URL的判断
  7. js 高级 constructor构造函数
  8. python os.getpidos.getppid
  9. linux 文件路径操作
  10. flask 启动服务