马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
HWND hWnd = GetSafeHwnd();//获取代码所在顶级窗口的句柄
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd); //HWND转化为CWND
CWnd* pWnd1 = GetDlgItem(IDC_LIST1);//列表视图控件1的句柄
HWND hWnd1 = pWnd1->GetSafeHwnd();
pWnd1->GetClientRect(&rect);//获取窗口客户区的坐标
int width = rect.right; //控件宽
int height = rect.bottom; //控件高
::GetWindowRect(hWnd1, &rect1);//列表视图控件1相对于屏幕坐标
pWnd->ScreenToClient(&rect1);//屏幕坐标转换为客户区坐标
我的问题:我用GetClientRect和GetWindowRect两个函数分别获取 列表视图控件的坐标,可是两个函数获取的宽高不相同,差4个像素 ??
`GetClientRect`和`GetWindowRect`两个函数之所以返回的宽度和高度不同,是因为它们获取的区域不同。`GetClientRect`函数获取的是窗口的客户区坐标,而`GetWindowRect`获取的是窗口的整个区域(包括边框、标题栏等)。
在你的例子中,你使用`GetClientRect`函数获取的是列表视图控件的客户区大小,而使用`GetWindowRect`获取的是列表视图控件的整个区域大小。这就是为什么两个函数返回的宽度和高度会有4个像素的差距。
如果你只关心列表视图控件的客户区大小(例如,你想知道可以显示多少内容),你应该使用`GetClientRect`。如果你关心整个控件的大小,包括边框等,则应该使用`GetWindowRect`。在这种情况下,你可能需要将获取到的屏幕坐标转换为客户区坐标,就像你在代码中所做的那样。
|