前面以来,写程序,坐标都是相对于用户区域的用像素表示。其实,也可以由其他表示方式,不过由于现在的显示器大小各异,这种相对于真实设备的表示方式也不那么“真实”了。
设定不同的映像方式可以使用:
int SetMapMode(
HDC hdc, // handle to device context
int fnMapMode // new mapping mode
); 其中fnMapMode 可以为:
|
映像方式 |
逻辑单位 |
增加值 | |
|
x值 |
y值 | ||
|
MM_TEXT |
图素 |
右 |
下 |
|
MM_LOMETRIC |
0.1 mm |
右 |
上 |
|
MM_HIMETRIC |
0.01 mm |
右 |
上 |
|
MM_LOENGLISH |
0.01 in. |
右 |
上 |
|
MM_HIENGLISH |
0.001 in. |
右 |
上 |
|
MM_TWIPS |
1/1440 in. |
右 |
上 |
|
MM_ISOTROPIC |
任意(x = y) |
可选 |
可选 |
|
MM_ANISOTROPIC |
任意(x != y) |
可选 |
可选 |
当然也可以使用GetMapMode这个函数来取得映像方式。
int GetMapMode(
HDC hdc // handle to device context
);
int GetMapMode(
HDC hdc // handle to device context
);由上面可以知道,原点是可以自己设定的。通过下面这个函数你可以设定这个东东:
BOOL SetViewportOrgEx(
HDC hdc, // 设备内容句柄
int X, // 新的原点x坐标(设备单位)
int Y, // 新的原点y坐标(设备单位)
LPPOINT lpPoint // 原来原点坐标(不保存可以设定为NULL)
);
BOOL SetWindowOrgEx (
HDC hdc, // 设备内容句柄
int X, // 新的原点x坐标(逻辑单位)
int Y, // 新的原点y坐标(逻辑单位)
LPPOINT lpPoint // 原来原点坐标(不保存可以设定为NULL)
);
坐标转化:
DPtoLP函数用于将设备坐标转化为逻辑坐标。这个转化取决于映像方式原点位置等。
BOOL DPtoLP(
HDC hdc, // 设备内容句柄
LPPOINT lpPoints, // 点的数组
int nCount // 点的个数
);LPtoDP函数用于将逻辑坐标转化为设备坐标。这个转化取决于映像方式原点位置等。
BOOL LPtoDP(
HDC hdc, // 设备内容句柄
LPPOINT lpPoints, // 点的数组
int nCount // 点的个数
); 好了,其他的就是每种映像方式的具体应用了,多看书就好了。
本文介绍了Windows绘图中坐标系的设置与转换方法,包括如何使用SetMapMode设定映像方式,SetViewportOrgEx和SetWindowOrgEx设定原点位置,以及DPtoLP和LPtoDP实现坐标转换。
609

被折叠的 条评论
为什么被折叠?



