Windows映射模式及相关问题的解决

Windows应用程序绘制图形时使用的是一种逻辑单位,每个逻辑单位的大小由映射模式决定, 这个逻辑单位既可以与设备单位(屏幕或打印机上的一个像素点)相同,也可以是一种物理单 位(如毫米),还可以是用户自定义的一种单位。在Windows应用程序中,只要与输出有关系,都 要使用映射模式。本文的目的是帮助读者了解映射模式的一些基本知识,并对在使用中经常 出现的一些问题提出解决方案。

一、映射模式基本知识

当Windows应用程序在其客户区绘制图形时,必须给出在客户区的位置,其位置用x和y 两个坐标表示,x表示横坐标,y表示纵坐标。在所有的GDI绘制函数中,这些坐标使用的是一 种"逻辑单位"。当GDI函数将输出送到某个物理设备上时,Windows将逻辑坐标 转换成设备坐标(如屏幕或打印机的像素点)。逻辑坐标和设备坐标的转换是由映射模式决 定的。映射模式被储存在设备环境中。GetMapMode函数用于从设备环境得到当前的映射模 式,SetMapMode函数用于设置设备环境的映射模式。

1.逻辑坐标

逻辑坐标是独立于设备的,它与设备点的大小无关。使用逻辑单位,是实现"所见即所得"的基础。当程序员在调用一个画线的GDI函数LineTo,画出25.4mm(1英寸) 长的线时,他并不需要考虑输出的是何种设备。若设备是VGA显示器,Windows自动将其转化为96个像素点;若设备是一个300dpi的激光打印机,Windows自动将其转化为300个像素点。

2.设备坐标

Windows将GDI函数中指定的逻辑坐标映射为设备坐标,在所有的设备坐标系统中,单位以像素点为准,水平值从左到右增大,垂直值从上到下增大。

Windows中包括以下3种设备坐标,以满足各种不同需要:

(1)客户区域坐标,包括应用程序的客户区域,客户区域的左上角为(0,0)。

(2)屏幕坐标,包括整个屏幕,屏幕的左上角为(0,0)。屏幕坐标用在WM_MOVE消息中(对于非子窗口)以及下面的Windows函数中:CreateWindow和MoveWindow(都对于非子窗口)、GetMessage、GetCursorPos、GetWindowRect、WindowFromPoint和SetBrushOrg中。用函数ClientToScreen和ScreenToClient可以将客户区域坐标转换成屏幕区域坐标,或反之。

(3)全窗口坐标,包括一个程序的整个窗口,包括标题条、菜单、滚动条和窗口框,窗口的左上角为(0,0)。使用GetWindowDC得到的窗口设备环境,可以将逻辑单位转换成窗口坐标。

时间: 2024-09-22 19:16:20

Windows映射模式及相关问题的解决的相关文章

Windows 映射模式

