窗口与视口


几个概念容易乱,先写下来:
一般来说,客户区左上角的点对应视口原点 (0,0),我理解他们为等同关系.设备区(0,0)点就是视口原点(0,0)点,且不可改变.
窗口座标应用中使用逻辑座标,偶理解为窗口原点就是逻辑原点.等同关系.且可以改变.下面可能用上.(不要理解为整个窗口的左上角那个点)
从理解应用来说,无论SetWindowOrgEx/SetViewportOrgEx都没有改变视口原点.它们只是改变了逻辑与设备座标的映射关系.
大师说了,在真正的意义上,视端口和窗口仅是数学上的概念。是的,只是数学概念,可以随意把逻辑(窗口)原点映射在屏幕的任何地方,当然输出在客户区外我们就看不见了.
 
1 如果用CreateWindow创建了菜单,视口原点一般在菜单左下方,工具栏上方.
2 如果用Rebar创建菜单,原点在Rebar左上方.
3 如果用SDI,MDI,1,2中的结论不成立
4 设备坐标的原点一开始就是窗口原点和视口原点,可用SetWindowOrgEx/SetViewportOrgEx指定新的窗口原点.
5 不管对窗口和视端口原点作什么改变,设备点(0,0)始终是显示区域的左上角。
6 精准定位相关函数:SetWindowPos/GetWindowRect/GetClientRect/DeferWindowPos/ BeginDeferWindowPos /EndDeferWindowPos/MoveWindow/ScreenToClient/DpToLp
 
SetViewportOrgEx是把新的设备点(x,y)映射为逻辑原点(0,0).但设备点(0,0)还是客户区左上角.
SetWindowOrgEx很有迷惑性,并不是视口原点移动到逻辑座标(x,y)处,而是表示此逻辑座标对应视口原点(0,0)
 
掌握一点,逻辑座标和设备座标最终都要在显示器上用像素定位.这就是说只有设备座标可以决定定位.在上面所说的一切地方,设备原点是不变的,都是客户区左上角.而逻辑原点可以对应任一设备座标,所以可以通过逻辑座标原点的改变影响输出.
 
End.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值