正在加载图片...
第10单元图形设备接口 -198 MM ISOTROPIC 可调整(x=y)可选择 可选择 MM ANISOTROPIC可调整(xl=y)可选择 可选择 注意所有映射模式的坐标原点均在设备输出区域(如窗口客户区或打印纸上的打印 域)的左上角。因此,对于y坐标递增方向向下的映射模式(如 MM TEXT),y坐标值均 为正值,而对于y坐标递增方向向上的映射模式(如 MM LOMETRIC等),所有的y坐标 值均为负值,在编程时要特别注意。 最常用的映射模式是 MM TEXT,这也是缺省设置。在该模式下,坐标原点在客户区 左上角,ⅹ坐标值是向右递增,y坐标值是向下递增,单位值1代表一个像素,与屏幕坐标 系类似。采用除 MM TEXT外的其他映射模式的原因有二:一是欲使程序显示在不同的屏 幕分辨率(如640×480、800×600或1024×768等)下有相近的尺度;二是欲使程序的显 示和打印比例相近(参看13.2:“打印和打印预览”) 设置映射模式,可使用CDC类的 SetMap Mode()成员函数,其原型为 virtual int SetMap Mode( int nMapMode ) 其中参数nMaφ pMode为欲设置的映射模式,返回值为原来的映射模式。 MFC绘图函数均使用逻辑坐标作为位置参数。例如 String str("Hello, MFC!") dc TextOut(10, 10, str, str. GetLengthO) 这里的(10,10)是逻辑坐标而不是像素点数(只是在缺省映射模式 MM TEXT下,正好 与像素点相对应),在输出时GD函数会将逻辑坐标(10,10)依据当前映射模式转化为“设 备坐标”,然后将文字输出在屏幕上 设备坐标以像素点为单位,且ⅹ轴坐标值向右递增,y轴坐标值向下延伸,但原点(0, 0)位置却不限定在工作区左上角。依据设备坐标的原点和用途,可以将 Windows下使用的 设备坐标系统分为三种:客户区坐标系统,窗口坐标系统和屏幕坐标系统 1.客户区坐标系统:客户区坐标系统是最常见的坐标系统,以窗口客户区左上角为原 点(0,0),主要用于窗口客户区绘图输出以及处理窗口的一些消息。鼠标消息 WM LBUTTONDOWN、 WM MOUSEMOVE传给框架的消息参数以及CDC一些用于绘图 的成员都是使用客户区坐标 2.屏幕坐标系统:屏幕坐标系统是另一类常用的坐标系统,以屏幕左上角为原点(0, )。一些与窗口客户区不相关的函数均以屏幕坐标为单位,例如设置和取得光标位置的函数 SetCursor Pos()和 GetCursorPos():由于光标可以在任何一个窗口之间移动,它不属于任 何一个单一的窗口,因此使用屏幕坐标。弹出式菜单使用的也是屏幕坐标。另外, Create window()和 Move window()等函数用于设置窗口相对于屏幕的位置,使用的也是 屏幕坐标系统。 窗口坐标系统:窗口坐标系统以窗口左上角为坐标原点,它包含了窗口控制菜单 标题栏等内容。一般情况下很少在窗口标题栏上绘图,因此这种坐标系统很少使用 MFC提供 ClientToscreen()、 Screen toclient()两个函数用于完成客户区坐标和屏幕 坐标之间的转换工作 void Screen ToClient( LPPoiNT lpPoint )const void Screen To Client( LPRECT lpRect)const Client ToScreen( LPPOINT lpPoint)const; Client ToScreen( LPRECT lpRect )const第 10 单元 图形设备接口 - 198 - MM_ISOTROPIC 可调整 (x = y) 可选择 可选择 MM_ANISOTROPIC 可调整(x != y) 可选择 可选择 注意所有映射模式的坐标原点均在设备输出区域(如窗口客户区或打印纸上的打印区 域)的左上角。因此,对于 y 坐标递增方向向下的映射模式(如 MM_TEXT),y 坐标值均 为正值,而对于 y 坐标递增方向向上的映射模式(如 MM_LOMETRIC 等),所有的 y 坐标 值均为负值,在编程时要特别注意。 最常用的映射模式是 MM_TEXT,这也是缺省设置。在该模式下,坐标原点在客户区 左上角,x 坐标值是向右递增,y 坐标值是向下递增,单位值 1 代表一个像素,与屏幕坐标 系类似。采用除 MM_TEXT 外的其他映射模式的原因有二:一是欲使程序显示在不同的屏 幕分辨率(如 640×480、800×600 或 1024×768 等)下有相近的尺度;二是欲使程序的显 示和打印比例相近(参看 13.2:“打印和打印预览”)。 设置映射模式,可使用 CDC 类的 SetMapMode()成员函数,其原型为 virtual int SetMapMode ( int nMapMode ); 其中参数 nMapMode 为欲设置的映射模式,返回值为原来的映射模式。 MFC 绘图函数均使用逻辑坐标作为位置参数。例如 CString str(“Hello, MFC!”); dc.TextOut(10, 10, str, str.GetLength()); 这里的(10,10)是逻辑坐标而不是像素点数(只是在缺省映射模式 MM_TEXT 下,正好 与像素点相对应),在输出时 GDI 函数会将逻辑坐标(10,10)依据当前映射模式转化为“设 备坐标”,然后将文字输出在屏幕上。 设备坐标以像素点为单位,且 x 轴坐标值向右递增,y 轴坐标值向下延伸,但原点(0, 0)位置却不限定在工作区左上角。依据设备坐标的原点和用途,可以将 Windows 下使用的 设备坐标系统分为三种:客户区坐标系统,窗口坐标系统和屏幕坐标系统。 1.客户区坐标系统:客户区坐标系统是最常见的坐标系统,以窗口客户区左上角为原 点(0,0),主要用于窗口客户区绘图输出以及处理窗口的一些消息。鼠标消息 WM_LBUTTONDOWN、WM_MOUSEMOVE 传给框架的消息参数以及 CDC 一些用于绘图 的成员都是使用客户区坐标。 2.屏幕坐标系统:屏幕坐标系统是另一类常用的坐标系统,以屏幕左上角为原点(0, 0)。一些与窗口客户区不相关的函数均以屏幕坐标为单位,例如设置和取得光标位置的函数 SetCursorPos()和 GetCursorPos();由于光标可以在任何一个窗口之间移动,它不属于任 何一个单一的窗口,因此使用屏幕坐标。弹出式菜单使用的也是屏幕坐标。另外, CreateWindow()和 MoveWindow()等函数用于设置窗口相对于屏幕的位置,使用的也是 屏幕坐标系统。 3.窗口坐标系统:窗口坐标系统以窗口左上角为坐标原点,它包含了窗口控制菜单、 标题栏等内容。一般情况下很少在窗口标题栏上绘图,因此这种坐标系统很少使用。 MFC 提供 ClientToScreen()、ScreenToClient()两个函数用于完成客户区坐标和屏幕 坐标之间的转换工作。 void ScreenToClient( LPPOINT lpPoint ) const; void ScreenToClient( LPRECT lpRect ) const; void ClientToScreen( LPPOINT lpPoint ) const; void ClientToScreen( LPRECT lpRect ) const;
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有