from:《windows 程序设计》(第五版、清华)
第五张 绘图基础 5.5.6 讲 MM_ISOTROPIC
P155;
代码如下:
/************************************映射代码
SetMapMode(MM_ISOTROPIC);
SetWindowExtEx(hdc,32767,32767,NULL);
SetViewportExtEx(hdc,cxClient,-cyClient,NULL);
SetWindowOrgEx(hdc,0,32767,NULL);
*******************************************/
完成的功能是 :当客户区的高度大于宽度(假设为高:宽=2:1),逻辑窗口将位于左上角。
问题是:1.这里所说的客户区是否就是显示器?视口?
2.SetViewportExtEx(hdc,cxClient,-cyClient,NULL);中 cyClient前的‘-’是否仅仅表示之后建立的窗口坐标在y方向与视口坐标相反(由下正变为上正)?还有没有其他作用?
3.这段代码是如何实现了这个功能我是完全看不懂啊!!!!
4.最最最关键的是 显示这个区域也就罢了,配图中的坐标轴到底是神马坐标? 根本不可思议的是坐标原点为什么会在(0,32767)这个位置?
真心求解啊 各路大神!!!
气疯了~~ 最后终于搞明白了
是由于清华版的印刷错误,在P156,setwindowsorgex 应该换为setviewportorgex;两天时间啊 太天理不容了!!!
光关注翻译,都把原版给改了 有个屁用啊 ;幸好这本书出了两个版本,我才研究了两天 不然……唉 好好学英语 看原版!!!
SetWindowExtEx设置窗口范围:这是表示坐标轴的最大范围,注意x,y都可以为负的;
SetViewportExtEx设置上面设置的逻辑范围所对应的设备范围,当符号不同的时候可以简单理解为改变逻辑坐标的方向,以本题为例,逻辑坐标的方向已经如图所示了,所以用SetWindowOrgEx可以很容易就得出结论了!~