Windows SDK(三)GDI图形绘制基础

news2025/2/4 14:58:25

GDI介绍

GDI:图形设备接口:Windows的子系统,负责在视讯显示器和打印机上显示图形。

GDI常见名词解释:

直线

曲线

填入区域:直线或曲线构成的封闭区域,可以用画刷进行填充

位图:点阵图像

文字

映像模式:不同尺寸绘图的形式

图元:以二级制形式存储的GDI集合

绘图区域:允许绘制任意形状的绘图区域

路径:GDI内部存储直线或曲线的集合

剪裁:剪出不同区域

调色盘:输出设备允许使用颜色的范围 打印

HDC:设备上下文即用于绘制到屏幕、打印机或者图元文件。

如图:最外侧是屏幕区域,名称减号叉号等是窗口区域,除此以外是客户区

窗口区左上角是坐标轴x,y等于0的位置,向右向下xy增大

设备环境(DC):设备上下文缩写,程序里可以进行绘制的部分

接下来讲述如何应用GDI来进行绘图

绘制入口

在桌面程序中找到该处

case WM_PAINT: 

{

    PAINTSTRUCT ps;

    HDC hdc = BeginPaint(hWnd, &ps);

    HDC hdc = BgeinPaINT(hWnd, &ps) 在桌面程序的此处进行绘制,此处我们填入一个封装好的

    HDC hdc2 = GetDC(hWnd); 两种接受窗口句柄的方式

    MyPaint(hdc); 此处为绘制窗口的函数

    ReleaseDC(hWnd,hdc2);  释放窗口句柄

}

绘制开始

BOOL MyPaint(HDC hDC){}  此处是绘制窗口的函数,此时可见,该函数并没有被书写

设置背景板

SetBkMode(hDC, TRANSPARENT); 设置透明背景色,不加的话,输出字体的背景一直是白色的

设置画笔

画笔用于绘画图像的边框

HPEN hBluePen = CreatePen(PS_SOLID, 3, RGB(0, 0, 255)); 创建画笔,参数依次 笔样式 划线

的宽度 划线的颜色:三原色

画笔的选择

HGDIOBJ hGdiObj = SelectObject(hDC, hBluePen); 选择画笔,参数依次设备上下文句柄 画笔

画笔位置初始化

此处设置画笔起始位置:

POINT pt = { 0 }; 画笔当前位置的指针

MoveToEx(hDC, 100, 100, &pt); 移动画笔到起点 参数依次 设备上下文句柄 起点的xy轴 接受画

笔当前位置结构的指针

线条的绘画

LineTo(hDC, 200, 400); 此函数用于绘制线条 参数依次 句柄 xy最终位置坐标

画笔矩形的绘画

Rectangle(hDC, 150, 100, 300, 200); 此函数绘制矩形 参数依次 句柄 左上右下顶点的坐标

画刷初始化

画刷用于填充图像颜色等等,此处介绍两种不同的画刷

HBRUSH hSolidBrush = CreateSolidBrush(RGB(0, 0, 255)); 创建实心画刷 参数为三原色

HBRUSH hHatchBrush = CreateHatchBrush(HS_DIAGCROSS, RGB(0, 0, 255)); 创建阴影画刷

参数依次 阴影形式 三原色

画刷矩形的绘画

HGDIOBJ hGdiObj2 = SelectObject(hDC, hHatchBrush); 选择阴影画刷

Rectangle(hDC, 150, 100, 300, 200); 绘制矩形 该函数临近原则,最近的hdc选择是哪个就用哪

个,此处是阴影画刷

DeleteObject(hGdiObj2); 使用完毕后,删除选择的工具,此处为阴影画刷

弧线的绘画

弧线输出:设计思路 n个点连成弧线

POINT pi[4] = {

10,120,

180,300,

300,180,

120,10

}; 申请多个点的数组

PolyBezier(hDC, pi, 4);  曲线绘制:参数依次 句柄 点位置 点数数量

圆的绘画

设计思路:一个矩形的对角点,延申出来圆

Arc(hDC, 100, 200, 200, 100, 350, 50, 350, 350); 用于存储点集合 参数依次 正方形两个对角点 圆

的起点终

点径向线的xy坐标,根据坐标的不同画出的圆可以闭口或不闭口

普通字体的输出

SetTextColor(hDC, RGB(0, 0, 255)); 设置字体颜色 参数依次句柄 三原色

