一个常见的例子:
响应鼠标左右键消息映射--->获得范围(GetClientRect)(注:此范围指窗口中客户区,不是全部窗口)
       -->将客户区窗口转换为屏幕窗口坐标(ClientToScreen)-->限制与解除范围(ClipCursor)
void CMy001View::OnLButtonDown(UINT nFlags, CPoint point) //********限制鼠标移动范围
{
CRect rect;
GetClientRect(&rect);
ClientToScreen(&rect);
ClipCursor(&rect);
CView::OnLButtonDown(nFlags, point);
}void CMy001View::OnRButtonUp(UINT nFlags, CPoint point) //*********解除鼠标移动范围
{
CRect rect;
ClipCursor(&rect);
CView::OnRButtonUp(nFlags, point);
}
---------------------------------------------------------------------------------------
问题是:程序中两行红色代码为什么可以用GetWindowsRect(&rect);来代替呢,GetWindowsRect不是整个窗体的范围吗?又不是客户区的范围?

解决方案 »

  1.   

    红色两行得到的是客户区的屏幕坐标,GetWindowRect得到的是整个窗口的屏幕坐标,两个得到的值不同
      

  2.   

    GetWindowRect()   得到的是在屏幕坐标系下的RECT;(即以屏幕左上角为原点)   
    GetClientRect()   得到的是在客户区坐标系下的RECT;   (即以所在窗口左上角为原点)GetWindowRect()取的是整个窗口的矩形   
    GetClientRect()取的仅是客户区的矩形,也就是说不包括标题栏,外框等  
      

  3.   

    看看MSDN就知道了
    void GetWindowRect( LPRECT lpRect ) const;ParameterslpRectPoints to a CRect object or a RECT structure that will receive the screen coordinates of the upper-left and lower-right corners.
      

  4.   

    GetWindowRect() 得到的是在屏幕坐标系下的RECT;(即以屏幕左上角为原点)   
    GetClientRect() 得到的是在客户区坐标系下的RECT; (即以所在窗口左上角为原点)GetWindowRect()取的是整个窗口的矩形   
    GetClientRect()取的仅是客户区的矩形,也就是说不包括标题栏,外框等 
    --------------------------------------------------------------------
    既然GetWindowRect()取的是整个窗口的矩形,那么鼠标为什么会被限制在客户区呢?
    楼上几位没有回答实际问题