使用MFC绘制一些简单图形

这篇具有很好参考价值的文章主要介绍了使用MFC绘制一些简单图形。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、画直线

更改画笔样式

二、使用画刷画一个矩形

透明矩形

自定义颜色填充矩形

自定义图形填充矩形

四、实现一个画笔

五、画扇形

六、画椭圆

七、画圆

八、输出文本


一、画直线

使用MFC绘制一些简单图形

    画一条直线需要一个起点和一个终点,当鼠标按下时记录为起点坐标,鼠标弹起时记录为终点坐标。

   首先在类向导增加鼠标左键按下事件,和鼠标左键弹起事件

使用MFC绘制一些简单图形

  通过类向导添加一个CPoint类型的成员变量用来记录鼠标左键按下时的位置

使用MFC绘制一些简单图形

    补充事件代码

void CMFCApplication6View::OnLButtonDown(UINT nFlags, CPoint point)
{	
	m_pOrigin = point;
	CView::OnLButtonDown(nFlags, point);
}

void CMFCApplication6View::OnLButtonUp(UINT nFlags, CPoint point)
{
    //获得设备上下文
    CDC* pDC = GetDC();
    //移动到起点位置
	pDC->MoveTo(m_pOrigin);
    //从地点到终点画一条直线
	pDC->LineTo(point);
	释放设备上下文
	ReleaseDC(pDC);
	CView::OnLButtonUp(nFlags, point);
}

更改画笔样式

    在MFC中可以通过CPen重新定义一个画笔样式

CPen pen(笔形,线宽,颜色)

  • 笔形:PS_SOLID 实线, PS_DASH 虚线, PS_DOT 点线, PS_DOTDASH 点划线
  • 线宽:像素为单位
  • 颜色:RGB(RED,GREE,BLUR)

    例如想将上面画出的直线改为5像素宽,绿色

使用MFC绘制一些简单图形

    这时候就需要自定义一个画笔,将设备上下文默认的画笔替换下来。但是要注意:当停止使用自定义画笔时需要将设备上下文的默认画笔替换回来

void CMFCApplication6View::OnLButtonDown(UINT nFlags, CPoint point)
{
	m_pOrigin = point;
	CView::OnLButtonDown(nFlags, point);
}


void CMFCApplication6View::OnLButtonUp(UINT nFlags, CPoint point)
{
	//获得设备上下文
	CDC* pDC = GetDC();
	定义画笔
	CPen pen(PS_SOLID, 5, RGB(0,255, 0));
	//替换设备上下文默认画笔,并保留原来画笔
	CPen* pOldPen = pDC->SelectObject(&pen);
	pDC->MoveTo(m_pOrigin);
	pDC->LineTo(point);
	//设备上下文回复原来的画笔
	pDC->SelectObject(pOldPen);
	释放设备上下文
	ReleaseDC(pDC);
	CView::OnLButtonUp(nFlags, point);
}

二、使用画刷画一个矩形

使用画刷绘制矩形时,需要矩形的左上角坐标和右下角坐标,当鼠标按下时记录为左上角坐标,鼠标弹起时记录为右下角坐标。

使用MFC绘制一些简单图形

void CMFCApplication6View::OnLButtonDown(UINT nFlags, CPoint point)
{
	m_pOrigin = point;
	CView::OnLButtonDown(nFlags, point);
}

void CMFCApplication6View::OnLButtonUp(UINT nFlags, CPoint point)
{
	//画刷
	//获得设备上下文,与上面方式相比这种获得设备上下文dc是个局部变量,等程序结束后自动释放,就无序手动释放设备上下文
	CClientDC dc(this);
	//不透明画刷
	dc.Rectangle(CRect(m_pOrigin,point));

	CView::OnLButtonUp(nFlags, point);
}

透明矩形

    如果想画出透明矩形,获得系统定义好的透明画刷,将设备上下文的默认画刷替换下来即可,当透明画刷不使用时需要将原来画刷替换回来