TextOut(hDC, 100, 100, L"rkvir", wcslen(L"rkvir")); 窗口写字 参数依次 句柄 xy坐标 要输出的话 输

出话的长度

高级字体的输出

HFONT hFont = CreateFont(100, 50, 0, 0, 0, 0, 0, 0, GB2312_CHARSET, 0, 0, 0, 0, L"宋体"); 参

数依次 字体的高度 宽度 剩下填0 字符集即字符编码 剩下填0 本地字体

SetTextColor(hDC, RGB(255, 0, 255)); 设置文字的颜色

选择字体

SelectObject(hDC, hFont); 选择字体

输出文字位置初始化

RECT rect; 定义输入文字的位置

SetRect(&rect, 30, 300, 400, 200); 设置文字位置的具体参数:上下左右

文字输出

DrawText(hDC, L"这是一个实例", -1, &rect, DT_NOCLIP); 文字输出:参数依次 句柄 要输出的文

字 -1此处文字以00结尾,可以用-1表该文字多长都可以,若不以00结尾,则填写文字实际长度 文

字位置:包含上下左右

DeleteObject(hFont); 文字输出完毕后,释放字体内存

位图的设置

加载位图

HBITMAP hBitMap = (HBITMAP)LoadImage(NULL, L"bg.bmp", IMAGE_BITMAP, 500, 500,

LR_LOADFROMFILE);  将位图加载进来:以位图句柄接收 LoadImage需要类型强转 参数依次

NULL 相对路径:该图像文件需要在源程序文件夹中 默认类型 大小 声明从文件来

设置dc

HDC hMemoryDC = CreateCompatibleDC(hDC); 2.设置一个兼容设备环境的内存dc

选择对象

SelectObject(hMemoryDC, hBitMap); 3.选择对象 参数依次 句柄 位图句柄

贴图

BitBlt(hDC, 0, 0, 500, 500, hMemoryDC, 0, 0, SRCCOPY);4.贴图 参数依次 目标句柄 目标被贴矩

形左上角xy坐标 源位图和目标矩形的宽度和高度 源位图句柄 原位图左上角xy坐标 操作代码:F1

跟进去该函数查看参数选择

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

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

相关文章

DEV-C++ ege.h库 绘图教程合集

一、目录 DEV-C ege.h库 绘图教程(一)——基本绘图函数 DEV-C ege.h库 绘图教程(二)——高级绘图函数(上) DEV-C ege.h库 绘图教程(三)——高级绘图函数(下)时…

探索自然语言处理在改善搜索引擎、语音助手和机器翻译中的应用

文章目录 每日一句正能量前言文本分析语音识别机器翻译语义分析自然语言生成情感分析后记 每日一句正能量 努力学习,勤奋工作,让青春更加光彩。 前言 自然语言处理(NLP)是人工智能领域中与人类语言相关的重要研究方向&#xff0c…

day07-CSS高级

01-定位 作用:灵活的改变盒子在网页中的位置 实现: 1.定位模式:position 2.边偏移:设置盒子的位置 left right top bottom 相对定位 position: relative 特点: 不脱标,占用自己原来位置 显示模…

最长的指定瑕疵度的元音子串 - 华为OD统一考试

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C 题目描述 开头和结尾都是元音字母(aeiouAEIOU)的字符串为元音字符串,其中混杂的非元音字母数量为其瑕疵度。比如: “a” 、 “aa” 是元…

视频怎么加水印?分享两个简单的加水印的方法

在数字媒体时代,视频已经成为信息传播的重要方式。许多人在创作视频是会加上自己独特的水印,防止视频被盗用。水印作为数字版权保护技术的一种,可以有效地防止视频被非法复制、传播或篡改,从而保护创作者的权益和利益。下面我分享…

小程序中picker多列选择器

需求&#xff1a;实现类似省市联动的效果&#xff0c;选择第一列后&#xff0c;第二列数据变化 html部分: <view class"section"><view>多列选择器</view><picker mode"multiSelector" bindchange"bindMultiPickerChange"…

动环系统断电告警的防误报

机房一般接入的市电为三相380伏特&#xff0c;也有用单向220伏特的。UPS本身提供断电告警的功能&#xff0c;这个告警在各种种类的UPS中都是提供的&#xff0c;不同电压的市电输入都支持&#xff1b;三相电另外有缺相告警事件。但这些告警事件存在抖动或者误判。 瞬间的低压或…

C语言标准库所有字符串操作库函数汇总

