MFC绘制哆啦A梦

在这里插入图片描述

OnPaint绘制代码

		CPaintDC dc(this); // 用于绘画的设备上下文
		
		CRect rc;
		GetWindowRect(rc);
		int cxClient = rc.Width();
		int cyClient = rc.Height();
		// 辅助线
		HPEN hPen = CreatePen(PS_DOT, 1, RGB(192, 192, 192));
		HPEN hOldPen = (HPEN)SelectObject(dc, hPen);
		MoveToEx(dc, cxClient / 2, 0, NULL);
		LineTo(dc, cxClient / 2, cyClient);
		MoveToEx(dc, 0, cyClient / 2, NULL);
		LineTo(dc, cxClient, cyClient / 2);
		SelectObject(dc, hOldPen);

		// 头 直径240
		HBRUSH hBlueBrush = CreateSolidBrush(RGB(0, 159, 232));
		HBRUSH hOldBrush = (HBRUSH)SelectObject(dc, hBlueBrush);
		DrawEllipse(&dc, cxClient / 2 - 120, cyClient / 2 - 200, cxClient / 2 + 120, cyClient / 2 + 40,
			RGB(0, 0, 0), RGB(0, 159, 232));
		SelectObject(dc, hOldBrush);

		// 脸 直径200 
		DrawEllipse(&dc, cxClient / 2 - 100, cyClient / 2 - 160, cxClient / 2 + 100, cyClient / 2 + 40,
			RGB(0,0,0), RGB(255,255,255));

		//眼睛
		hOldBrush = DrawEyes(hOldBrush, dc, cxClient, cyClient);

		// 鼻子
		HBRUSH hRedBrush = CreateSolidBrush(RGB(255, 0, 0));
		hOldBrush = (HBRUSH)SelectObject(dc, hRedBrush);
		DrawEllipse(&dc, cxClient / 2 - 10, cyClient / 2 - 135, cxClient / 2 + 10, cyClient / 2 - 115,
			RGB(0, 0, 0), RGB(255, 0, 0));
		SelectObject(dc, hOldBrush);

		MoveToEx(dc, cxClient / 2, cyClient / 2 - 115, NULL);
		LineTo(dc, cxClient / 2, cyClient / 2 - 30);

		// 嘴巴
		Arc(dc, cxClient / 2 - 70, cyClient / 2 - 120, cxClient / 2 + 70, cyClient / 2 - 30,
			cxClient / 2 - 60, cyClient / 2 - 50, cxClient / 2 + 60, cyClient / 2 - 50);

		// 胡须  中上下
		DrawBeard(dc, cxClient, cyClient);


		// 身体
		hOldBrush = (HBRUSH)SelectObject(dc, hBlueBrush);
		Rectangle(dc, cxClient / 2 - 100, cyClient / 2 - 10, cxClient / 2 + 100, cyClient / 2 + 150);
		SelectObject(dc, hOldBrush);

		// 肚皮
		Ellipse(dc, cxClient / 2 - 70, cyClient / 2 - 20, cxClient / 2 + 70, cyClient / 2 + 120); // 圆
		hPen = CreatePen(PS_DOT, 1, RGB(255, 255, 255)); // 擦除肚皮上面嘴巴下面的圆弧
		hOldPen = (HPEN)SelectObject(dc, hPen);
		Arc(dc, cxClient / 2 - 70, cyClient / 2 - 20, cxClient / 2 + 70, cyClient / 2 + 120,
			cxClient / 2 + 60, cyClient / 2 - 10, cxClient / 2 - 60, cyClient / 2 - 10);
		SelectObject(dc, hOldPen);

		// 围脖
		hOldBrush = (HBRUSH)SelectObject(dc, hRedBrush);
		RoundRect(dc, cxClient / 2 - 102, cyClient / 2 - 12, cxClient / 2 + 102, cyClient / 2 + 5, 20, 20);
		SelectObject(dc, hOldBrush);

		// 铃铛
		HBRUSH hYellowBrush = CreateSolidBrush(RGB(255, 255, 0));
		hOldBrush = (HBRUSH)SelectObject(dc, hYellowBrush);
		Ellipse(dc, cxClient / 2 - 12, cyClient / 2 - 4, cxClient / 2 + 12, cyClient / 2 + 20);
		RoundRect(dc, cxClient / 2 - 12, cyClient / 2 + 3, cxClient / 2 + 12, cyClient / 2 + 6, 20, 20);
		SelectObject(dc, hRedBrush);
		Ellipse(dc, cxClient / 2 - 5, cyClient / 2 + 8, cxClient / 2 + 5, cyClient / 2 + 18);
		SelectObject(dc, hOldBrush);

		// 裤腿
		Ellipse(dc, cxClient / 2 - 20, cyClient / 2 + 130, cxClient / 2 + 20, cyClient / 2 + 170); // 画圆
		hPen = CreatePen(PS_DOT, 1, RGB(255, 255, 255)); // 擦除肚皮下面嘴巴上面的圆弧
		hOldPen = (HPEN)SelectObject(dc, hPen);
		Arc(dc, cxClient / 2 - 20, cyClient / 2 + 130, cxClient / 2 + 20, cyClient / 2 + 170,
			cxClient / 2 - 20, cyClient / 2 + 150, cxClient / 2 + 20, cyClient / 2 + 150);
		SelectObject(dc, hOldPen);

		// 口袋
		Pie(dc, cxClient / 2 - 50, cyClient / 2, cxClient / 2 + 50, cyClient / 2 + 100,
			cxClient / 2 - 50, cyClient / 2 + 50, cxClient / 2 + 50, cyClient / 2 + 50);

		// 脚掌
		Ellipse(dc, cxClient / 2 - 110, cyClient / 2 + 135, cxClient / 2 - 10, cyClient / 2 + 165);
		Ellipse(dc, cxClient / 2 + 10, cyClient / 2 + 135, cxClient / 2 + 110, cyClient / 2 + 165);

		// 胳膊
		POINT apt[4];
		hOldBrush = (HBRUSH)SelectObject(dc, hBlueBrush);
		apt[0].x = cxClient / 2 - 100;
		apt[0].y = cyClient / 2;
		apt[1].x = cxClient / 2 - 150;
		apt[1].y = cyClient / 2 + 60;
		apt[2].x = cxClient / 2 - 140;
		apt[2].y = cyClient / 2 + 80;
		apt[3].x = cxClient / 2 - 100;
		apt[3].y = cyClient / 2 + 60;
		Polygon(dc, apt, 4);
		SelectObject(dc, hOldBrush);
		Ellipse(dc, cxClient / 2 - 168, cyClient / 2 + 60, cxClient / 2 - 138, cyClient / 2 + 90); // 左手掌

		hOldBrush = (HBRUSH)SelectObject(dc, hBlueBrush);
		apt[0].x = cxClient / 2 + 100;
		apt[0].y = cyClient / 2;
		apt[1].x = cxClient / 2 + 150;
		apt[1].y = cyClient / 2 + 60;
		apt[2].x = cxClient / 2 + 140;
		apt[2].y = cyClient / 2 + 80;
		apt[3].x = cxClient / 2 + 100;
		apt[3].y = cyClient / 2 + 60;
		Polygon(dc, apt, 4);
		SelectObject(dc, hOldBrush);
		Ellipse(dc, cxClient / 2 + 168, cyClient / 2 + 60, cxClient / 2 + 138, cyClient / 2 + 90); // 右手掌

