一个常见的例子:
响应鼠标左右键消息映射--->获得范围(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不是整个窗体的范围吗?又不是客户区的范围?
响应鼠标左右键消息映射--->获得范围(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不是整个窗体的范围吗?又不是客户区的范围?
GetClientRect() 得到的是在客户区坐标系下的RECT; (即以所在窗口左上角为原点)GetWindowRect()取的是整个窗口的矩形
GetClientRect()取的仅是客户区的矩形,也就是说不包括标题栏,外框等
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.
GetClientRect() 得到的是在客户区坐标系下的RECT; (即以所在窗口左上角为原点)GetWindowRect()取的是整个窗口的矩形
GetClientRect()取的仅是客户区的矩形,也就是说不包括标题栏,外框等
--------------------------------------------------------------------
既然GetWindowRect()取的是整个窗口的矩形,那么鼠标为什么会被限制在客户区呢?
楼上几位没有回答实际问题