深入分析MFC之GDI原理透析

4 轴穿越机 Mark5 机架全解析:从历史演进到电机桨叶选型指南 本文围绕 4 轴穿越机 Mark5 机架展开,先介绍其发展历程(2018 年初代到 2023 年五代,迭代优化轻量化、刚性与兼容性),再明确其核心参数(轴距 220mm、兼容 4-6 寸桨等)对电机桨叶的约束。 详解电机(KV 值、尺寸、推力等)与桨叶(尺寸、螺距、材质等)选型要点及匹配原则(高 KV 配小桨、低 KV 配大桨),给出推重比、功率等理论计算公式,结合新手练习、花飞、竞速、航拍等场景提供具体选型案例,最后提及安全、成本、法规等注意事项,为爱好者提供全面选型参考。 阅读详情

GDI阐述

GDI :Graph device interface  图形设备接口,应用程序调用图形编程的接口

为什么会使用GDI呢?

首先要理解显示器如何进行图像的显示,一般显示器把将要显示的内容存放在显存中(集成显卡一般使用内存,而独立显卡现在基本都使用独显),framebuffer就是用来存储显示的数据,由DMA自动读取数据将其显示在窗口中。而这里显示的只是一个个的像素点,通常是先显示一行的像素点,发出水平同步信号后,再显示下一行,当整个一屏幕的数据显示完全后,才会发出垂直同步信号,发出下一帧数据。

注意:这里显示任何图像,包括点,线,多边形,窗口等等,其实都是由像素一点点画出来的。

关键对于编程人员而言必须要懂得图形硬件接口的操作,就是必须懂得如何驱动底层,每当更换硬件或者升级硬件时,就需要重新写驱动接口,这对于上层应用的人而言,更无异于天灾人祸,因为很多上层开发人员并不懂得底层操作,而且底层图形设备千奇百怪,所以提供一个设备无关的接口是必须的。GDI就是这种有微软主推的图形接口,当然OpenGL等也可以的,现在主要探讨GDI,GDI其实也是一种二次封装,在底层驱动或者操作系统层次上的一个类库,SDK本身就提供了接口,而MFC又做了一次封装,使其操作更方便而起,而且更健壮。

注意:这里函数显示的时候并不是直接进行显示,而是将要显示的数据存储在设备描述表中处理好一个即将要显示的逻辑数据,然后再将此数据显示到窗口中,这样一来,可以处理字体,字型,颜色,不同窗口重叠显示等等

MFC如何使用GDI?

首先对于GDI而言,他并不是将图像直接显示在设备上,而是将显示的数据首先绘制在一个设备描述表DC中,这里面存储了显示图像的描述字段,包括物理设备和各种状态信息。画图前,先取得设备描述表句柄,然后再调用GDI输出函数进行输出并将句柄返回给GDI。

注意:其实GDI已经完成了数据流过程,就是将要显示的数据已经组织好,并放入指定位置,告诉DMA到这里取数据,然后显示。

MFC中只需先获取设备描述表对象指针,然后调用绘图函数即可。这又是什么意思呢?其实就是我要将数据流中间截断,把我想显示的数据放入,这样就可以输出我的数据。如何做呢?就是要获取数据流中对象,也就是设备描述表句柄,把他勾出来,使用他提供的函数进行绘制图像,然后把句柄再返回给GDI,有借有还再借不难,况且他人也要用这个句柄。看起来有点麻烦,其实MFC给我做好了的,CDC类直接将设备描述表和获取设备描述表句柄的GDI函数封装在一起了,我们只管使用。

那有那些设备描述句柄对象呢?

MFC提供了CDC类,如下一个例子

	CDC* pDC = GetDC();
	CRect rect;
	GetClientRect(&rect);
	pDC->DrawText(_T("hello MFC!"), &rect, DT_SINGLELINE| DT_CENTER | DT_VCENTER);
	ReleaseDC(pDC);
这里例子主要是显示一行数据”hello MFC“,这里声明了对象还需要释放,而GetDC只能在窗口客户区画图,GetWindowDC可以在窗口的任一地方画图,包括非客户区菜单栏,工具栏。另外在OnPaint函数中不能使用上面的获取和释放函数,使用如下的方式:
	PAINTSTRUCT ps;
	CDC *pDC = BeginPaint(&ps);
	pDC->Ellipse(100,100,400,400);
	EndPaint(&ps);

看到这里,发现获取方式设备描述表句柄好像多了,的确,幸亏MFC提供了如下分类的类:

CPaintDC :窗口客户区画图(OnPaint)

CClientDC:窗口客户区画图(非OnPaint)

CWindowDC:窗口任意地方画图(包括非客户区)

Win32 GDI 学习总结 Windows GDI 教程(一) 一个简单的绘图程序 http://www.tuicool.com/articles/jeMBZ3v 常见的图形编程库,除了 GDI 外还有 GDI+、OpenGL、DirectX等等,GDI 是其中最基础的一个库。所以 GDI 注定了不会有高级应用,有兴趣的就当刷低级怪吧。 在教程的最开始,需要简单的说明一些前置条件。 开发环境与 阅读详情