// 		// 左手举着小风车
// 		MoveToEx(dc, cxClient / 2 - 160, cyClient / 2 + 62, NULL);
// 		LineTo(dc, cxClient / 2 - 160, cyClient / 2 - 40);
// 		DrawWindmill(dc, cxClient / 2 - 160, cyClient / 2 - 40);
// 
// 		// 右手举着小风车
// 		MoveToEx(dc, cxClient / 2 + 160, cyClient / 2 + 62, NULL);
// 		LineTo(dc, cxClient / 2 + 160, cyClient / 2 - 40);
// 		DrawWindmill(dc, cxClient / 2 + 160, cyClient / 2 - 40);
		// 左手举着五星红旗
		MoveToEx(dc, cxClient / 2 - 160, cyClient / 2 + 62, NULL);
		LineTo(dc, cxClient / 2 - 160, cyClient / 2 - 40);
		DrawFlagChina(dc, cxClient / 2 - 160+1, cyClient / 2 - 40);

		// 右手举着奥运五环旗
		MoveToEx(dc, cxClient / 2 + 160, cyClient / 2 + 62, NULL);
		LineTo(dc, cxClient / 2 + 160, cyClient / 2 - 40);
		DrawFlagOlympics(dc, cxClient / 2 + 160, cyClient / 2 - 40);

		// 去多余线,增强立体感
		hPen = CreatePen(PS_SOLID, 2, RGB(0, 159, 232));
		hOldPen = (HPEN)SelectObject(dc, hPen);
		MoveToEx(dc, cxClient / 2 - 100, cyClient / 2, NULL);
		LineTo(dc, cxClient / 2 - 100, cyClient / 2 + 50);

		MoveToEx(dc, cxClient / 2 + 100, cyClient / 2, NULL);
		LineTo(dc, cxClient / 2 + 100, cyClient / 2 + 50);
		SelectObject(dc, hOldPen);

		// 清理资源
		DeleteObject(hPen);
		DeleteObject(hBlueBrush);
		DeleteObject(hRedBrush);
		DeleteObject(hYellowBrush);

