在某个视图的WM_LBUTTONDOWN消息响应函数下做了一些试验,验证各种坐标系下的坐标转换。
注意:这里的窗口指 该视图以及包围它的边框所组成的区域。
void CWtvView::OnLButtonDown(UINT nFlags, CPoint point)
{
//====================== Point的转换 ======================//
//客户区的点
CPoint pt = point;
CPoint pt1 = point;
CPoint pt2 = point;
CPoint pt3 = point;
//这组语句把点pt从客户区转换成屏幕坐标系下的坐标;
//再从屏幕坐标系映射回客户区坐标系,结果是:pt == point
ClientToScreen(&pt);
GetDesktopWindow()->MapWindowPoints(this,&pt,1);
//下面两组语句得到的结果一样 pt1 == pt2;
//把pt1转换到屏幕坐标系下;
ClientToScreen(&pt1);
//把pt2映射到窗口坐标系下,再从窗口坐标系转换到屏幕坐标系;
MapWindowPoints(GetParentFrame(),&pt2,1);
GetParentFrame()->ClientToScreen(&pt2);
GetCursorPos(&pt3); //得到鼠标在屏幕坐标系中的坐标;
ScreenToClient(&pt3); //转换到客户区;
//下边这两句等效;
GetParentFrame()->ScreenToClient(&pt); //转换到窗口坐标系下;
MapWindowPoints(GetParentFrame(), &pt3, 1); //转换到窗口坐标系下;
//===========