使用MFC绘制一些简单图形

void CMFCApplication6View::OnLButtonDown(UINT nFlags, CPoint point)
{
	m_pOrigin = point;
	CView::OnLButtonDown(nFlags, point);
}

void CMFCApplication6View::OnLButtonUp(UINT nFlags, CPoint point)
{
	//画刷
	//获得设备上下文
	CClientDC dc(this);
	//透明画刷
	//获得系统透明画刷
	CBrush* brush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
	//更换设备上下文画刷
	CBrush* oldBrush = dc.SelectObject(brush);
	dc.Rectangle(CRect(m_pOrigin, point));
	//设备上下文换回原来的画刷
	dc.SelectObject(oldBrush);

	CView::OnLButtonUp(nFlags, point);
}

自定义颜色填充矩形

想要自定义矩形的填充,只需要绘制填充矩形时将自定义的画刷颜色填充作为参数传入即可

使用MFC绘制一些简单图形

void CMFCApplication6View::OnLButtonDown(UINT nFlags, CPoint point)
{
	m_pOrigin = point;
	CView::OnLButtonDown(nFlags, point);
}

void CMFCApplication6View::OnLButtonUp(UINT nFlags, CPoint point)
{
	//画刷
	//获得设备上下文
	CClientDC dc(this);
	//画有填充色的矩形
	CBrush brush(RGB(255, 0, 0));
	dc.FillRect(CRect(m_pOrigin, point), &brush);

	CView::OnLButtonUp(nFlags, point);
}

自定义图形填充矩形

    绘制自定义图形填充首先需要在资源视图里添加一个想要填充的图形,这里使用内置资源Bitmap绘制一个想要填充的图片。

使用MFC绘制一些简单图形

第一步:添加Bitmap资源

右击“项目”,选择“添加”,添加“资源”

使用MFC绘制一些简单图形

选择Bitmap,选择新建

使用MFC绘制一些简单图形

第二步:绘制自定义图形

使用MFC绘制一些简单图形

之后在“资源视图”里就可以查看到添加的资源

使用MFC绘制一些简单图形

第三步:加载绘制的图片

声明一个Bitmap,从资源视图里加载刚才绘制的图片,以声明的Bitmap对象为参数,声明一格画刷对象即可

void CMFCApplication6View::OnLButtonDown(UINT nFlags, CPoint point)
{
	m_pOrigin = point;

}

void CMFCApplication6View::OnLButtonUp(UINT nFlags, CPoint point)
{
	//画刷
	//获得设备上下文
	CClientDC dc(this);

	CBitmap bitmap;
	//从资源里加载图片放入bitmap中
	bitmap.LoadBitmap(IDB_BITMAP1);
	//以bitmap为参数,生成画刷对象
	CBrush brush(&bitmap);
	//填充矩形区域
	dc.FillRect(CRect(m_pOrigin, point), &brush);

	CView::OnLButtonUp(nFlags, point);
}

四、实现一个画笔

鼠标左键按下会随着鼠标移动开始绘制,当左键弹起时停止绘制

使用MFC绘制一些简单图形

    添加一个鼠标移动事件“OnMouseMove”,和一各成员参数“m_bDraw(bool)”记录鼠标左键是否被按下。当鼠标移动时首先判断m_bDraw,如果m_bDraw为true则左键按下,开始绘制,否则停止绘制

void CMFCApplication6View::OnLButtonDown(UINT nFlags, CPoint point)
{
	m_pOrigin = point;
    m_bDraw = TRUE;
	CView::OnLButtonDown(nFlags, point);
}


void CMFCApplication6View::OnLButtonUp(UINT nFlags, CPoint point)
{

	//按键抬起置为false
	m_bDraw = false;
	CView::OnLButtonUp(nFlags, point);
}


