4 画图
在 Windows 中,绘图一般在视图窗口的客户区进行,使用的是设备上下文类 CDC
中各种绘图函数。
1. 映射模式与坐标系
1)默认映射模式
映射模式(map mode)影响所有的图形和文本绘制函数,它定义(将逻辑单位转换
为设备单位所使用的)度量单位和坐标方向,Windows 总是用逻辑单位来绘图。
缺省情况下,绘图的默认映射模式为 MM_TEXT,其绘图单位为像素(只要不打印
输出,屏幕绘图使用该模式就够了)。若窗口客户区的宽和高分别为 w 和 h 像素,
则其 x 坐标是从左到右,范围为 0 ~ w-1;y 坐标是从上到下,范围为 0 ~ h-1。
2)设置映射模式
可以使用 CDC 类的成员函数 GetMapMode 和 SetMapMode 来获得和设置当前的映射
模式:
int GetMapMode( ) const; // 返回当前的映射模式
virtual int SetMapMode( int nMapMode ); // 返回先前的映射模式
映射模式的 nMapMode 取值与含义
符号常量 数字常量 x 方向 y 方向 逻辑单位的大小
MM_TEXT 1 向右 向下 像素
MM_LOMETRIC 2 向右 向上 0.1 mm
MM_HIMETRIC 3 向右 向上 0.01 mm
MM_LOENGLISH 4 向右 向上 0.01 in
MM_HIENGLISH 5 向右 向上 0.001 in
MM_TWIPS 6 向右 向上 1/1440 in
MM_ISOTROPIC 7 自定义 自定义 自定义
MM_ANISOTROPIC 8 自定义 自定义 自定义
可见,除了两种自定义映射模式外,x 方向都是向右,y 方向也只有 MM_TEXT 的
向下,其余的都是向上,与数学上一致。除了 MM_ANISOTROPIC 外,其他所有映
射模式的 x 与 y 方向的单位都是相同的。所有映射模式的逻辑坐标的原点(0, 0)
最初都是在窗口的左上角,但在 CScrollView 的派生类中,MFC 会随用户滚动文
档而自动调整逻辑原点的相对位置(改变视点的原点属性)。
3)自定义映射模式
自定义映射模式 MM_ISOTROPIC(各向同性,x 与 y 方向的单位必须相同)和
MM_ANISOTROPIC(各向异性,x 与 y 方向的单位可以不同)的单位和方向,可以
通过用 CDC 类的成员函数 G/SetWindowExt 和 G/SetViewportExt 来获取/设置窗
口和视口的大小来确定:
CSize GetWindowExt( ) const;
virtual CSize SetWindowExt( int cx, int cy );
评论0