GDI编程基础
窗口和视口
视口是基于设备的采用的是设备坐标(单位:像素),窗口是基于程序的采用的是逻辑坐标(单位:像素/毫米/厘米等)。
在默认的映射模式下,视口是与窗口等同的。但是如果改变其映射模式,则其对应的单位则不相同。
一般映射模式
如果将映射模式改为MM_LOENGLISH或MM_LOMETRIC等,则1个设备坐标并不对应一个逻辑坐标,因为其单位不同。而且对于不同的映射模式而言其逻辑单位都是固定的。
可编程映射模式
如果将映射模式改为MM_ANISOTROPIC或MM_ANISOTROPIC,则其逻辑单位是可以自己决定的。那么如何设置其逻辑单位呢?
MM_ANISOTROPIC模式
对于此模式而言,其可以设置逻辑单位。且其表示各向异性,也就是说在逻辑坐标上横坐标的一个单位并不一定等于纵坐标的一个单位(当然也可以等于)。
CPaintDC dc(this);
dc.SetMapMode(MM_ANISOTROPIC); //设置映射模式
dc.SetWindowExt(10,10); //设置窗口范围
dc.SetViewportExt(20,20); //设置视口范围
dc.Ellipse(0,0,50,50);
以上代码通过设置窗口范围和视口范围来设置逻辑单位,其设置窗口范围为(10,10),视口范围为(20,20)。也就是横坐标上一个逻辑坐标表示2个设备坐标(即单位为2像素),纵坐标上也是一个逻辑坐标表示2个设备坐标(即单位为2像素)。其画出来的是一个直径为50 * 2 像素的圆形。

如果将视口范围改为(20,30),则纵坐标上一个逻辑坐标表示3个设备坐标(即单位为3像素)dc.SetViewportExt(20,30);,那么其画出来的就是一个短轴为50 * 2像素,长轴为50 * 3像素的椭圆。这就是此映射模式的各项异性特点,即横坐标上的单位不等于纵坐标的单位。

MM_ISOTROPIC模式
对于此模式而言,其也可以设置逻辑单位。且其表示各向同性,也就是说在逻辑坐标上横坐标的一个单位等于纵坐标的一个单位。
CPaintDC dc(this);
dc.SetMapMode(MM_ANISOTROPIC); //设置映射模式
dc.SetWindowExt(10,10); //设置窗口范围
dc.SetViewportExt(20,30); //设置视口范围
dc.Ellipse(0,0,50,50);
以上代码设置窗口范围为(10,10),视口范围为(20,30),但是因为其有各项同性,所以为使其横纵坐标单位相等需要取在横纵坐标上单位最小的一个。也就是1个逻辑单位对应2个设备单位(2个像素)。所以这里画的是个直径为50 * 2像素的圆形

逻辑坐标系和设备坐标系
设备坐标系是固定的单位1像素,原点位于客户区左上角。

