VC ScreenToClient 问题

来源:百度知道 编辑:UC知道 时间:2024/06/13 16:45:32
功能很简单,想把CView的背景变黑色。VC6.0 Windows xp 建立单文档程序,在C**View::OnDraw()中加了
CClientDC pDc(this);

GetWindowRect(&m_rectView); //CRect m_rectVioew;
ScreenToClient(m_rectView);
CBrush brush(RGB(0,0,0));
pDc.FillRect(&m_rectView,&brush);
但是调试了一下发现m_rectView 的值是top=-2,bottom=431,left=-2,right=758 为什么那两个(-2)不是0呢?
后来我用GetClientRect(&m_rectView);再调试了下,top=0,bottom=429,left=0,right=756 不明白为什么。。。。
。。我问的是为什么坐标是这样!

GetClientRect(&m_rectView); 获取的是 client 相对 client 的区域.所以是0,0,..

GetWindowRect(&m_rectView); 获取的是 window 相对 screen 的区域.窗口的 left 和 top 肯定在 client 的"外侧",所以 ScreenToClient 之后变成-2,-2..(-2,-2是client和window之间的间隔差--border)

你把
ScreenToClient(m_rectView);
注释掉看看!

GetClientRect(&m_rectView); 获取的总是以0,0为
GetWindowRect(&m_rectView); 获取的是 window 相对 screen 的区域.窗口的 left 和 top 肯定在 client 的"外侧",所以 ScreenToClient 之后变成-2,-2..(-2,-2是client和window之间的间隔差--border)

GetWindowRect函数或得的是控件的窗口大小,包括控件的边框等,GetClientRect获得的是控件的客户区大小,不包括控件的边框,对于不同的控件,一般来说GetWindowRect与GetClientRect取得的大小一边不一样大小。