随笔 - 14  文章 - 1 评论 - 13 
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用链接

留言簿(1)

随笔分类

随笔档案

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜

逻辑坐标和设备坐标之间的转换。
============================================================
摘自inside vc++ vesion 4th;
============================================================
在设置了设备环境的映射模式及相应的参数之后,CDC的LPtoDP和DPtoLP函数就可用来在逻辑坐标系和设备坐标系之间进行转换,而我们的工作就是要决定什么时候该使用什么样的坐标系。
规则:
可以认为CDC的所有成员函数都以逻辑坐标作为其参数。
可以认为CWnd的成员函数都以设备坐标为其参数。
所有选中测试(hit-test)操作都应该考虑设备坐标。区域的定义应采用设备坐标。某些像CRect::PtInRect之类的函数只有在采用设备坐标参数的时候才会保证有正确的结果
将一些需要长期使用的值用逻辑坐标或物理坐标来保存。如果用设备坐标来保存某点的坐标的话,那么只要用户对窗口进行一下滚动,该点的坐标就不再有效了。
如果我们需要知道当用户按下鼠标左键时,鼠标指针是否落在某个矩形之内,则可用如下代码:

//m_rect is CRect data member of the derived view class with MM_LOENGLISH
//logical coordinates
void CMyView::OnLButtonDown(UINT nFlags,CPoint point)
{
   CRect rect = m_rect;     //rect is a temporary copy of m_rect
   CClientDC dc(this);       //This is how we get a device context
                                        //for SetMapMode and LPtoDP
   dc.SetMapMode(MM_LOENGLISH);
   dc.LPtoDP(rect);          //rect is now in device coordinates
   if(rect.PtInRect(point)){
      TRACE("Mouse cursor is inside the rectangle.\n");
   }
}
posted on 2008-04-02 17:34 田园的拾荒者 阅读(1248) 评论(1)  编辑 收藏 引用 所属分类: C/C++

FeedBack:
# re: 逻辑坐标和设备坐标之间的一点东西 2008-04-03 10:11 Sure
顶~  回复  更多评论
  
只有注册用户登录后才能发表评论。