以下是C语言标准库中字符串操作相关的API列表&#xff0c;这些函数通常在 <string.h> 头文件中定义&#xff1a; 1. strlen - 计算字符串长度&#xff0c;不包括结尾的空字符\0&#xff1a; size_t strlen(const char *str); 2. strcpy - 复制字符串&#xff1a; c…

网络编程套接字(3)

网络编程套接字 简单的TCP英译汉服务器地址转换函数字符串IP转整数IP整数IP转字符串IP关于inet_ntoa函数并发场景下的inet_ntoa函数绑定失败问题TCP协议通讯流程数据传输的过程数据交互四次挥手的过程端口连接 简单的TCP英译汉服务器 之前我们是以回调的方式处理任务的&#x…

再谈启动一个Activity大致时序图

太多了&#xff0c;笔者不想写&#xff0c; 读者可通过PlantUML插件查看如下PUML文件生成的时序图。 补充说明下&#xff0c;Android31版本。 startuml https://plantuml.com/sequence-diagram skinparam dpi 800 scale 15000 width scale 5000 heightautonumber Launcher La…

AJAX-入门

定义 概念&#xff1a;AJAX是浏览器与服务器进行数据通信的技术 使用 1.先使用axios库&#xff0c;与服务器进行数据通信 1&#xff09;基于XMLHttpRequest封装、代码简单、月下载量在14亿次 2&#xff09;Vue、React项目中都会用到axios 2.再学习XMLHttpRequest对象的使用…

学习日志以及个人总结 (16)

共用体 共用体 union 共用体名 { 成员列表&#xff1b; }&#xff1b;//表示定义一个共用体类型 注意&#xff1a; 1.共用体 初始化 --- 只能给一个值&#xff0c;默认是给到第一个成员变量 2.共用体成员变量辅助 3.可以判断大小端 ----※&#xff01;&#xff01; 实际用途…

Flask框架开发学习笔记《5》简易服务器代码

Flask框架开发学习笔记《5》 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 简易服务器代码 接口解析那一块很关键&#xff0c;学后端服务器这一块&#xff0c;感觉主要就是学习相应地址的接口怎么处理。 然后写清楚每个地址…

第96讲:MySQL高可用集群MHA的核心概念以及集群搭建

文章目录 1.MHA高可用数据库集群的核心概念1.1.主从复制架构的演变1.2.MHA简介以及架构1.3.MHA的软件结构1.4.MHA Manager组件的启动过程1.5.MHA高可用集群的原理 2.搭建MHA高可用数据库集群2.1.环境架构简介2.2.搭建基于GTID的主从复制集群2.2.1.在三台服务器中分别搭建MySQL实…

C#验证字符串是正整数还是负整数,正则表达式vs用Char.IsDigit 方法遍历字符数组

目录 一、使用的方法 1.正则表达式 2.Char.IsDigit 方法 二、源码 1.源代码 2.生成效果 一、使用的方法 1.正则表达式 使用正则表达式Regex类的IsMatch方法&#xff0c;可以有效地判断用户输入的信息是否为有符号整数。 用于判断字符串是否有符号整数的正则表达式…

Maya------显示隐藏提取复制刺破面

alth<--->ctrlshifth 补洞后刺破面&#xff0c;防止多边面的产生&#xff01;

【C/C++ 09】万年历

一、题目 输入一个年份&#xff0c;以日历的格式打印这一年的所有天数&#xff0c;需要正确的表示每一天是周几。 二、算法 以公元1年1月1日作为万年历的起始日期&#xff0c;公元1年1月1日是周一&#xff0c;所以算法的核心就是就算某一天距离起始日期的天数差&#xff0c;然…

Android14之Selinux报错:unknown type qemu_device at token (一百八十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

17.STL 库(C++)plus

STL 库&#xff08;C&#xff09; 文章目录 STL 库&#xff08;C&#xff09;1.迭代器1.1 概述和分类1.2案例 2.C 的 string 类型2.1string 概述2.2 string 构造函数2.3 string 赋值操作2.4string存取字符串操作2.5string拼接操作2.6 string 查找和替换2.7string 比较操作2.8st…

AJAX-axios错误处理

场景&#xff1a; 处理&#xff1a;用更直观的方式&#xff0c;给普通用户展示错误信息 语法&#xff1a;在then方法的后面&#xff0c;通过点语法调用catch方法&#xff0c;传入回调函数并定义形参 axios({//请求选项}).then(result> {//处理数据}).catch(error>{//处理…