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);// 头 直径240HBRUSH 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工程下载

点击前往下载

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序---登录

手机号登录 手机号快速验证和手机号实时验证区别 手机号快速验证组件,平台会对号码进行验证,但不保证是实时验证;收费0.0.3元手机号实时验证组件,在每次请求时,平台均会对用户选择的手机号进行实时验证。收费0.0.4元…

EasyCVR/EasyDSS无人机直播技术助力野生动物监测:开启野生动物保护新篇章

近日有新闻报道,一名挖掘机师傅在清理河道时,意外挖出一只稀有的扬子鳄,挖机师傅小心翼翼地将其放在一边,扬子鳄也顺势游回一旁的河道中。 随着人类对自然环境的不断探索和开发,野生动物及其栖息地的保护显得愈发重要。…

ROS(四)

write in advance 实验四,在经历了实验三的失败后,卷土重来。 幸运的是,此次实验很简单,很快就能搞定。 Part one 使用指令查看自己摄像头的设备号,如果报错,且你为虚拟机,可能是未在虚拟机处…

Elasticsearch docker 安装及基本用法

创建网络 首先通过命令创建一个网络 docker network create es-net然后查看网络 [rootDocker ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 4e315f5e3ae7 bridge bridge local a501a9f3b4ee es-net bridge local ebca66b02e8c host …

修改文件的权限(linux篇)

1.在yl用户下创建一个demo.txt文件 [rootlocalhost ~]# su yl [yllocalhost root]$ cd [yllocalhost ~]$ cd Desktop/ [yllocalhost Desktop]$ ls [yllocalhost Desktop]$ vim demo.txt 填入一些信息进行保存 2.查看文件信息以及所对应的组 [yllocalhost Desktop]$ ll 总用量…

MYSQL 四、mysql进阶 1(mysql逻辑架构以及查询流程)

一、mysql的逻辑架构 1. 逻辑架构剖析 1.1 服务器处理客户端请求 mysql是典型的c/s架构,即 client/server 架构,不论是客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本&am…

MySQL 创建数据表

创建MySQL数据表需要以下信息: 表名表字段名定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (column_name column_type); 以下例子中我们将在 W3CSCHOOL 数据库中创建数据表w3cschool_tbl: CREAT…

大数据集群离线解析经纬度逆编码地址

背景 最近有个需要需求把经纬度解析为地址,那么通常解析地址市面上流行的方案就是调取百度、高德地图的接口进行解析。 难点 但是在用这个方案遇到一个问题就是企业认证的百度地图每天的逆编码解析为300w次,qps为100次/秒,对于日增上千万的…

Golang | Leetcode Golang题解之第166题分数到小数

题目&#xff1a; 题解&#xff1a; func fractionToDecimal(numerator, denominator int) string {if numerator%denominator 0 {return strconv.Itoa(numerator / denominator)}s : []byte{}if numerator < 0 ! (denominator < 0) {s append(s, -)}// 整数部分numer…

springboot 3.x 之 集成rabbitmq实现动态发送消息给不同的队列

背景 实际项目中遇到针对不同类型的消息&#xff0c;发送消息到不同的队列&#xff0c;而且队列可能还不存在&#xff0c;需要动态创建&#xff0c;于是写了如下代码&#xff0c;实践发现没啥问题&#xff0c;这里分享下。 环境 springboot 3.2 JDK 17 rabbitMQ模型介绍 图片…

TwinCAT3 Scope Y-T NC Project的使用方法(电机参数监控时序图)

TwinCAT3 Scope Y-T NC Project的使用方法 图中有两个电机 在程序中添加两个电机轴 右键点击解决方案&#xff0c;然后添加Scope YT Project 记录绝对位置&#xff0c;速度&#xff0c;相对位置&#xff0c;加速度&#xff0c;跟随误差 如果不是本地的虚拟轴&#xff0c;则可以…

JavaScript 语句

JavaScript 语句 JavaScript 是一种轻量级的编程语言,广泛用于网页开发中,以创建交互式的网页。JavaScript 语句是构成 JavaScript 程序的基本单位,它们用于执行操作、控制程序流程、声明变量、定义函数等。本文将详细介绍 JavaScript 中的各种语句,包括它们的功能和用法。…

OpenCV中的圆形标靶检测——findCirclesGrid()(二)

本章我们开始讲解基于层次聚类的标靶检测算法。当我们调用如下API,且flags中包含cv::CALIB_CB_CLUSTERING标志位时,将会执行基于层次聚类的斑点检测算法。算法支持对称标靶和非对称标靶两类,相应的需要将下述flags设为包含CALIB_CB_SYMMETRIC_GRID或CALIB_CB_ASYMMETRIC_GRI…

A类IP介绍

1&#xff09;A类ip给谁用&#xff1a; 给广域网用&#xff0c;公网ip使用A类地址&#xff0c;作为公网ip时&#xff0c;Ip地址是全球唯一的。 2&#xff09;基本介绍 ip地址范围 - 理论范围 0.0.0.0 ~127.255.255.255&#xff1a;00000000 00000000 00000000 00000000 ~ 0111…

linux 环境配置 yaf

Yaf&#xff08;Yet Another Framework&#xff09;是一个C语言编写的&#xff0c;用于PHP的轻量级框架。在Linux环境中配置Yaf&#xff0c;你需要确保你的系统已经安装了PHP和PHP开发包。以下是配置Yaf的基本步骤&#xff1a; 1. 安装PHP开发包和PHP的扩展管理工具&#xff0…

JVM性能优化工具及问题排查

jvm性能优化工具 jdk提供给我们了很实用的工具来分析JVM的状态&#xff0c;线程以及配置&#xff0c;这些工具包含于jdk中&#xff0c;并且以java实现&#xff0c;是JVM性能优化必不可少的工具集&#xff0c;这些工具都在$JAVA_HOME/bin下 jps、jinfo、jstack、jmap、jstat基本…

打开nginx连接的php页面报错502

目录 问题描述&#xff1a; 原因&#xff1a; 1. 使用 Unix 域套接字&#xff08;Unix Socket&#xff09; 区别和优势&#xff1a; 2. 使用 TCP/IP 套接字 区别和优势&#xff1a; 如何选择 扩展&#xff1a;Rocky_Linux9.4安装PHP的步骤&#xff1a; 使用Remi存储库…

NLP入门——基于梯度下降法分类的应用

问题分析 我们前面研究的都是基于统计的方法&#xff0c;通过不同的统计方法得到不同的准确率&#xff0c;通过改善统计的方式来提高准确率。现在我们要研究基于数学的方式来预测准确率。 假设我们有一个分词 s_{class,word}&#xff0c;class是该对象的类别&#xff0c;word…

【漏洞复现】金和OA C6 download.jsp 任意文件读取漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

AI写作与个人写作:思考性的探究

在人工智能&#xff08;AI&#xff09;技术日益成熟的今天&#xff0c;AI写作已经成为现实&#xff0c;例如文心一言、kimi、研导AI写作等工具。然而&#xff0c;当机器开始涉足写作这一传统上被认为是人类独有的创造性活动时&#xff0c;我们不禁要问&#xff1a;AI写作是否能…