一、GetWindowRect,获取整个窗体的大小,该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。
如下截取屏幕中显示的Dialog及Button按钮在屏幕上的位置
然后通过调试查看对应的坐标显示:
1、获取Dialog窗体大小,相对屏幕坐标
利用ScreenToClient把屏幕坐标转化成相对当前客户区的坐标
我们发现top和left为负值,原因主要是因为这个时候的转换是基于Client的原点进行的,即客户区的左上角。因为原来的窗口左上角位于Client原点的左上方,所以是负值。
2、获取控件Button大小,相对屏幕坐标
利用ScreenToClient把屏幕坐标转化成相对当前控件的坐标
二、GetClientRect,获取窗体中客户区的大小
1、获取Dialog窗体大小,相对窗口客户区的左上角而言
利用ClientToScreen转换为屏幕坐标,也就是客户区相对屏幕的坐标,此处可以与上面Dialog相对屏幕的坐标
(top=0,buttom=446,left=679,right=1166)做对比,发现相减,即为窗体除客户区之外的地方(标题栏,菜单栏等边框)
2、获取Button控件大小,相对控件左上角而言
此处得到的Button坐标与上述Button相对屏幕坐标(GetWindowRect)并转化为相对当前控件的坐标是一致的。
利用ClientToScreen转化为相对屏幕的坐标
总结:
1、GetWindowRect获取窗体/控件的大小是相对屏幕坐标的,其通常与ScreenToClient转化为相对客户区/控件本身的坐标
2、GetClientRect获取窗体/控件的大小是相对客户区/控件本身坐标的,其通常与ClientToScreen转化为相对屏幕的坐标。
参考文章:
http://blog.csdn.net/ljh0600301217/article/details/8736494
https://www.cnblogs.com/wb-DarkHorse/archive/2013/07/08/3178201.html