发信人: blanka()
整理人: wenbobo(2002-12-06 22:59:35), 站内信件
|
【 在 chsk (sk) 的大作中提到: 】
: 请问:在VC++ MFC类库中的CDC类,有关于单位转换的函数,其中的HIMETRIC单位
: ,逻辑单位,设备单位和象素值具体指什么。
MM_HIMETRIC这种映射模式使用的坐标单位是0.01毫米。象素不就是你的屏幕 的当前分辨率所决定的最小的点嘛。设备坐标系和MM_TEXT映射模式所用的逻辑坐 标系中一个坐标单位就是一个象素。逻辑单位就是逻辑坐标系中的单位刻度,至 于这个单位刻度有什么物理意义,可以看看书,就不举例了。设备单位就是设备 坐标系中的单位刻度,以象素为单位。在设备坐标系中,水平方向两个相邻象素 的x坐标值相差1。在逻辑坐标系中,水平方向两个相邻象素的x坐标值相差就不一 定是1咯,这和映射模式有关。
要理解windows的两种坐标系:逻辑坐标系和设备坐标系。设备坐标系的原点 (0,0)永远在窗口客户区的左上角,x坐标值水平向右伸展,其数值逐渐增大。y坐 标值垂直向下伸展,其值逐渐增大。坐标值的单位是“象素”,就是说,在这个 坐标系中,点(10,20)位于原点下方20个象素,原点右边10个象素处。设备坐标通 常被窗口类的成员函数使用,还有鼠标消息中的点的坐标值等等全是在设备坐标 系中的值。
逻辑坐标通常被CDC类的成员函数所用,你传给CDC类的绘图的成员函数的坐 标值将被解释成逻辑坐标。然后windows将把逻辑坐标换算成设备坐标,并在窗口 客户区里画出相应图形。
逻辑坐标其实有好几种,dc的每种映射模式对应一种。所谓映射模式,它决 定了一个点的坐标在逻辑坐标系和设备坐标系之间是如何转换的。每种逻辑坐标 都有几个参数来描述该逻辑坐标和设备坐标的关系:(1)该逻辑坐标的原点在设备 坐标的什么位置。(2)该逻辑坐标的x轴方向和y轴方向的单位长度与设备坐标的x 轴方向和y轴方向的单位长度之比,也就是坐标变换的比例因子。一旦比例因子定 了,该逻辑坐标系的坐标单位是什么意义也就定了,比如说MM_HIMETRIC这种映射 模式使用的坐标单位是0.01毫米。
几种逻辑坐标系中,有的逻辑坐标系的比例因子是固定的,例如MM_LOENGLI SH,MM_HIENGLISH,MM_LOMETRIC,MM_HIMETRIC,MM_TWIPS。有的是可以设置的 ,例如MM_ISOTROPIC,MM_ANISOTROPIC。可以用CDC的成员函数SetWindowExt(x1 ,y1)和SetViewportExt(x2,y2)结合来设置这个比例因子,比例因子是x1/x2,y1 /y2或者是x2/x1,y2/y1,究竟是哪个记不得了,反正试一下就可以知道了。可见 ,x1和x2,以及y1和y2的具体数值是不重要的,重要的是它们的比值。
CDC的成员函数SetWindowOrg(x1,y1)把设备坐标系的原点设置到逻辑坐标系 里的点(x1,y1)处。而成员函数SetViewportOrg(x1,y1)是把逻辑坐标系的原点设 置到设备坐标系的点(x1,y1)处。
如果已经设置好了一个逻辑坐标系的原点位置和比例因子,那么就可以想象 设备坐标系里的窗口客户区这个矩形将在逻辑坐标系里有个映射,也是个矩形, 叫视口。
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 140.32.129.34]
|
|