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.
//