完整Visual Studio工程下载

点击前往下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/721425.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Vue中的<TransitionGroup/>进入动画不生效不显示问题

Vue中有两个过渡动画组件分别是&#xff1a;<TransitionGroup/> <TransitionGroup/>进入动画不生效不显示问题 &#xff0c;在渲染列表上加上v-if&#xff0c;看代码&#xff0c;让他每次渲染都重新渲染 加上v-if即可 <template> <TransitionGroup nam…

Perforce静态代码分析专家解读MISRA C++:2023®新标准:如何安全、高效地使用基于范围的for循环,防范未定义行为

MISRA C&#xff1a;2023——MISRA C 标准的下一个版本来了&#xff01;为了帮助您了解 MISRA C&#xff1a;2023相比于之前版本的变化&#xff0c;我们将继续为您带来Perforce首席技术支持工程师Frank van den Beuken博士的博客系列&#xff0c;本期为第三篇。 在前两篇系列文…

和服务器建立联系——6.10山大软院项目实训1

下面介绍我如何在自己的项目中&#xff0c;根据aigc组的接口&#xff08;如下图&#xff09;&#xff0c;在Unity中和服务器建立联系并发出接受请求的&#xff1a; 这是一个通过HTTP POST方法调用的接口&#xff0c;需要发送JSON格式的数据。在Unity中实现这样的功能&#xff0…

文字炫酷祝福 含魔法代码

效果下图&#xff1a;&#xff08;可自定义显示内容&#xff09; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initi…

SpringBoot + Maven 项目的创建

文章目录 1、Maven2、SpringBoot3、二者之间的联系4、项目的创建 在创建项目之前&#xff0c;肯定要知道他们之间的区别 1、Maven maven是一个跨平台的项目管理工具。它是Apache的一个开源项目&#xff0c;主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。 比如说…

QT day04

一、思维导图 二、登录界面优化 代码&#xff1a; 界面&#xff1a; *{background-color: rgb(255, 255, 255); }QFrame#frame{border-image: url(:/Logo/shanChuan.jpg);border-radius:15px; }#frame_2{background-color: rgba(110, 110, 110, 120);border-radius:15px; }Q…

线代的学习(矩阵)

1.矩阵的乘法 矩阵实现满足&#xff1a;内标相等 矩阵相乘之后的结果&#xff1a;前行后列 需要注意&#xff1a;1.矩阵的乘法不具有交换律&#xff1a;AB!BA 2.矩阵的乘法满足分配律&#xff1a;A(BC) AB AC 抽象逆矩阵求逆矩阵 方法1.凑定义法、 方法2.长除法 数字型矩阵…

一文弄懂 Python os.walk(),轻松搞定文件处理和目录遍历

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ Python os 模块的 walk() 方法以自顶向下或自底向上的方式遍历指定的目录树&#xff0c;从而显示目录树中的文件名。对于目录树中的每个目录&#xff0c;os.walk() 方法都会产生一个包含目录路径、当前…

vue3第四十节(pinia的用法注意事项解构store)

pinia 主要包括以下五部分&#xff0c;经常用到的是 store、state、getters、actions 以下使用说明&#xff0c;注意事项&#xff0c;仅限于 vue3 setup 语法糖中使用&#xff0c;若使用选项式 API 请直接查看官方文档&#xff1a; 一、前言&#xff1a; pinia 是为了探索 vu…