void CMFCApplication6View::OnMouseMove(UINT nFlags, CPoint point)
{
	CClientDC dc(this);
    //鼠标点击后才画线
	if (m_bDraw) {
		dc.MoveTo(m_pOrigin);
		dc.LineTo(point);
		m_pOrigin = point;
	}
	CView::OnMouseMove(nFlags, point);
}

五、画扇形

使用MFC绘制一些简单图形

扇形只需要在鼠标左键弹起前每次的起点都为鼠标左键按下时的即可

void CMFCApplication6View::OnLButtonDown(UINT nFlags, CPoint point)
{
	m_pOrigin = point;
    m_bDraw = TRUE;
	CView::OnLButtonDown(nFlags, point);
}


void CMFCApplication6View::OnLButtonUp(UINT nFlags, CPoint point)
{

	//按键抬起置为false
	m_bDraw = false;
	CView::OnLButtonUp(nFlags, point);
}


void CMFCApplication6View::OnMouseMove(UINT nFlags, CPoint point)
{
	CClientDC dc(this);
	CPen pen(PS_DOT, 1, RGB(0, 255, 255));
	//画扇形
	CPen* oldPen = dc.SelectObject(&pen);
	if (m_bDraw) {	
		dc.MoveTo(m_pOrigin);
		dc.LineTo(point);
	}
	dc.SelectObject(oldPen);
	CView::OnMouseMove(nFlags, point);
}

六、画椭圆

使用MFC绘制一些简单图形

    椭圆形绘制机制是在矩形的基础上,只需调用绘制椭圆形函数即可。

void CMFCApplication6View::OnLButtonDown(UINT nFlags, CPoint point)
{
	m_pOrigin = point;
	CView::OnLButtonDown(nFlags, point);
}


void CMFCApplication6View::OnLButtonUp(UINT nFlags, CPoint point)
{

	CClientDC dc(this);
	CPen pen(PS_SOLID, 5, RGB(0, 0, 255));
	CPen* oldpen = dc.SelectObject(&pen);
	//画椭圆
	dc.Ellipse(CRect(m_pOrigin, point));

	CView::OnLButtonUp(nFlags, point);
}

七、画圆

使用MFC绘制一些简单图形

void CMFCApplication6View::OnLButtonDown(UINT nFlags, CPoint point)
{
	m_pOrigin = point;
	CView::OnLButtonDown(nFlags, point);
}


void CMFCApplication6View::OnLButtonUp(UINT nFlags, CPoint point)
{
	m_bDraw = false;
	CClientDC dc(this);
	CPen pen(PS_SOLID, 5, RGB(0, 0, 255));
	CPen* oldpen = dc.SelectObject(&pen);
	//画圆
	long len = point.x - m_pOrigin.x;
	dc.Ellipse(m_pOrigin.x, m_pOrigin.y, m_pOrigin.x + len, m_pOrigin.y + len);


	CView::OnLButtonUp(nFlags, point);
}

八、输出文本

使用MFC绘制一些简单图形文章来源地址https://www.toymoban.com/news/detail-472220.html

void CMFCApplication6View::OnLButtonUp(UINT nFlags, CPoint point)
{
	m_bDraw = false;
	CClientDC dc(this);
	CString str("小明来喽");
	//设置文字颜色
	dc.SetTextColor(RGB(0, 255, 0));
	//设置文字字体
	CFont font;

	//创建点阵字体
	//传递多少点字体,传入200,字体是20
	font.CreatePointFont(200, "华文行楷");
	//输出字符串
	dc.TextOut(point.x, point.y, str, str.GetLength());
	CView::OnLButtonUp(nFlags, point);
}

