💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
一、三种坐标体系 在Windows程序开发中常用的三种坐标系是:屏幕坐标系、客户区和 非客户区窗口坐标系 ```c++ HDC hdc = GetDC(hwndDlg); //GetDC管理到整个窗口的客户区区域 //客户区坐标系,(0,0)在客户区的左上角。 //HDC hdc = GetWindowDC(hwndDlg); //管理到整个窗口的客户区区域包括非客户区区域 //非客户区坐标系,(0,0)在整个窗口的左上角 //HDC hdc = GetDC(NULL);//管理到整个屏幕的整个左上角到右下角 //屏幕 坐标系,(0,0)在整个屏幕的左上角 HDC hdc = GetWindowDC(NULL);//管理到整个屏幕的整个左上角到右下角 //屏幕 坐标系,(0,0)在整个屏幕的左上角 ``` a)屏幕坐标系 坐标原点在屏幕的左上角,自左向右x坐标增大,自上向下y坐标增大。如果屏幕分辨率设置为1024x768,屏幕左上角坐标是(0,0),屏幕右下角坐标是是(1024,768)。 例如: **GetWindowRect** 函数获取的 窗口区域的坐标就是基于 **屏幕坐标系**。 GetDC(NULL)或GetWindowDC(NULL),获取的设备环境是基于该坐标系。 b)(非客户区)窗口坐标系。 坐标原点做窗口(包括标题栏)的左上角,xy坐标轴方向同上。 例如:GetWindowDC返回的设备环境是基于该坐标系,该函数一版主要在WM_NCPAINT消息中使用。 c)客户区坐标系: 坐标原点在标题栏一下的客户区左上角,xy坐标轴方向同上。 例如:BeginPaint函数返回的设备环境是基于客户区坐标系,该函数一般只在WM_PAINT消息中使用。 GetDC函数返回的设备环境也是基于客户区坐标系,该函数可以再任何消息中使用。 GetClientRect函数获取的是客户区矩形,是依据该坐标系计算的,左上角坐标一定是(0,0) d)坐标系转换: 最常用的坐标系是屏幕和客户区坐标,因此系统提供了两个坐标系转换的函数。 ScreenToClient函数将屏幕坐标转换为客户区坐标。 ClientToScreen函数将客户区坐标转换为屏幕坐标。 e)坐标系应用; 在实际开过程中,要注意一些函数参数和返回值基友的坐标系 例如: GetWindwRect/GetClientRect和MoveWindow函数 BeginPaint/GetDC和GetWindowDC函数 还要注意一些消息的附带坐标数据基于的坐标系, 例如: ```c++ WM_MOUSEMOVE和WM_NVMOUSEMOVE消息 WM_RBUTTONDOWN和WM_CONTEXTMENU ```