- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
屏幕绘图及文本显示
第2章 Visual C++6.0开发环境 第2章 Visual C++6.0开发环境 面向对象程序设计 Windows 中的设备描述表(硬件多态)分为以下4 种类型。 (1)显示器型:支持显示器上的绘图操作。 (2)打印机型:支持打印机和绘图仪上的绘图操作。 (3)内存型:支持位图上的绘制操作。 (4)信息型:支持设备数据的访问。 为了方便,Windows系统初始化了一套DC的属性和对象,表7-1为显示器DC的属性及默认值,获得了该设备的DC后,程序设计人员就可以在这个默认的环境下开始绘图工作了。当然,如果程序员对预置的属性和对象不满意的话,也可以按自己的要求对它们进行设置。例如,默认的DC中预置了一支黑色画笔,所以这时用GDI的绘图函数绘制的任何线条都是黑色的。如果想使用其它颜色绘制线条的话,程序员可以用其它颜色的画笔来替换这支黑色的画笔。DC在任何时候总是必须存在着一套完整的绘图工具。这意味着,不能从DC中删除一个工具,只能用一个工具替换另一个工具。绘图过程可描述为使用GDI 对象(逻辑画笔或画刷等)在设备描述表(逻辑画布)上绘制的过程 坐标变换(曲面to平面) 屏幕的高(y)和宽(h),地理坐标区域的范围(maxLon,minLon,maxLat,minLat) 比例因子:算出每像素所代表的经度和纬度 scaleX = ((maxLon-minLon)*3600)/h --X轴每像素代表的经度秒数; scaleY = ((maxLat-minLat)*3600)/y ---Y轴每像素代表的纬度秒数; 经纬度转屏幕坐标公式 X = (lon - minLon)*3600/scaleX; Y = (maxLat - lat)*3600/scaleY; 屏幕坐标转经纬度坐标公式 lon = X * scaleX/3600 + minLon; lat = maxLat - y* scaleY/3600; 为了保证精度,地理坐标的度*3600换算成秒,所有的取值用double来计算,最后的结果再转换成int。 7.3.3映射模式 映像模式定义了将逻辑单位转化为设备的度量单位的方法以及设备的X方向和Y方向,程序员可在一个统一的逻辑坐标系中操作而不必考虑输出设备的坐标系情况。映射模式对应用程序是很重要的。Windows 中定义了8 种映射模式 MM _ TEXT 是最简单的一种映射模式,也是默认的映射模式,它使得逻辑坐标完全等价于设备坐标。其它几种映射模式下,逻辑坐标的原点也位于窗口的左上角,但对于Y 轴是向下增长的。 MM_ANISOTROPIC和MM_ISOTROPIC这两种映射模式通过将图形从程序员定义的逻辑坐标窗口映射到物理设备的视口以实现坐标转换。窗口是对应逻辑坐标系上程序员设定的区域,视口是对应实际输出设备上程序员设定的区域。这两种映射模式的区别是MM_ANISOTROPIC按照窗口和视口的坐标比例进行映射,而MM_ISOTROPIC将窗口中的对称图形映射到视口时仍为对称图形。在MM_ISOTROPIC映射模式下,圆总是圆的,但是在MM_ANISOTROPIC映射模式下,圆可以被拉扁成椭圆形状。 1.映射模式的设置 要改变DC的映射模式,可以使用CDC类的SetMapMode( )函数,函数原型形为:virtual int SetMapMode ( int nMapMode); 参数nMapMode 是新设置的映射模式,函数的返回值是DC先前的映射模式。 若要取得DC 当前的映射模式,可以使用CDC类的函数GetMapMode( ),函数原型形为:int GetMapMode ( ) const ; 此函数的返回值是当前的映射模式。 【例7-2】将“Hello World”显示在离客户区左边和上边各l 英寸的地方。 (1)用MFCAppwizard创建一个名称为ex7_2的单文档应用程序框架。 (2)在视图类中的OnDraw函数中添加语句,添加后的代码为: void CEx7_2View::OnDraw(CDC *pDC) { CEx7_2Doc *pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO : add draw code for native data here pDC-SetMapMode(MM_LOENGLISH) ; pDC-TextOut (100 ,-100 , “Hello World” ) ; //输出字符串的语句 } 2、设置窗口和视口的大小 窗口区域的定义由SetWindowExtEx函数完成,其函数原型为: BOOL SetWindowExtEx ( int nHeight //以逻辑单位表示的窗口区域高度
文档评论(0)