逻辑坐标系的单位可以使像素/毫米/厘米等,原点和XY轴的方向也可以改变。GDI函数一般都是基于逻辑坐标的。
GDI编程基础的更多相关文章
- GDI 编程基础简介
今天准备重新对GDI的知识进行回顾一下,以便加深认识. 一.GDI 在进行Windows编程时,可能经常会用到设备描述表的类型句柄,例如,最厂家的HDC,它就是图像设备描述类型句柄.因为GDI的绘图函 ...
- C#GDI+编程基础(一:Graphics画布类)
GDI+存在的意义:将变成与具体硬件实现细节分开. GDI+步骤:获取画布,绘制图像.处理图像 命名空间: using System.Drawing;//提供对GDI+基本图形功能的访问 using ...
- C#GDI+编程基础(二)
pen类:绘制指定宽度和样式的直线.使用DashStyle属性绘制几种虚线,可以使用各种填充样式(包括纯色和纹理)来填充Pen绘制的直线,填充模式取决于画笔或用作填充对象的纹理. 创建画笔: //用指 ...
- C#_GDI+详细教程(图形图像编程基础)
第7章 C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1 GDI+绘图基础 编写图形程序时需要使用GDI( ...
- GDI+(一):GDI+ 绘图基础
一.GDI+绘图基础 编写图形程序时需要使用GDI(Graphics Device Interface,图形设备接口),从程序设计的角度看,GDI包括两部分:一部分是GDI对象,另一部分是GDI函数. ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记4——Direct3D编程基础
第11章 Direct3D编程基础 2D游戏是贴图的艺术,3D游戏是渲染的艺术.这句话在我学过了之前的GDI编程之后,前一句算是有所体会,现在是来理解后一句的时候了. 安装DirectX SDK配置啥 ...
- 第二章 Matlab面向对象编程基础
DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...
- [.net 面向对象编程基础] (1) 开篇
[.net 面向对象编程基础] (1)开篇 使用.net进行面向对象编程也有好长一段时间了,整天都忙于赶项目,完成项目任务之中.最近偶有闲暇,看了项目组中的同学写的代码,感慨颇深.感觉除了定义个类,就 ...
- Android开发4: Notification编程基础、Broadcast的使用及其静态注册、动态注册方式
前言 啦啦啦~(博主每次开篇都要卖个萌,大家是不是都厌倦了呢~) 本篇博文希望帮助大家掌握 Broadcast 编程基础,实现动态注册 Broadcast 和静态注册 Broadcast 的方式以及学 ...
随机推荐
- Linux Shell 统计一(行\列)数值的总和及行、列转换
(对一列数字求和) 在日常工作当中需要对文本过滤出来的数字进行求和运算,例如想统计一个MySQL分区表现在有多大 # ls -lsh AdPlateform#P#p*.ibd |grep G 2.6 ...
- 【java框架】SpringBoot(4)--SpringBoot实现异步、邮件、定时任务
1.SpringBoot整合任务机制 1.1.SpringBoot实现异步方法 日常开发中涉及很多界面与后端的交互响应,都不是同步的,基于SpringBoot为我们提供了注解方式实现异步方法.使得前端 ...
- Git 上传项目到 Github
Git 上传项目到 Github 该文章主要讲解Git 上传项目到 Github,Gitee同理 配置Git 下载.安装Git 下载后一路(傻瓜式安装)直接安装即可 如果第一次使用git的话,需要设置 ...
- (原创)高DPI适配经验系列:(一)缩放比例与DPI对应关系
一.前言 当下,2K分辨率已成为主流标配,3K.4K也已经广泛应用. 在屏幕尺寸不变的情况下,高分辨率也就意味着高DPI,对于桌面程序而言,除了先天就支持高DPI的框架外(如UWP.Electron等 ...
- HTML5和CSS3提高
一.HTML5的新特性 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签.新的表单和新的表单属性等. 这些新特性都有兼容性问题,基本是 IE9+ 以上版本的浏览器才支持,如果不考虑兼容 ...
- 学习笔记-vue+quill简单的后台demo
功能比较单一 https://github.com/opceclee/vue-quill
- day-03-基础数据类型
基础数类型总览 10203 123 3340 int +- * / 等等 '今天吃了没?' str 存储少量的数据,+ *int 切片, 其他操作方法 True False bool 判断真假 [12 ...
- 201871030125-王芬 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
- 201871010203-陈鹏昱 实验二 个人项目—《D{0-1}KP问题》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 运用科学高效的方法学习软件工程的理论和知识 这个作业在哪些方面帮助我实现学习目标 掌握软件项目个人开发流程,掌握G ...
- 周爱民带你深入剖析JavaScript核心原理
作为前端工程师必备技能,JavaScript 的重要性不言而喻.虽然易上手,但却有着诸多复杂微妙的机制,想要真正掌握绝非易事. 专栏面向JavaScript语言的实际应用者与深度爱好者,以讲述Java ...