相关推荐

车载以太网-TC8测试

TC8测试的用例数量 TC8测试基本流程 TC8测试内容

天赐好车的博客 3527

MFC中使用GDI

GDI安装 需要一个.dll文件,具体是gdi32.dll还是gdiPlus.dll不清楚,我的电脑这两个文件都有,程序可以运行 目录 C:\WINNT\System32 新建一个MFC程序 我是VS版本是VS2017 15.9.36

Scarlett的博客 1242

深入理解MFC GDI绘图技术

本文还有配套的精品资源,点击获取 简介:MFC是用于简化Windows应用开发的C++库,而GDI提供了与硬件无关的图形绘制功能。本简介介绍了使用MFC中的GDI进行绘图的关键技术点,包括设备上下文、绘图对象、绘图函数、颜色管理、坐标系统、绘图状态、图形模式、图形变换和高级绘图技术等,旨在帮助开发者掌握如何利用这些技术点创建丰富多样的用户界面和图形内容。 1. MFC...

weixin_34598113的博客 1405

MFC GDI 图形设备接口函数

摘录多个CSDN博文,并梳理总结,仅供学习

wu_zhiyuan的博客 2781

MFC编程实验(二):GDI绘图

一、实验要求 以窗口中心点为原点,绘制y=x2的函数曲线,并在曲线旁边用文字描述; 绘制一个红色的圆,并绘制该圆的外切正方形,该正方形填充颜色为蓝色,边线颜色为绿色。 二、实验过程 (一)绘制y=x2的函数曲线 1、利用MFC新建一个基于对单文档的应用程序(SDI应用程序),工程名为Function。 2、在类视图中找到CfunctionVie,在这个文档的头文件中添加:#include "math.h" 3、在文件中找到下OnDraw()方法。在其中添加...

Blog of Mark 2012

MFC GDI绘图

MFC程序中如果你想要自绘一些图形,则需要在对话框的OnPaint()消息映射函数中通过GDI绘图技术自己去绘制图形。MFC的每个窗口都是一个CDC设备上下文对象,CDC类有许多绘图的接口,可以用这些接口去绘制点、直线、矩形、图像等。

滴水穿石的博客 895

37_MFC自绘UI你离不开GDI绘图

MFC自绘UI你离不开GDI绘图 GDI (Graphics Device Interface)是图形设备接口的英文缩写,处理Windows程序的图形和图像输出。程序员不需要关心硬件设备及设备驱动,就可以将应用程序的输出转换为硬件设备上的输出,实现应用程序与硬件设备的隔离,大大简化程序开发工作。在Windows操作系统中,图形界面应用程序通常离不开GDI,利用GDI所提供的众多函数可以方便地在屏幕、打印机以及其他输出设备上实现输出文本、图形等操作。 设备环境(DC) 设备无关性(也称设备独立性)是Windo

成长需要沉淀。 1571

MFC GDI+入门

1、GDIGDI+区别 GDI GDI+ 的区别 - DoubleLi - 博客园GDI+是GDI的下一个版本,它进行了很好的改进,并且易用性更好。GDI的一个好处就是你不必知道任何关于数据怎样在设备上渲染的细节,GDI+更好的实现了这个优点,也就是说,GDI是一个中低层API,你https://www.cnblogs.com/lidabo/p/3701252.html 2、MFC 初始化GDI+ MFC 初始化 GDI+_jiangqin115的专栏-CSDN博客1. 在stdafx.h文件中

tajon1226的专栏 2250

MFC】图形图像二:GDI对象之画笔CPen

01、目录 目录01、目录02、GDI简介03、CPen类(画笔介绍)04、CPen的应用实例:波形图05、小结 02、GDI简介 GDI:(Graphics Device Interfase)图形设备接口,是一个应用程序与输出设备之间的中介。 一方面,GDI向应用程序提供一个与设备无关的编程环境,另一方面,它又以设备相关的格式和具体的设备打交道。 在MFC中,CGdiObject类是GDI对象的基类,通过查阅MSDN我们可以看到,CGdiObject类有六个直接的派生类,GDI对象主要也是这六个,分别

Cain Xcy的博客 2106

MFC中的GDI/GDI+和双缓冲绘图

1、GDI概述   GDI在全称是Graphics Device Interface,即图形设备接口。是图形显示与实际物理设备之间的桥梁。         GDI使得用户无需关心具体设备的细节,而只需在一个虚拟的环境(即逻辑设备)中进行操作。它的桥梁作用体现在:      (1)用户通过调用GDI函数将逻辑空间的操作转化为具体针对设备驱动程序的调用。      为实现图形设

Invoker's Tower 8075

【第31节】MFC编程:GDI与控件绘制

