目的:获得控件m_list的客户区坐标。
有人会想当然的写出如下代码:
CRect rect;
m_sheet.GetClientRect(&rect);
他们认为GetClientRect是获取客户区坐标系下的坐标,所以直接用控件变量来调用该函数。
事实是:GetClientRect确实是获取客户区坐标系下的坐标,不过当控件调用它时,获取的是控件坐标系下的坐标。
什么意思呢?你只要记住GetClientRect不论谁调用它,TopLeft的坐标永远是(0,0),意思就是GetClientRect获取的信息只有BottomRight是有效的信息,TopLeft信息是无意义的。
知道了这点,那么想获取控件的客户区坐标,通过调用GetClientRect是行不通的,只有通过调用GetWindowRect,获取屏幕坐标,再调用ScreenToClient转换成客户区坐标系下的坐标。以下是示例代码:
CRect rect;
m_sheet.GetWindowRect(&rect);
ScreenToClient(&rect);