本人刚学图形学,又没学过MFC,所以问下各位高手
书中有一代码如下:
void CTest::OnDraw(CDC *pdc){
CTest Doc *pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect Rect;
GetClientRect(&Rect);
pDc -> SetMapMode(MM_ANISOTROPIC);
//pay attention!
pDC -> SetWindowExt(Rect.width(),Rect.Height());//这个是以逻辑单位计算的吗?
pDC -> SetViewPortExt(Rect.right,-Rect.bottom);//以物理单位吗?
}
从书本描述知,SetWindowExt调整窗口范围SetViewPortExt调整视区范围
但为什么参数一个是Rect.width(),Rect.Height()另一个是Rect.right,Rect.bottom
难道width()返回的是逻辑单位,而right返回的是物理单位吗?还是Rect.left 、 top 、right、bottom 的数值是怎么得到的?以屏幕左上角为(0,0)作为参照吗?请分别解答好吗,thank you ! Orz!
书中有一代码如下:
void CTest::OnDraw(CDC *pdc){
CTest Doc *pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect Rect;
GetClientRect(&Rect);
pDc -> SetMapMode(MM_ANISOTROPIC);
//pay attention!
pDC -> SetWindowExt(Rect.width(),Rect.Height());//这个是以逻辑单位计算的吗?
pDC -> SetViewPortExt(Rect.right,-Rect.bottom);//以物理单位吗?
}
从书本描述知,SetWindowExt调整窗口范围SetViewPortExt调整视区范围
但为什么参数一个是Rect.width(),Rect.Height()另一个是Rect.right,Rect.bottom
难道width()返回的是逻辑单位,而right返回的是物理单位吗?还是Rect.left 、 top 、right、bottom 的数值是怎么得到的?以屏幕左上角为(0,0)作为参照吗?请分别解答好吗,thank you ! Orz!
解决方案 »
- 触发菜单项的模拟实现
- 请问 New 与不 New的问题
- 为什么如果初始化子窗口中的CListCtrl,弹出模态子窗口时会出现程序终止?
- 请问要使用CImagelist还要进行什么处理?
- vc6.0中如何使Edit控件能象List控件那样用m_List.Srcoll(size);使滚动条自动下移;
- MFC用什么方法联接ORACLE数据库好???thanks!
- 如何检测路径名是否有效?
- 函数重载,和虚函数的功能,请帮我解释解释..好吗?
- 請問SDK中無窗口程序在什麼地方設置SetTimer()?
- 如何以特定时间为基点往后按正常时间显示
- 请问国外有什么关于模式识别的好论坛吗
- CMFCRibbonEdit怎么禁用?
mk:@MSITStore:C:\Program%20Files\Microsoft%20Visual%20Studio\MSDN98\98VS\2052\techart.chm::/html/msdn_mapping.htm
把红色的部分替换成你的MSDN的路径,在MSDN中有跳转至URL,填入改过的链接地址
(这里,x的值其实就等于Rect.width(),y的值等于Rect.Height())其次,映射关系:
所谓映射就是物理和逻辑的映射。使用GetClientRect方法后,获取到窗口的物理大小;然后再使用SetWindowExt,设置了窗口的逻辑大小,与之相对应的是SetViewportExt,也就是说在这里作了一个映射。SetWindowExt中的第一个参数
窗口宽度与 SetViewportExt中的第一个参数
相对应起来,逻辑宽度和物理宽度映射,逻辑高度和物理高度映射。这样,一旦映射关系确立之后,再使用后面的方法进一步的操作。映射关系是有这两个函数来确定的,所以
“pDC -> SetWindowExt(Rect.width(),Rect.Height());//这个是以逻辑单位计算的吗?
pDC -> SetViewPortExt(Rect.right,-Rect.bottom);//以物理单位吗?”单纯的认为以什么单位计算是不合理的而且在你的上述代码中,映射比是1:1,
看看这段代码:
pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetWindowExt(10240,7680);
pDC->SetViewportExt(1024,768);
pDC->Rectangle(0,0,100,100); 就会画一个10 pixels*10 pixels的矩形。其本质就是,X方向,每个逻辑单位有1024/10240个象素,Y方向每个逻辑单位有768/7680个象素。
你说"这里,x的值其实就等于Rect.width(),y的值等于Rect.Height()"
就是说它们是等价的,就好像是以下这样写吗?
struct Rect{
long right;
long width(){return right;}
};那么它们的作用就是自定义坐标单位: 物理/逻辑(像素)和方向:(上例的y与物理的y相反)吗?