[win32] GDI绘图常用的三种坐标系

本文详细介绍了GDI绘图中三种常用的坐标系:屏幕坐标系、窗口坐标系和客户区坐标系,并通过示例代码解释了它们之间的转换以及在实际应用中的作用,特别是`ScreenToClient`和`ClientToScreen`函数的使用。文章以一个简单的Windows应用程序为例,展示了如何在窗口中移动子控件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GDI绘图常用的三种坐标系:  屏幕坐标系 ,  窗口坐标系  和  客户区坐标系

1. 屏幕坐标系:   

坐标原点在屏幕左上角, 自左向右x坐标增大 , 自上向下y坐标增大.  通过 GetWindowRect函数获取的窗口区域的坐标就是基于屏幕坐标系的;

2. 窗口坐标系:

窗口坐标系又叫非客户区坐标系, 坐标原点在窗口的左上角, X, Y坐标轴方向和屏幕坐标系相同; 通过GetWindowDC返回的设备环境是基于该坐标系的, 该函数只在WM_NCPAINT消息中使用;

3. 客户区坐标系:

坐标原点在标题栏以下 的客户区左上角, X,Y坐标轴方向与屏幕坐标系相同. 通过BeginPaint函数返回的设置环境是基于客户区坐标系的, 该函数只在WM_PAINT中使用;

GetDC函数返回的设备环境也是基于客户区坐标系的, 该函数可以在任何消息中使用. GetClientDC函数获取的是客户区矩形,是依据该坐标系计算的, 左上角的坐标一定是(0, 0);


备注:

屏幕坐标系的转换:

ScreenToClient 函数将屏幕坐标系转换为客户区坐标系;

ClientToScreen函数将客户区坐标系转换为屏幕坐标系;

测试一个小游戏代码: 每次鼠标移动到OK按钮时,它就会跑开,看看效果

// RunOk.cpp : Defines the entry point for the application.
//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值