04-对原生app应用中的元素进行定位

本文介绍对于安卓原生app应用中的元素如何进行定位。 一、uiautomatorviewer uiautomatorviewer是Android-SDK自带的一个元素定位工具&#xff0c;非常简单好用&#xff0c;可以使用该工具查看app应用中的元素属性&#xff0c;帮助我们在代码中进行元素定位。 1&#xff09;使…

Win11版本21H2怎么升级为23H2?升级详细步骤在此!

在Win11电脑操作中&#xff0c;用户目前使用的版本是21H2&#xff0c;现在想体验23H2版本的先进功能&#xff0c;但不知道要怎么操作才能将系统版本升级为23H2&#xff1f;接下来小编给大家介绍详细的升级方法步骤&#xff0c;助力大家轻松完成系统版本升级操作。 方法一&#…

VirtualStudio配置QT开发环境

环境 VirtualStudio2022Qt5.12.10 安装msvc工具链&#xff08;这一步不是必须的&#xff09; 打开virtual studio&#xff0c;打开Virtual Studio Installer界面选择要安装的msvc版本&#xff0c;点击安装 安装VirtualStudio扩展 在线安装 打开virtual Studio&#xff0c;…

ps2024磨皮滤镜插件Portraiture升级版下载-Portraiture2024软件最新版下载附加安装步骤

不少小伙伴在制作了照片后都会通过一些形式进行美化解决&#xff0c;今日小编就给大家详细介绍一款非常不错的专用工具&#xff0c;它是Corel PaintShop Pro 2024 手机软件&#xff0c;此软件为消费者提供了技术专业完备的视频后期制作作用&#xff0c;能够让消费者轻轻松松将为…

批量创建文件夹 就是这么简单 一招创建1000+文件夹

批量创建文件夹 就是这么简单 一招创建1000文件夹 在工作中&#xff0c;或者生活中&#xff0c;我们经常要用到批量创建文件夹&#xff0c;并且根据不同的工作需求&#xff0c;要求是不一样的&#xff0c;比如有些人需要创建上千个不一样名称的文件夹&#xff0c;如果靠手动创…

Nature发文介绍使用ChatGPT帮助学术写作的三种方式

文章链接&#xff1a;https://www.nature.com/articles/d41586-024-01042-3 一、介绍 这篇文章是由Dritjon Gruda撰写的&#xff0c;讨论了生成性人工智能&#xff08;AI&#xff09;在学术写作、编辑和同行评审中的三种应用方式。Gruda认为&#xff0c;尽管学术界对聊天机器…

大多数JAVA程序员都干不到35岁吗?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 很遗憾是的&#xff0c;对…

UDP的组播发送与接收C语言测试和nc接收组播测试

组播这个东西&#xff0c;很多年前用过一次。本身的原理不复杂&#xff0c;未知的是使用的环境&#xff0c;受使用环境的影响有多大&#xff0c;还是那句废话&#xff0c;具体问题具体分析。 发送端代码multicast.c #include <stdio.h> #include <stdlib.h> #…

MySQL常见面试题自测

文章目录 MySQL基础架构一、说说 MySQL 的架构&#xff1f;二、一条 SQL语句在MySQL中的执行过程 MySQL存储引擎一、MySQL 提供了哪些存储引擎&#xff1f;二、MySQL 存储引擎架构了解吗&#xff1f;三、MyISAM 和 InnoDB 的区别&#xff1f; MySQL 事务一、何谓事务&#xff1…

从老花眼开始

三年前&#xff0c;博主的的火眼金睛开始老花了&#xff0c;表现就是看近处看不清了。人眼对可视距离的标准可以定义为&#xff1a;看手机为近距离&#xff0c;看电脑为中距离&#xff0c;看电视为中距离&#xff0c;看红绿灯为远距离。老花眼就是戴近视眼镜直接看手机看不清了…

苍穹外卖---导入接口文档

一、前后端分离开发流程 第一步&#xff1a;定义接口&#xff0c;确定接口的路径、请求方式、传入参数、返回参数。 第二步&#xff1a;前端开发人员和后端开发人员并行开发&#xff0c;同时&#xff0c;也可自测。 第三步&#xff1a;前后端人员进行连调测试。 第四步&…