GetClientRect()既然获得的左下角都是(0,0),那获得的不就是对象的Rect大小吗

GetClientRect()既然获得的左上角都是(0,0),那获得的不就是对象的Rect大小吗?
新建的项目为基于对话框模式。对话框上有个Button,叫m_bt
想获得此Button在Dlg上的坐标,于是想用 m_bt.GetClientRect(&rect),但是结果不对。
查MSDN:用GetClientRect()获得的坐上角一定是(0,0)。
那也就是说,此函数获得的就是Button的大小,并不是以对话框为Client的坐标。
那么,这个函数就应该叫GetWndRect(),为什么叫GetClientRect()?和Client一点都没有关系,因为它把Button当做了Client
原本以为用GetClientRect(),可以等价于下面两句话:
GetWindowRect(&rect);
ScreenToClient(&rect);
但实际操作过,不等价。
只有通过
GetWindowRect(&rect);
ScreenToClient(&rect);
才能正确得到结果。

请指正。


------最佳解决方案--------------------
GetClientRect()函数获取的是窗体客户区的大小,其左上角的坐标为(0,0)
获取的位置和大小保存在CRect的对象中的话,那么Width()就是这个窗体客户区的
宽度,Height()就是客户区的高度,注意如果窗体有边框的话,那么这个函数
是不能获取到整个窗体的大小的。

如果想获取窗体在屏幕上的坐标和大小的话,使用GetWindowRect()函数,这个
函数获取的TopLeft()坐标便是其在屏幕上的左上角的坐标,并一定是(0,0)
而Width()和Height()也就是其整个窗体的宽度和高度

两者之间获取的值可以通过ScreenToClient()将屏幕坐标转化为客户区坐标
当然也有ClientToScreen()
------其他解决方案--------------------
引用:
如果想要获得一个Button在某个View中的坐标,应该怎么办?


先pButton->GetWindowRect(&rect); 
后pView->ScreenToClient(&rect); 

------其他解决方案--------------------
BUTTON其实也是一个窗口,所以当然也可以用GetClientRect获取到
该控件的Rect,
至于GetWindowRect你已经清楚 了
------其他解决方案--------------------
如果想要获得一个Button在某个View中的坐标,应该怎么办?
------其他解决方案--------------------
GetWindowRect(&rect); 
ScreenToClient(&rect); 
一个是逻辑坐标  一个是物理坐标 是有区别的 。。。。
------其他解决方案--------------------
学习了~
------其他解决方案--------------------
路过,学习。
------其他解决方案--------------------
同#2
------其他解决方案--------------------
引用:
GetClientRect()函数获取的是窗体客户区的大小,其左上角的坐标为(0,0)
获取的位置和大小保存在CRect的对象中的话,那么Width()就是这个窗体客户区的
宽度,Height()就是客户区的高度,注意如果窗体有边框的话,那么这个函数
是不能获取到整个窗体的大小的。

如果想获取窗体在屏幕上的坐标和大小的话,使用GetWindowRect()函数,这个
函数获取的TopLeft()坐标便是其在屏幕上的左上角的坐标,并一定是(0,0)
而Width()和Height()也就是其整个窗体的宽度和高度

两者之间获取的值可以通过ScreenToClient()将屏幕坐标转化为客户区坐标
当然也有ClientToScreen()


这个很详细了
------其他解决方案--------------------
深有感触,学习了,谢谢分享!
------其他解决方案--------------------
先学习下....
------其他解决方案--------------------
现在再回头看自己当初问的问题,觉得太笨了
------其他解决方案--------------------
引用:
GetClientRect()函数获取的是窗体客户区的大小,其左上角的坐标为(0,0)
获取的位置和大小保存在CRect的对象中的话,那么Width()就是这个窗体客户区的
宽度,Height()就是客户区的高度,注意如果窗体有边框的话,那么这个函数
是不能获取到整个窗体的大小的。

如果想获取窗体在屏幕上的坐标和大小的话,使用GetWindowRect()函数,这个
函数获取的Top……

牛人呀

------其他解决方案--------------------
菜鸟飘过