第七篇 GDI编程

gdi编程基础 一. DC 1. 概念 设备上下文:通俗来说就是,我们在绘图时用来响应软,硬件消息的媒介。MFC为我们封装了CDC类,那我们就结合MSDN来学习,就显得不会那么乱了。 2. CDC,CPaintDC, CClientDC, CWindowDC,CMetaFileDC CDC:DC的基类。 CPaintDC:跟进下源代码,发现本质上调用了BeginPaint()和E... 阅读详情

学过8086汇编的人基本都写过向控制台输出的程序吧!我们是向内存的一些特殊区域写,然后直接会显示在屏幕

上。Windows的来临使得我们不能直接操作内存。基于Windows的图形编程当然不可能还像8086那样了。

 

在GDI编程时,我们不会再去关注是针对何种硬件的了,一切硬件设备都被看成是虚拟的。Windows提供给用户

一系列的接口函数,用户对硬件的操作,都变成了使用这些函数,函数的执行是由Windows来处理的。

 

一、GDI编程的两种模式

 

二、代码示例中用到的是模式A

函数 _WinMain中设置了两个窗口,一个消息循环以及申请了一个定时器。定时器每隔100ms重绘窗口的客户区。

.386
.model	flat,stdcall
option	casemap:none

include		windows.inc
include		gdi32.inc
includelib	gdi32.lib
include		user32.inc
includelib	user32.lib
include		kernel32.inc
includelib	kernel32.lib

ID_TIMER	equ	1

.data?
hInstance	dd	?
hWin1		dd	?
hWin2		dd	?

.const
szClass1	db	'SourceWindow',0
szClass2	db	'DestWindow',0
szCaption1	db	'请尝试用别的窗口覆盖本窗口!',0
szCaption2	db	'本窗口图像拷贝自另一窗口!',0
szText		db	'Win32 Assembly!',0

.code
_ProcTimer	proc	_hWnd,uMsg,_idEvent,_dwTime
		local	@hDc1,@hDc2
		local	@stRect:RECT

		invoke	GetDC,hWin1
		mov	@hDc1,eax
		invoke	GetDC,hWin2
		mov	@hDc2,eax
		invoke	GetClientRect,hWin1,addr @stRect
		invoke	BitBlt,@hDc2,0,0,@stRect.right,@stRect.bottom,\
			@hDc1,0,0,SRCCOPY
		invoke	ReleaseDC,hWin1,@hDc1
		invoke	ReleaseDC,hWin2,@hDc2

		ret
_ProcTimer	endp
		
_ProcWinMain	proc	uses ebx edi esi,hWnd,uMsg,wParam,lParam
		local	@stPs:PAINTSTRUCT
		local	@stRect:RECT
		local	@hDc

		mov	eax,uMsg
		mov	ecx,hWnd

		.if	eax == WM_PAINT && ecx == hWin1
			invoke	BeginPaint,hWnd,addr @stPs
			mov	@hDc,eax
			invoke	GetClientRect,hWnd,addr @stRect
			invoke	DrawText,@hDc,addr szText,-1,\
				addr @stRect,\
				DT_SINGLELINE or DT_CENTER or DT_VCENTER
			invoke	EndPaint,hWnd,addr @stPs
		.elseif	eax == WM_CLOSE
			invoke	PostQuitMessage,NULL
			invoke	DestroyWindow,hWin1
			invoke	DestroyWindow,hWin2
		.else
			invoke	DefWindowProc,hWnd,uMsg,wParam,lParam
			ret
		.endif

		xor	eax,eax

		ret
_ProcWinMain	endp

