在某个视图的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); //转换到窗口坐标系下;
//===========

本文通过在MFC视图的WM_LBUTTONDOWN消息处理中进行实验,详细探讨了不同坐标系之间的转换过程,包括从屏幕坐标到视图坐标、客户区坐标等的转换,重点关注在窗口区域内的坐标变换。
最低0.47元/天 解锁文章
7536

被折叠的 条评论
为什么被折叠?



