SetWindowExt与SetViewportExt

在VisualC++ 6.0技术内幕第四章 可变比例的映射模式一节 绘制一个椭圆,正好放在一个窗口中,解释首先看下http://blog.sina.com.cn/s/blog_935e8c740100vuwq.html;看了该篇文章,有所收获,以下是我对其补充。

vc++6.0绘图是以逻辑单位绘图,这点必须时刻铭记。pDC->SetWindowExt(1000, 1000)这句代码是设置逻辑窗口的大小,例子是设置为1000*1000,是为了实现椭圆与窗口一样大,其实我们也可以设置为其他值。当设置小于1000*1000时,就要超出边框,大于1000*1000时,就在边框内部了,这点比较迷糊,另外,迷糊为什么画出的是椭圆,且听下面分解。

看pDC->SetViewportExt(rectClient.right, -rectClient.bottom)函数,答案就在这个函数里面。GetClientRect(rectClient)得到的是窗口的物理尺寸,窗口是长方形的,又由于画图时是按照比例画的,rectClient.right 不等于 rectClient.bottom,所以rectClient.right/1000不等于 rectClient.bottom/1000,所以画出来的就是椭圆了。写到这里应该明白怎么画圆了吧?我们不使用rectClient,而是自定义SetViewportExt两个参数,如SetViewportExt(500,,500),画出的就是圆了。

其实就是SetViewportExt.cx/SetWindowExt.cx 和 SetViewportExt.cy/SetWindowExt.cy 画图的,他两个相等时是圆,不等时是椭圆。

逻辑窗口大于物理窗口范围,绘制的图形在边框内,相等时刚好在边框,小于时超出边框。



你可能感兴趣的:(vc++)