首页/新闻资讯/正文详情

窗口的本质

发布时间:2026/9/24 9:28:38 来源:云帆数科 栏目:资讯中心
窗口的本质
窗口的本质前置基础1虚拟内存● 每个进程 4GB 虚拟地址0x00000000 ~ 0xFFFFFFFF● 用户空间0x00000000 ~ 0x7FFFFFFF低 2GB进程私有● 内核空间0x80000000 ~ 0xFFFFFFFF高 2GB所有进程共享2模块划分● 内核模块内核空间○ ntoskrnl.exe进程、线程、内存管理核心○ win32k.sys图形界面、窗口消息、GDI 底层实现所有进程共享● 用户模块用户空间每个进程独立○ kernel32.dll进程线程内存基础 API○ user32.dll窗口、控件、消息○ gdi32.dll图形设备接口3API 调用链路用户程序 → DLL 接口 (kernel32/user32/gdi32) → 内核模块真正实现句柄对比HANDLE 与 HWND类型维护者句柄表跨进程生命周期用途HANDLE各个内核对象进程私有句柄表❌无效进程关闭自动销毁进程、线程、互斥体、事件等内核对象HWNDwin32k.sys全局共享句柄表✅全系统有效窗口销毁才失效窗口、控件重点HWND 是全局的A 进程拿到的窗口句柄B 进程可以直接使用4. GDI 绘图核心概念1设备对象 (HWND) 绘图目标代表 “画在哪里”可以是窗口、桌面Spy 可以抓取 HWND2设备上下文 HDCDevice Context内存绘图缓冲区所有 GDI 绘图必须依赖 HDC● 获取HDC GetDC(HWND hwnd)● 释放ReleaseDC(HWND hwnd, HDC hdc)● 双缓冲先内存绘图再输出到屏幕3GDI 图形对象选入 DC 使用对象作用创建函数Pen 画笔线条颜色、粗细、线型CreatePen()Brush 画刷区域填充颜色图案CreateSolidBrush() / GetStockObject()Font 字体文字样式CreateFont()Bitmap 位图图片CreateBitmap()SelectObject(HDC hdc, HGDIOBJ hgdiobj)● 将 GDI 对象选入 DC返回旧对象句柄● DC 同一时刻每类对象只能有一个生效● 绘图完成要恢复旧对象销毁自定义 GDI 对象否则发生GDI 资源泄漏5. 画笔 CreatePenHPENCreatePen(intstyle,intwidth,COLORREF color);线型○ PS_SOLID 实线○ PS_DASH虚线、PS_DOT点线、PS_DASHDOT点划线虚线 / 点线宽度必须≤1宽度逻辑像素填 0 代表强制 1 像素颜色COLORREF RGB(r,g,b)r/g/b 范围 0‑255FF示例CreatePen(PS_SOLID,5,RGB(255,0,0)); //5像素红色实线6. GetStockObject 获取系统预置 GDI 对象HGDIOBJGetStockObject(intnIndex);常用参数● BLACK_BRUSH黑色画刷、WHITE_BRUSH白色画刷● NULL_BRUSH / HOLLOW_BRUSH空心画刷● DC_BRUSH可动态改色的画刷配合SetDCBrushColor()系统预置对象不需要必须 DeleteObject写 DeleteObject 也无害7. 关键绘图 API1画线MoveToEx(hdc,x1,y1,NULL);//设置起点LineTo(hdc,x2,y2);//画到终点2绘制矩形Rectangle(hdc,left,top,right,bottom);● 边框由当前 DC 的画笔控制● 内部填充由当前 DC 的画刷控制坐标原点 (0,0)绘图目标窗口左上角标准 GDI 绘图完整示例代码#includewindows.hvoidDrawDemo(HWND hwnd){//1.获取DCHDC hdcGetDC(hwnd);//2.创建5像素红色实线画笔HPEN hPenCreatePen(PS_SOLID,5,RGB(255,0,0));//3.获取系统可变色画刷HBRUSH hBrush(HBRUSH)GetStockObject(DC_BRUSH);//4.把对象选入DC保存旧对象HGDIOBJ oldPenSelectObject(hdc,hPen);HGDIOBJ oldBrushSelectObject(hdc,hBrush);//修改画刷颜色为黄色SetDCBrushColor(hdc,RGB(255,255,0));//绘制400*400矩形Rectangle(hdc,0,0,400,400);//资源恢复与释放【重中之重】//恢复DC原来的对象SelectObject(hdc,oldPen);SelectObject(hdc,oldBrush);//销毁自定义GDI对象DeleteObject(hPen);//GetStockObject获取的对象可不删除//DeleteObject(hBrush);//释放设备上下文ReleaseDC(hwnd,hdc);}注意直接在窗口外部调用绘图窗口被遮挡、最小化再还原时绘制内容会消失原因窗口内容是实时绘制窗口重绘消息WM_PAINT到来会刷新界面真正绘图要写在 WM_PAINT 消息内部总结窗口本质窗口没有永久保存图像所有像素都是 GDI 实时绘制出来。窗口被遮挡后内容丢失需要响应WM_PAINT重绘HDC用完必须ReleaseDC自己 Create 出来的 GDI 对象必须DeleteObject否则 GDI 泄漏SelectObject一定要保存旧对象结束前还原回 DC不能直接选入新对象不管HWND全局有效普通HANDLE只属于本进程画笔控制线条边框画刷控制填充画矩形、椭圆这类闭合图形两者同时生效