一. 映射模式这是一个初级话题,但好像很多人都没有弄明白,因为几乎每过几天就有人发帖问这个.半年前有人问我这个问题时就想写这篇文章了,但一直觉得没有时间(因为除了学习.工作和玩耍,几乎就没有多少空时间了).本文现在其实只能算着< Programming Windows >中关于"映射模式"的加工,以咱们中国读者更易懂的方式写出:我将逐步往其中添加一些相关内容. 首先,从一个十分简单但又很常用的函数开始: BOOL TextOut( HDC hdc , // handle t

windows映射模式

1.什么是映射模式: 当Windows应用程序在其客户区绘制图形时,必须给出在客户区的位置,其位置用x和y 两个坐标表示,x表示横坐标,y表示纵坐标.在所有的GDI绘制函数中,这些坐标使用的是一 种"逻辑单位".当GDI函数将输出送到某个物理设备上时,Windows将逻辑坐标 转换成设备坐标(如屏幕或打印机的像素点).逻辑坐标和设备坐标的转换是由映射模式决 定的.   2.windows中为什么要用到映射模式机制? 映射模式的使用可以实现图形绘制的设备无关性.比如在默认MM_TEXT模

windows程序设计(五)---映射模式(转换设备坐标和逻辑坐标)

在窗口指定位置显示图形或文字,我们使用的坐标单位是象素,称之为设备坐标.看下面语句: pDC->Rectangle(CRect(0,0,200,200)); 画一个高和宽均为200个象素的方块,因为采用的是默认的MM_TEXT映射模式,所以在设备环境不一样时,画的方块大小也不一样,在1024*768的显示器上看到的方块会比640*480的显示器上的小(在不同分辨率下的屏幕象素,在WINDOWS程序设计一书中有示例程序可以获得,或者可以用GetClientRect函数获得客户区的矩形大小.在这里就

浅析php设计模式之数据对象映射模式_php实例

php中的设计模式中有很多的各种模式了,在这里我们来为各位介绍一个不常用的数据映射模式吧,希望文章能够帮助到各位. 数据映射模式使您能更好的组织你的应用程序与数据库进行交互. 数据映射模式将对象的属性与存储它们的表字段间的结合密度降低.数据映射模式的本质就是一个类,它映射或是翻译类的属性或是方法到数据库的相应字段,反之亦然. 数据映射的作用(工作)就在于能对双方所呈现出的信息的理解,并能对信息的存取进行控制,如根据存储在数据表中的信息 重建新的域对象,或是用域对象的信息来更新或删除数据表中的相关

MFC打印预览、映射模式、坐标变换

MFC提供了一个框架性的打印和打印预览功能代码,它的基本思想是将实际显示和打印文档的代码合二为一,即都由此文档关联的CView中的OnDraw(CDC *pDC)来处理,由MFC框架根据用户的操作来决定传进来的pDC是指向屏幕还是打印机,当pDC指向屏幕设备,就在屏幕上显示文档, 当指向打印机设备时就打印文档.这些都很好理解,但是,当我们要打印预览时,传进来的pDC就有些特别了.因为打印预览是在屏幕上进行的,所以通常我们会认为这时传进来的pDC一定也是属于屏幕DC一类的.但是其实不然,这个pDC

浅析Node.js中使用依赖注入的相关问题及解决方法

这篇文章主要介绍了浅析Node.js中使用依赖注入的相关问题及解决方法,Node.js是一个将JavaScript应用运行于服务器端的框架,需要的朋友可以参考下 最近,我转向使用依赖注入来帮助理解分离代码的简单途径,并有助测试.然而,Node.js中的模块依赖Node提供的系统API,这很难判断私有依赖被恰当的使用.一般的依赖注入很难在这种情况下使用,但现在不要放弃希望. requireCauses 问题 Node.js很容易依照需求导入依赖.它运行的很好,并且比AMD模式加载器例如Requir

Windows 8应用运行异常问题如何解决

Windows 8应用运行异常问题如何解决 微软正式推出Windows 8系统已经有一段时间了,尽管其兼容性对比微软其他操作系统而言已经完善很多了,但仍免不了出现某些应用无法运行的状况.现在如果遇到了这一问题也不用过于担心.尽管现在依然没有任何办法能保证解决兼容性问题,但为了尽可能多地帮助CIO们提高应用在Windows 8上运行成功率,本文将介绍10种常用的计算机技巧,以供分享. 1.创建虚拟机 Windows 8系统内置有自己的Hyper-V副本,因此当遇到应用无法运行的情况时,可以尝试启用

PHP设计模式之:数据映射模式教程

之前的几种设计模式,都是大大提高了PHP代码的可读性.可维护性.但是,在WEB应用中还有更重要的需求与挑战,那就是:数据库应用.可之前的设计模式,都没有涉及于此.今天写到的,数据映射模式就是能够更好的组织应用程序与数据库进行交互.博主这两天也是花了点时间对,这种模式有了那么一点的了解.斗胆在这个里献丑,按照自己的理解,写一点东西与大家分享,互相学习.当然说到数据映射模式,就不得不提到对象关系映射(Object Relational Mapping,简称ORM),用于实现面向对象编程语言里不同类型

电脑提示Windows无法连接到无线网络的解决方法

电脑提示Windows无法连接到无线网络的解决方法  方法一.删除保存的WiFi记录重新连接 如果只是修改了无线密码,而没有修改无线名称,那么可以先删除电脑保存的WiFi记录,在重新搜索WiFi信号,点击连接,输入新的无线密码就可以成功连接了; 方法二.修改无线名称和密码 打开无线路由器设置,重新设置修改无线信号的名称和密码,再在笔记本上搜索新的无线信号,使用新的密码进行连接; 方法三.关闭路由器"无线MAC地址过滤" 如果路由器设置了"无线MAC地址过滤"功能,那