_WinMain	proc
		local	@stWndClass:WNDCLASSEX
		local	@stMsg:MSG
		local	@hTimer

		invoke	GetModuleHandle,NULL
		mov	hInstance,eax
		invoke	RtlZeroMemory,addr @stWndClass,sizeof @stWndClass

		invoke	LoadCursor,0,IDC_ARROW
		mov	@stWndClass.hCursor,eax
		push	hInstance
		pop	@stWndClass.hInstance
		mov	@stWndClass.cbSize,sizeof WNDCLASSEX
		mov	@stWndClass.style,CS_HREDRAW or CS_VREDRAW
		mov	@stWndClass.lpfnWndProc,offset _ProcWinMain
		mov	@stWndClass.hbrBackground,COLOR_WINDOW + 1
		mov	@stWndClass.lpszClassName,offset szClass1
		invoke	RegisterClassEx,addr @stWndClass
		invoke	CreateWindowEx,WS_EX_CLIENTEDGE,offset szClass1,\
			offset szCaption1,WS_OVERLAPPEDWINDOW,\
			450,100,300,300,\
			NULL,NULL,hInstance,NULL
		mov	hWin1,eax
		invoke	ShowWindow,hWin1,SW_SHOWNORMAL
		invoke	UpdateWindow,hWin1

		mov	@stWndClass.lpszClassName,offset szClass2
		invoke	RegisterClassEx,addr @stWndClass
		invoke	CreateWindowEx,WS_EX_CLIENTEDGE,offset szClass2,\
			offset szCaption2,WS_OVERLAPPEDWINDOW,\
			100,100,300,300,\
			NULL,NULL,hInstance,NULL
		mov	hWin2,eax
		invoke	ShowWindow,hWin2,SW_SHOWNORMAL
		invoke	UpdateWindow,hWin2

		invoke	SetTimer,NULL,NULL,100,addr _ProcTimer
		mov	@hTimer,eax

		.while	TRUE
			invoke	GetMessage,addr @stMsg,NULL,0,0
			.break	.if eax == 0
			invoke	TranslateMessage,addr @stMsg
			invoke	DispatchMessage,addr @stMsg
		.endw

		invoke	KillTimer,NULL,@hTimer
		ret

_WinMain	endp

start:
		call	_WinMain
		invoke	ExitProcess,NULL

		end	start

 

三、运行结果

 

 

GDI+编程简介 1.引言 GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用GDI+,因为GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新的功 阅读详情

相关推荐

