当前位置:C++技术网 > 精选软件 > 获取客户区矩形已经沦为获取客户区大小

获取客户区矩形已经沦为获取客户区大小

更新时间:2016-01-13 22:11:24浏览次数:1+次

    我们使用GetClientRect函数最多的就是获取客户区的大小。每次我们都使用一个RECT的结构体来接受这个矩形的值。
    然而,我们总是会发现,矩形结构体变量中的left和top总是为0。在不清楚这个函数的时候,总是疑惑,但是也没有查询MSDN。反正使用这个函数也没有出过问题。但是总归是要弄清楚,让使用更加明白。
    所以查阅了MSDN,才发现,GetClientRect获取的是窗口客户区的矩形,而这个矩形的起点是客户区坐标系的坐标。那么客户区本身对于本身的起始坐标自然总是(0,0),这也是left和top总是0的原因。
    而此前,我一直以为这个矩形应该是相对于窗口坐标的。也没有多想,竟然稀里糊涂的用了这么久。事实上,系统如果采取窗口坐标来获取客户区的其实坐标,则是会很麻烦的。因为有标题栏,有窗口上边框,有工具栏等的间隔,所以不好计算客户区从哪里开始。所以,系统就索性直接采取了客户区坐标了。
    如此一来,客户区位置相对于客户区本身,自然起点总是为0。这样的话,那么起点的获取不是有点多余了嘛。那么获取客户区矩形的功能实际上就沦为获取客户区大小的功能了。而获取客户区大小也确实是我们最频繁的。
    只不过,可能是为了和GetWindowRect函数使用方式保持一致,或者,即使获取的起点始终不变,但是可能后面会用到起点,所以,就还是用RECT来接受结果,而没有使用POINT替代。
    只不过,单从函数本身来讲,你只需要将它当做获取客户区大小的函数,而不要想着得到客户区位置什么的,这是没有用的。不过,如果你要知道客户区的原点对应的屏幕坐标,使用ClientToScreen函数就可以得到。那么此时需要原点的坐标刚好是(0,0),和默认获取到的客户区矩形的其实坐标一致。这样让这样的存在有一定的理由了吧。