- 坐标映射方式是设备环境中的一个重要属性,默认值为MM_TEXT,即左上角为原点,右方为x轴正方向,下方为y轴正方向,这种坐标系使用的单位是像素,其好处是窗口中的每一点的坐标不会因为窗口大小而改变。
映射方法 | 逻辑单位 | x和y轴方向 |
MM_TEXT(默认方式) | 像素 | x右,y下 |
MM_LOMETRIC | 0.1mm | x右,y上 |
MM_HIMETRIC | 0.01mm | x右,y上 |
MM_LOENGLISH | 0.01英寸 | x右,y上 |
MM_HIENGLISH | 0.001英寸 | x右,y上 |
MM_TWIPS | 1/1440英寸 | x右,y上 |
MM_IOSTROPIC | 用户自定义(X=Y) | 用户自定义 |
MM_ANISOTROPIC | 用户自定义(X!=Y) | 用户自定义 |
- 需用到函数
- int SetMapMode(HDC hdc,int fnMapMode);改变坐标映射方式;
- BOOL SetWindowExEx(HDC hdc,int nXExtent,int nYExtent,LPSIZE lpsize);不管真实区域大小,这个函数将此区域的逻辑宽度为nExtent,逻辑高度为nYExetent,系统会将DC指定的区域宽度做nXExtent等分,高度做nYExtent等分,等到单位长度。
- BOOL SetViewportExEx(HDC hdc,int nXExtent,int nYExtent,LPSIZE lpsize),设置逻辑单位后,用此函数设置x,y轴的方向和坐标系包含范围,即定义域和值域。nXExtent和nYExtent正负指示了坐标系的方向。
- BOOL SetViewportOrgEx(HDC hdc,int x,int y ,LPPOINT lpoint);设置坐标的原点坐标位置。
- 用例:笛卡尔坐标系设置函数编写
void SetIostropic(HDC hdc,int x,int y)
{
::SetMapMode(hdc,MM_IOSTROPIC); 设置映射模式为用户自定义模式(X=Y)
::SetWindowExtEX(hdc,100,100,NULL);设置逻辑宽度和高度
::SetViewportExtEx(hdc,x.-y,NULL);设置值域定义域,并指示坐标轴方向
::SetViewportOrgEx(hdc,x/2,y/2,NULL);设置原定坐标
}