相关推荐

Airbyte source-youtube-data 连接器工程剖析:增量策略、错误处理与配额治理实战
Airbyte source-youtube-data 连接器工程剖析:增量策略、错误处理与配额治理实战

数据工程数据集成ETL后端大数据 【免费下载链接】airbyte Open-source data movement for ELT pipelines and AI agents — from APIs, databases & files to warehouses, lakes, and AI applications. Both self-hosted and Cloud. 项目地址: https://gitcode.… · 2026/9/24 9:28:37

自适应斜坡补偿:如何兼顾峰值电流模式稳定与动态响应
自适应斜坡补偿:如何兼顾峰值电流模式稳定与动态响应

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 9:28:19

灵兮REC直播录制软件(PC+APP)
灵兮REC直播录制软件(PC+APP)

支持抖音直播录制、虎牙直播录制、斗鱼直播录制、B站直播录制、来秀直播、Sooplive、PandaTV等 40多个国内外平台。 一键添加,开播即录,批量录制,全程不用管。软件获取:linxhub.vip · 2026/9/24 9:28:13

STM32迁GD32F103完整烧录指南:ST-Link配置与BOOT0避坑
STM32迁GD32F103完整烧录指南:ST-Link配置与BOOT0避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 10:08:40

阿里发布真武V900芯片:单芯片性能3倍,2027年Q1量产
阿里发布真武V900芯片:单芯片性能3倍,2027年Q1量产

9月22日,在2026杭州云栖大会上,阿里平头哥发布了新一代训推一体 AI 芯片真武V900。官方说法是:单芯片性能是真武M890的3倍,是目前算力性能最强的中国自研 AI 芯片,将于2027年第一季度量产售卖。 关键参数先摆出来 架构… · 2026/9/24 10:08:34

猎头顾问如何选择猎头公司?2026年10月最新:国内猎头公司实力排行TOP10 榜单出炉!
猎头顾问如何选择猎头公司?2026年10月最新:国内猎头公司实力排行TOP10 榜单出炉!

对于猎头顾问来说,选对猎头公司,直接决定接单质量、佣金收益、成长空间,甚至职业天花板。同样是做猎头,有的猎头顾问苦于没有优质甲方岗位、分成低、回款慢;有的猎头顾问手握源源不断的真实高薪订单,把精力… · 2026/9/24 10:08:34

TMS320F28003x SPI寄存器配置详解与调试实战
TMS320F28003x SPI寄存器配置详解与调试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 10:08:33

I2C开漏输出与上拉电阻选型:从物理层到调试实战
I2C开漏输出与上拉电阻选型:从物理层到调试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 10:08:02

2026实测:智能体办公平台企业协同能力真实体验
2026实测:智能体办公平台企业协同能力真实体验

最近我一直在找能适配团队协作全流程的AI办公工具,之前试过不少只能支持单人生成内容的产品,每次AI产出结果之后,我都要手动把文件导出、重命名、再上传到团队共享的协作空间里,来回跳转不同App传输文件的过程特别消耗精力&#x… · 2026/9/24 10:06:41

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码