精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>WINDOWS界面设计>>有谁能告诉我?

主题:有谁能告诉我?
发信人: 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]

[关闭][返回]