Chinaunix首页 | 论坛 | 博客
  • 博客访问: 766814
  • 博文数量: 171
  • 博客积分: 3629
  • 博客等级: 中校
  • 技术积分: 1779
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-23 21:21
文章分类

全部博文(171)

文章存档

2019年(4)

2018年(7)

2017年(1)

2016年(4)

2014年(1)

2013年(8)

2012年(10)

2011年(50)

2009年(12)

2008年(10)

2006年(56)

2005年(8)

分类: WINDOWS

2006-04-30 02:10:46

打了有几百字,意外操作全没了.只好少写点了.
 
几个概念容易乱,先写下来:
一般来说,客户区左上角的点对应视口原点 (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.
阅读(2293) | 评论(0) | 转发(0) |
0

上一篇:windows 控件与窗口

下一篇:C++ 站点推荐

给主人留下些什么吧!~~