GDI+编程基础【收集整理】

  一、MFC使用GDI+编程设置 (1)增加静态库文件GdiPlus.lib在VC2005“项目/*属性”菜单项,打开项目的属性页窗口,先选“所有配置”,再选“配置属性/链接器/输入”项。在右边上部的“附加依赖项”栏的右边,键入GdiPlus.lib 后按“应用”钮,最后按“确定”钮关闭对话框。当然,我们也可以在代码中使用#pragma comment( lib, "gdip

WINCOL的专栏 3521

GDI 编程入门

Window下的GDI编程

记录生命的轨迹 4539

GdiplusFlat(1)GDI+平面API:用GDI的思想进行GDI+编程

坚信GdiplusFlat比Gdiplus好!我要在资料匮乏的GdiplusFlat上打下一片天地!没有api文档?我去百度找,就算把那些其他不支持GDI+类的语言中用GdiplusFlat的例子翻出来看,头文件里函数和结构没有声明?我自己声明!实在不行?我把你们这些GdiplusFlat函数一个个从dll里load进来直接动态调用!! GDI+(Gdiplus)想必大家都不陌生,MSDN给出的解释是 Windows GDI+ is a class-based API for C/C++ program

zuishikonghuan的博客 3912

简易版“推箱子”游戏

简易版“推箱子”游戏 此项目适合java初学者练习,需要用到二维数组,循环语句,判断语句等。 package game; import java.util.Random; import java.util.Scanner; public class txz { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); Ra

m0_51578236的博客 418

使用GDI+编程

1.引言GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用GDI+,因为GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新的功能

wangyh专栏 1247

Windows图形编程——GDI

游戏开发04 目的:初步掌握Windows图形编程技术,学习应用图形设备接口(GDI)进行实际的图形图像编程,重点掌握常用的GDI绘图函数。 完成的任务 完成创建DDB位图的函数CreateBlankBMP()实现代码; 完成位图加载函数LoadBmp()实现代码; 完成创建DIB位图的函数CreateBlankBMP()实现代码; 实际应用BitBlt()函数、StretchBlt()函数或A...

weixin_41843069的博客 1626

win32GDI位图编程实现推箱子小游戏

上一篇博客用GDI函数实现推箱子,虽然形象化上有所进步,但在自由度上还是有限制。 于是转用GDI位图,想什么样的形状,就画什么样的形状, 不再受限于绘图函数的束缚,自由自在,所思即所达。 改版后的界面如下图: 代码修改也很简单,在前例的基础上,只是修正了如下代码: void DrawBox(HDC hdc,int i,int x,int y) { SelectObject

零千刻的博客 2238

C++自学指南:掌握GDI和GDI+图形编程

色彩管理是图像处理中的一个重要组成部分,特别是在图形用户界面和打印领域中。GDI+支持多种色彩模型,如RGB和CMYK。RGB(红绿蓝)模型是加色模型,常用于计算机屏幕和其他电子显示设备。它通过红、绿、蓝三原色的组合和光的加法混合生成广泛的色彩。CMYK(青、品红、黄、黑)模型是减色模型,通常用于印刷和打印行业。它使用青、品红、黄和黑色油墨吸收光线,从而形成不同的颜色。在GDI+中,根据不同的输出需求,我们可以灵活选择不同的色彩模型。

weixin_42589700的博客 1284

如何用C++和图形库制作一个简单的推箱子小游戏?

如何用C++和图形库制作一个简单的推箱子小游戏? 推箱子是我们小时候经常会玩的很简单的小游戏,在小神机的年代里,推箱子小游戏非常风靡,对于已经掌握了一定编程知识的你,简单地模仿这个游戏进行创作一定不是难事,那么我们现在尝试去制作它吧! 编程语言:C++ 图形库:graphics.h (图形库的安装教程参考:Visual Studio C++/C 教你四步安装graphics图形库) 一、前期分析 对于推箱子小游戏,我们需要考虑有几个游戏角色,易知,我们需要设置的是: 空地、箱子、墙壁、人、箱子要到达

chuaxli的博客 1333

VC++ GDI图形编程实践教程

本文还有配套的精品资源,点击获取 简介:VC++ GDI图形编程是一种在Windows环境下用于图形和图像处理的技术。GDI API集提供接口与硬件交互,MFC库则对其进行封装以便使用。本教程介绍了GDI编程基础,包括设备上下文(DC)、绘图对象、坐标系统、绘图函数及颜色和模式的设置。同时,探讨了GDI在用户界面设计、图形绘制、图像处理、打印支持和动画制作方面的应用,并通过...

weixin_42576410的博客 1911

GDI+初始化与使用教程:图形编程的现代方法

本文还有配套的精品资源,点击获取 简介:GDI+是Windows平台上的图形编程API,为2D图形绘制、图像处理和文本渲染提供高级功能。本指南详细介绍了如何在C++中初始化和使用GDI+,包括链接必要的库和头文件,以及实现基本的图形绘制。通过教程,开发者可以掌握使用GDI+进行图形编程的基本技能,并确保资源正确释放。 1. GDI+简介与优势 GDI+的起源 ...

weixin_35886636的博客 2752

GDI+编程小结

GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息。 GDI+不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为Windows图形图像程序开发的首选。 一、...

积累点滴,保持自我 5873

零信任架构实战:“持续验证+动态授权”全流程解析(附策略引擎联动图)

《零信任实战指南:7图拆解核心流程与行业案例》摘要:本文通过7张架构图系统解析零信任五大核心流程:强身份认证、设备检查、动态授权、持续监控和自动降权。对比金融(重数据审计)与制造业(重物理绑定)的落地差异,指出三大常见误区及解决方案。数据显示,零信任可使安全响应提速60%,泄露成本降低45%。文章提供6个月实施路线图,强调零信任是"智能信任"体系,建议企业分阶段改造,优先保护核心系统。附赠金融/制造行业策略模板及甘特图示例。(149字)

sara_han的博客 780

GDI编程

GDI编程 一、GDI相关概念 1、GDI(Graphics Device Interface):图形设备接口,是一个应用程序与输出设备之间的中介。它提供了一套函数库,这些函数在不同的输出设备上输出图形和文字。一方面,GDI向应用程序提供一个与设备无关的编程环境,另一方面,它又以设备相关的格式和具体的设备打交道。 2、DC (Device Context):设备描述表(设备上下文

woshisaoge的专栏 1113

学习笔记——神经科学的数学基础

m%3D2X_%7Bi%7DiNy%3DAxW%3DABx_%7Bj%7Dy_%7Bi%7Dy%3DWxt=N7T8卷积神经网络(CNN)详细介绍及其原理详解_IronmanJay的博客-优快云博客https://blog.youkuaiyun.com/IronmanJay/article/details/128689946?

zxyopenstar的博客 1374

百度贴吧爬虫实战:完整实现与使用指南

使用 csv 模块创建写入器,首先写入表头("标题" 和 "链接"),然后遍历帖子字典,将每个标题和链接作为一行写入文件。首先检查内容是否为空,然后通过查找 JSON 结构的起始({)和结束(})位置,提取有效的 JSON 片段。接着遍历帖子列表中的每个条目,提取标题文本和对应的链接,对于相对路径的链接会自动补全为完整的 URL。从 JSON 提取标题和链接此方法专门用于从解析后的 JSON 数据中提取帖子标题和对应的链接。提取到的标题和链接以字典形式返回,键为标题,值为对应的完整链接。

qq_63736560的博客 2018

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

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

攻城狮7号的博客 1354

MATLAB实现灰雁优化算法(GGO):从原理到实战的详细级教程

灰雁优化算法(GGO)是一种新型群体智能算法,模拟灰雁迁徙和觅食行为。算法通过领导更替机制、V形编队飞行和群体觅食策略,平衡全局探索与局部开发能力,具有收敛精度高、避免局部最优等特点。在MATLAB环境中,算法实现包括初始化种群、迭代更新领导雁、执行编队飞行和觅食行为等核心模块。用户可根据问题维度设置参数,通过收敛曲线和可视化分析评估性能。关键参数如领导更替频率、V形编队强度和觅食强度需根据问题复杂度调整,以获得最佳优化效果。该算法适用于各类优化问题,具有较好的鲁棒性和稳定性。

fx666_的博客 1212

GDI+编程基础(一)GDI+ Vs GDI

一、GDI  GDI是位于应用程序与不同硬件之间的中间层,这种结构让程序员从直接处理不同硬件的工作中解放出来,把硬件间的差异交给了GDI处理。GDI通过将应用程序与不同输出设备特性相隔离,使Windows应用程序能够毫无障碍地在Windows支持的任何图形输出设备上运行。例如,我们可以在不改变程序的前提下,让能在Epson点式打印机上工作的程序也能在激光打印机上工作。它把windows系统中的图形

人在旅途/章鸽 的专栏 987

粒子滤波在基于误差状态量的INS/GNSS组合导航中的使用技巧-On Particle Filter based Error-State INS/GNSS Intergrated Navigation

本文面向以15维惯导(INS)误差为状态量,3维位置误差为量测量的INS/GNSS组合导航系统,​在西工大严恭敏老师的开源工具箱中PF相关库函数基础上实现基于粒子滤波(PF)的惯导误差状态量的递推估计,设计了粒子重置环节并强调了其在本特定场景下的重要性。

I33D33I的博客 1744

海康Visionmaster-全局脚本:VM 加载方案后自动执行 的方法,如何让VM在方案加载后自动执行流程?

海康Visionmaster-全局脚本:VM 加载方案后自动执行 的方法,如何让VM在方案加载后自动执行流程?

视觉人机器视觉的博客 2039

windows编程 GDI

GDI GDI:即图形设备接口,英文全称 Graphics Device Interface,简称GDI,GDI绘图效率低,是和Directx和openGL相比, GDI+ GDI+ 由于是GDI基础上再次开发,比GDI高层,也就是距离底层远,执行效率低,GDI+不适合应用游戏 GDI特定 GDI 实现一套通用的图形对象,来向屏幕,内存甚至打印机进行绘图操作,GDI的特点: 不允许程序直接访问物理显示硬件,通过称为“设备环境”的抽象接口间接访问显示硬件 程序需要与显示硬件进行通讯时,必须首先获得与特定窗口

qq_29498749的博客 844

《AI 时代FPGA的全栈开发实战・从入门到精通》专栏启动说明

《智驱FPGA》专栏面向初学者,聚焦AI时代FPGA开发新范式,以ChatGPT、ICCoder2.0等工具全程辅助,覆盖纯逻辑、Zynq软硬协同、端侧AI加速、高速接口等核心方向。通过126节图文+14个实战项目,传授AI生成代码、Prompt工程、时序优化等能力,助力学员从零成长为具备工程竞争力的FPGA工程师,结业可独立完成完整项目并写入简历。

现任某外企的算法工程师!专注于人工智能、嵌入式、FPGA、论文写作四大主题的教程和经验分享!辅导请➕v :sci666888999 175

Windows编程日志7——GDI编程基础

Windows GDI编程基础摘要 GDI(Graphics Device Interface)是Windows的传统绘图系统,提供设备无关的2D绘图功能。核心概念包括: HDC(设备上下文):代表绘图目标,如屏幕、打印机或内存位图 GDI对象:包括HPEN(画笔)、HBRUSH(画刷)、HBITMAP(位图)和HFONT(字体) 绘制流程:在WM_PAINT消息中通过BeginPaint/EndPaint获取和释放HDC GDI优势在于设备兼容性好、简单业务实现方便,但存在性能局限,现代应用推荐使用Dir

charlie114514191的博客 1624

Android 13.0 app进程保活白名单功能实现

在13.0的系统rom产品开发中,在某些重要的app即使进入后台,产品需求要求也不想被系统杀掉进程,需要app长时间保活,就是app进程保活白名单功能的实现, 所以需要在系统杀进程的时候不杀掉白名单的进程,接下来就看怎么样来实现这些功能

安卓兼职framework和app工程师的博客 3143

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 第六篇 Windows定时器
下一篇: spartan-3e starter kit board 入门
lulipeng_cpp
博客等级 码龄15年 169粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值