此外,函数还得返回一个画刷句柄,这个画刷会在控件绘制之前,用来填充控件的客户区。随着复杂控件出现,引入了WM_NOTIFY消息,新的自绘方法也跟着出现了,这里面要处理NM_CUSTOMDRAW消息。每次绘制或擦除正在绘制的图像时,重新按顺序绘制之前的图形。这个NM_CUSTOMDRAW消息会发给父窗口,不过MFC有消息反射机制,能让消息在控件类里处理,这种绘制方式也叫“自定义绘制”。对CMyListCtrl类进行封装,能实现设置每行颜色的功能,但暂时不封装设置每列的功能,不过代码里会提到获取列的方法。

攻城狮7号的博客 1344

MFC GDI绘图基础

一.关于GDI的基本概念 什么是GDI? Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上。 在Windows操作系统中,动态链接库C:/WINDOWS/system32/gdi32.dll(GDI Client DLL)中定义了GDI函数,实现与设备无关的包括屏幕上输出像素、在打印机上输出硬拷贝...

u011555996的博客 715

gdi gdiplus directx

GDI在Windows中定义为Graphics Device Interface,即图形设备接口,是Windows API(Application Programming Interface)的一个重要组成部分。它是Windows图形显示程序与实际物理设备之间的桥梁,GDI使 得用户无需关心具体设备的细节,而只需在一个虚拟的环境(即逻辑设备)中进行操作。它的桥梁作用体现在: (1)用户通过调用GDI函数将逻辑空间的操作转化为具体针对设备驱动程序的调用。 为实现图形设备无关性

Bob's Plife 2565

Windows7的图形架构与DX的那点事

<br />原文链接 : 2D Drawing APIs in Windows<br />    在 Windows 7 操作系统中,微软花费了很大的力气构建了一套新的 2D 绘图 API。我们称之为 Direct2D ,隶属于 DirectX 家族。这个 API 的开发填补了 Windows 图形平台的一些缺陷。其中非常重要的一点就是普通的 2D 程序渲染不再缺乏硬件加速。而在 Windows Vista 中,我们知道 GDI 是无法进行硬件加速的。微软寄望于开发的这个 API 具备很多现代特性。比如支持

痞子龙3D编程 2846

MFC中的GDI绘图

一.关于GDI的基本概念什么是GDI         Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上。    在Windows操作系统中,动态链接库C:/WINDOWS/system32/gdi32.dll(GDI Client DLL)中定义了GDI函数,实现与设备无关的包括屏幕上输出像素、在打印机上输出硬拷贝以及绘制Windows用户界面功能。在Visual C++6.0中的头文件C:/Program Fi

RNAMatrix的专栏 4114

MFC GDI 绘图模式、映射模式、画笔、笔、字体

本文详细介绍了GDi绘图模式,映射模式及GDI接口类CBrush、CFont、CBrush。

billliu66的博客 1645

C++ MFC/BCG编程(六):GDI对象(CPen、CBrush)与基础绘图 (绘图模式、映射模式)

MFC中,CGdiObject类是GDI对象的基类,CGdiObject类有六个直接的派生类,GDI对象主要也是这六个,分别是:CBitmap、CBrush、CFont、CPalette、CPen和CRgn。

qq_39281631的博客 1181

OBS 文本(GDI+) 底层逻辑

一,GDI+(obs编译说明:https://github.com/obsproject/obs-studio/wiki/Install-Instructions#windows-build-directions) 此插件主要用GDI+ 进行文字的绘制 GDI+是微软提供的新的图形设备接口,通过托管代码的类来展现。GDI+主要提供了三类服务: 二维矢量图形 图像处理 文字显示 ...

qthello 1886

基于CNN的通信信号调制识别系统实现(Python源码与项目详解)

基于卷积神经网络的通信信号调制模式分类研究(完整代码与实施方案)。本研究提供全套Python实现代码及详尽的技术文档,采用深度卷积网络架构对多种通信调制格式进行自动化辨识。 在技术实现层面,该项目将通信信号表征为二维星座图,通过构建多层卷积网络结构进行特征学习与模式判别。具体实施过程包含四个核心环节:首先利用仿真工具生成标准化的星座图样本库,执行图像尺寸统一与数据归一化等预处理操作;随后设计具有层级化特征的网络架构,包含特征抽取模块(卷积层与池化层组合)与分类决策模块(全连接层);继而采用误差反向传播机制对网络参数进行迭代优化,并通过独立测试集验证模型泛化性能;最终通过混淆矩阵、准确率曲线等可视化手段对分类结果进行量化评估。 操作流程需预先配置Python运行环境,安装深度学习框架及相关数值计算库。执行时按顺序启动数据生成、网络训练、性能验证三个核心模块。研究者可根据实际需求调整网络深度、卷积核尺寸、学习率等超参数,建议采用渐进式调参策略以平衡模型复杂度与泛化能力。 本方案适用于以下场景:作为深度学习在通信信号处理领域的教学案例,为相关算法研究提供基准实现框架,或作为学术课题与工程实践的参考模板。需注意数据处理阶段可能产生较大计算负载,建议在具备充足内存资源的平台上运行。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

上一篇: 深入分析MFC消息映射
下一篇: Linux内核启动卡在“Uncompressing Linux... done, booting the kernel.”
comwise
博客等级 码龄15年 58粉丝 85原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值