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 画图的,他两个相等时是圆,不等时是椭圆。

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值