Windows程序设计:坐标转换

Windows程序中坐标分为设备坐标和逻辑坐标

绘图时,写代码使用的是逻辑坐标,显示到屏幕上后,要把逻辑坐标转换成设备坐标
默认采用的映射模式是MM_TEXT模式
在写代码时,就像在一张大大的纸上画图,可以有多种模式选择,这张纸叫作窗口,使用逻辑坐标
之后把纸显示到屏幕上,此时要把逻辑坐标转换成设备坐标

设备坐标系统:


如图所示
水平方向:X值从左向右增加
Y值从上向下增加
所有的设备坐标使用的是像素

逻辑坐标和设备坐标的转换公式如下



具体例子:
比如我要在原点0,0处输出文字:
TextOut(hdc, 0, 0, TEXT("HELLO"),5);
效果如下:



此时我更改设备坐标的原点:
SetViewportOrgEx(hdc, 100, 200,NULL);
TextOut(hdc, 0, 0, TEXT("HELLO"),5);

这时根据公式换算,文字输出位置位于100,200



通过改变窗口坐标原点,输出N行文字:
for (int i = 0; i < 5; ++i) {
				SetWindowOrgEx(hdc, 0, -16 * i, NULL);
				TextOut(hdc, 0, 0, TEXT("HELLO"),5);
			}


输出样式:




设备坐标与逻辑坐标转换函数:
窗口使用逻辑坐标,视口使用逻辑坐标,我们有时要对坐标进行转化
			POINT apt;
			apt.x = cxClient;   //视口使用设备坐标
			apt.y = cyClient;
			DPtoLP(hdc, &apt, 1);  //设备坐标转为逻辑坐标
			SetWindowOrgEx(hdc, -apt.x / 2, -apt.y / 2, NULL);   //窗口使用的是逻辑坐标
			TextOut(hdc, 0, 0, TEXT("HELLO"), 5);




















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值