windows程序设计中MM_TEXT模式下的逻辑坐标与设备坐标的转换

GDI 映射模式 <br />Windows 在WINGDI.H里定义了八种GDI映射模式:MM_TEXT、MM_LOMETRIC、MM_HIMETRIC、MM_LOENGLISH、MM_HIENGLISH、MM_TWITPS、MM_ISOTROPIC和MM_ANISOTROPIC。可使用SetMapMode(hdc, iMapMode)选择映射模式。<br />这八种映射模式分两类:前六种和后两种。第一类映射方式逻辑(ViewPort)坐标和物理(Window)坐标比例不能修改,而第二类可以。第一类出除了MM_TEXT模式 阅读详情

       在windows程序设计中,MM_TEXT模式下逻辑坐标和设备坐标原点默认是(0 , 0) ,在客户区左上角。x轴从左到右增加,y轴从上到下增加。当使用SetViewportOrgEx() 和 SetWinodwOrgEX()函数修改设备坐标系和窗口(逻辑)坐标系时,我们该怎么简单的找到逻辑坐标系点(0 , 0 )在变换后的位置,一种简单的方法是移动逻辑坐标系原点去和设备坐标系原点重合(注意:不管设备坐标系原点如何变化,设备坐标(0,0)始终在客户区左上角),移动重合后就很容易找到逻辑坐标点(0,0)在客户区的位置。举例如下:

设客户区宽度为cxClient , 高度为cyClient ,如果我们使用函数SetViewportOrgEx(hdc , cxClient / 2 , cyClient / y , NULL) ,把逻辑坐标原点(此时为(0 ,0))平移到设备坐标原点(cxClient / 2 , cyClient / 2),容易得出逻辑坐标(0,0)在客户区中心(cxClient / 2 , cyClient / 2);若使用函数SetWindowOrgEx(hdc , -cxClient / 2 , -cyClient / 2 , NULL),此时逻辑坐标原点变成(-cxClient / 2 , -cyClient / 2),我们平移这个点到设备坐标原点(0,0),容易得出此时逻辑坐标点(0,0)被平移到了客户区中心(cxClient , cyClient);再若一起使用SetViewportOrgEx(hdc , cxClient / 2 , cyClient / y , NULL)和SetWindowOrgEx(hdc , -cxClient / 2 , -cyClient / 2 , NULL),我们平移两次,第一次把逻辑坐标原点(0,0)平移到(cxClient , cyClient) , 第二个函数执行后把逻辑坐标原点设为(-cxClient / 2 , -cyClient / 2) (在客户

windows程序设计(8):映射模式 什么是映射模式呢?为了说清楚这个概念,我们先介绍两个名词:“窗口”、“视口”。 视口是基于设备坐标的。对于显示器,就是像素的,也就是你看到的。而窗口是基于逻辑坐标的,虚拟的,也是你写程序时使用的。而且与你当前拿到的设备描述表有关,一般通过beginPaint拿到的都是客户区;而使用getDC拿到的则是通常意义下的窗口:客户区+菜单栏+工具栏+标题栏等等。 而窗口到视口的坐标映射,就是映射模式。 阅读详情

相关推荐

MFC Windows 程序设计 第二章 在窗口中绘图

第二章 在窗口中绘图 1、设备描述表 CPaintDC,CClientDC、CWindowDC、CMetaFileDC,通过这些DC使用GDI(图形设备接口)进行画图,5个常用属性Pen、Brush、Font、Bitmap、Palette、Region。 2、绘图模式:默认模式是R2_COPYPEN,将像素点复制到显示平面上,使用SetROP2修改绘图模式,R2_NOT模式通过反转像素来画

Carl.Lee 1099

避坑指南:vmdk转qcow2镜像时你可能会遇到的5个问题及解决方法

本文详细解析了将VMDK虚拟机镜像转换为QCOW2格式时可能遇到的五大核心问题,特别是启动失败的常见原因及解决方案。内容涵盖格式差异、预处理优化、转换命令详解,并针对根文件系统挂载失败、GRUB引导失败、网卡识别、性能异常等典型故障提供了具体排查与修复步骤,旨在帮助运维人员高效、可靠地完成镜像迁移。

websocket5live的博客 275

ZYNQ千兆网UDP通信实战:从Vivado配置到LWIP优化全流程(附避坑指南)

本文详细介绍了在ZYNQ平台上实现千兆以太网UDP通信的全流程,包括Vivado硬件配置、LWIP协议栈优化及实战代码示例。通过关键参数调整和性能优化,系统吞吐量可提升至850Mbps以上,适用于高速网络通信场景。

weixin_29161785的博客 232

MOS管的安全工作区SOA详解(一)限制线介绍

一篇文章让你搞懂MOS管的SOA曲线!

qq_45508321的博客 1万+

openEuler 欧拉 安装Oracle19c数据库RPM包安装

欧拉系统安装部署oracle 19c rpm方式

陈苏漾的IT生涯 6895

阿里云Ubuntu部署Steam饥荒联机版服务器:从零到多人联机的完整指南

本文详细介绍了在阿里云Ubuntu系统上部署Steam饥荒联机版服务器的完整流程,包括环境准备、SteamCMD安装、服务端配置、Mod管理及后台运行技巧。通过2核4GB的ECS实例配置和端口设置,实现5人流畅联机体验,适合游戏爱好者快速搭建专属服务器。

weixin_29229261的博客 1028

【Clickhouse】Cannot allocate block number in Zookeeper write prefix view location

我有一个问题,我CK集群跑批的时候,replicated表变成只读的了下面是CK的报错和当时ZK的日志。下面是zk报错开始 我认为是写入的时候,压力太大,ZK扛不住了,就按照博客里的建议优化了ZK的参数,现在偶尔还会只读,zk报错都是图里的那种clickhouse的集群是5分片的集群,数据量比较大。每小时批量一次,每次2-10W条数据,字段的话,不到200个字段,使用的 jdbc sink写入。

九师兄 836

华为防火墙——本地Portal认证

配置IP地址、路由、Nat策略使得内网主机可以访问公网服务器对网段不进行认证,对网段进行portal认证。

m0_49864110的博客 3263

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

下一篇: window程序设计模式映射下的坐标变换及范围注意事项
知行且执行
博客等级 码龄14年 38粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值