到了这里,关于使用MFC绘制一些简单图形的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机图形学实验——利用MFC对话框实现多边形绘制与填充(扫描线填充算法)附源码

    内容概括: 利用基于对话框的MFC项目 实现鼠标点击绘制多边形 实现扫描线算法填充多边形 源码见Yushan-Ji/ComputerGraphics: ECNU2023秋 计算机图形学课程实验代码 (github.com) 通过鼠标交互输入多边形 对各种多边形进行填充,包括边界自交的情况 利用 OnLButtonDown 和 OnRButtonDown 函数,

    2024年02月04日
    浏览(70)
  • MATLAB简单图形绘制(五)

    目录 实验目的 实验内容   1)掌握MATLAB图形绘制的基本原理和方法; 2)熟悉和了解MATLAB图形绘制程序编辑的基本指令; 3)掌握利用MATLAB图形编辑窗口编辑和修改图形界面,并添加图形的各种标注; 4)掌握plot、subplot的指令格式和语法。 2-1)、设 在=0~2π区间等间隔取100点

    2023年04月14日
    浏览(73)
  • 原生js使用canvas实现鼠标绘制直线

    目录 目录 一、原理 二、具体实现 (1)、创建画布 (2)、获取鼠标位置 (3)、创建线段类 (4)、创建主绘制类 (5)、绘制 (6)、效果图  三、源代码 1、原生js 2、vue3实现  直线可以看成是一小段一小段的线段组成,并且两点确定一条直线; 首先当鼠标左键点击时候

    2024年02月12日
    浏览(48)
  • C#之基于winform窗体绘制简单图形

    什么是窗体? 可以理解为是一个自定义的控制台应用程序。 假如需要仅仅是用vs制作游戏的话,那么vs中,我们平时所用到的控制台应用程序所呈现的窗口时远远不够用的。因此需要自定义窗体。 因此在新建项目时,我们不能再使用控制台应用程序,而是应该选择窗体: 之

    2023年04月16日
    浏览(38)
  • 图形编辑器开发:一些会用到的简单几何算法

    大家好,我是前端西瓜哥。 开发图形编辑器,你会经常要解决一些算法问题。本文盘点一些我开发图形编辑器时遇到的简单几何算法问题。 判断两个矩形是否发生碰撞(或者说相交),即两个矩形有重合的区域。 常见使用场景: 使用选择工具 框选 图形(框选策略除了相交

    2024年02月16日
    浏览(49)
  • 使用MFC && CAD 的一些使用方式记录【追加ing】

    1. 项目调试:由于项目很大,因此,我们调试的时候,不应该编译整个软件而是应该只编译对应的 类去做处理  2. debug 设置断点方面: 以往我们的操作都是在.exe直接执行文件上进行操作,但是,现在,由于我是对arx进行的二次开发,相当于生成的是 dll 动态链接库,那么,

    2024年02月16日
    浏览(37)
  • 使用OpenCV绘制图形

    绘制黄色的线: 绘制矩形: 绘制圆形: 绘制多边形: 绘制文字:

    2024年01月22日
    浏览(50)
  • MFC下CPictureCtrl控件基于鼠标左键坐标的直线绘图

    本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除 目录 1.创建自定义类CMyPictureCtrl 2.布局Dlg 3.实验代码 4.运行结果 在基于对话框的MFC应用程序中,通过鼠标操作获取坐标并在CPictureCtrl控件中使用LineTo()函数画直线,涉及以下几个关键步骤:

    2024年04月25日
    浏览(33)
  • 使用 clip-path 绘制多种图形

    clip-path 是一个CSS属性,剪切路径,允许用不同的剪切方式创建元素的可显示区域,区域内的内容可以展示,区域外的内容则隐藏。 基本语法: clip-path: clip-source | [ basic-shape || geometry-box ] | none 。 其中,属性值分四类: clip-source 使用类函数 url() 引用 SVG 的 clipPath 元素。 basi

    2024年01月15日
    浏览(46)
  • c++ 使用opencv来绘制各种图形(持续更新)

     OpenCV中并没有现成的函数,因此可以通过绘制两条相互垂直的直线来实现十字丝的绘制。

    2024年02月13日
    浏览(86)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包