逻辑坐标与设备坐标有什么区别,为什么要相互转化,希望能有清晰的解释
解决方案 »
- 用vc操作word2003为什么在debug版本下CreateDispatch总失败,而在release版本下面运行正常?
- 问个简单界面问题
- 请高手给一段用VC++写的正弦程序
- js向 atl 传递 dialogarguments
- 我有两个可执行程序,一个是mfc的一个是dos的,如何融合到一起?
- 如何使Dialog窗口总是位于最上层??
- 散分,请各位大虾帮忙看看我是否可以去找工作了。今晚揭贴
- 如何实现象金山词霸一样的界面?
- 为什么我用CFile的write函数将我的对象写入文件后,字符串再取出来变成乱麻?
- 一个非程序员的编程经历!!
- 今天遇到个比较奇怪的问题...10038错误
- 关于windows media的问题
在程序中,所有传递给MFC作图的坐标都是逻辑坐标,也可以认为CDC的所有成员函数都以逻辑坐标作为其参数,CWnd的成员函数都以设备坐标为其参数;
逻辑坐标和设备坐标之间的转换工作可以通过CDC提供了两个成员函数LPToDP和DPToLP来完成
void CDrawView::InvalObj(CDrawObj *pObj)
{
CRect rect = pObj->m_position;
DocToClient(rect);
if (m_bActive && IsSelected(pObj))
{
rect.left -= 4;
rect.top -= 5;
rect.right += 5;
rect.bottom += 4;
}
//Increases the width and height of CRect.
rect.InflateRect(1, 1); // handles CDrawOleObj objects //定义区域,重绘该区域
InvalidateRect(rect, FALSE);
}这是DrawCli示例里的一个函数,能不能给讲讲这个函数是什么意思?
The SelectClipRgn function assumes that the coordinates for a region are specified in device units.
rect.left -= 4;
rect.top -= 5;
rect.right += 5;
rect.bottom += 4; rect.InflateRect(1, 1);
b) 可以认为CWnd的成员函数都以设备坐标为参数;
c) 所有选中测试操作都应该考虑设备坐标,区域的定义该采用设备坐标,如Crect::PtInRect之类的函数只有在采用设备坐标参数时才会保证有正确的结果;
d) 将一些需要长期使用的值用逻辑坐标来保存,如果采用设备坐标来保存某点的坐标的话,那么只要用户对窗口进行以下滚动,该点的坐标就不再有效了。
我说明白没?