关于MFC视口与窗口原点的设置

您所在的位置:网站首页 位于窗口左上角的是 关于MFC视口与窗口原点的设置

关于MFC视口与窗口原点的设置

2024-07-09 17:53| 来源: 网络整理| 查看: 265

      最近在做一个类似Coreldraw的绘图软件,MFC的坐标机制确实有点烦人,首先,在设视口与窗口原点之前,我们必须设置好MFC的坐标映射模式,用SetMapMode()函数。

(1)视口原点的位置(就是画笔dc的初始位置)仅仅由SetViewportOrgEx (x,y) 函数 来移动。(x,y)是相对于客户区左上角的设备坐标,即像素),而SetWindowOrg (X,Y )设置窗口的逻辑坐标点(X,Y)映射为的设备环境的设备点(0,0)(单位为逻辑坐标单位)

(2)其实既然叫做“映射模式”,我们就应该从“映射”这个角度来理解。SetViewportOrg(x,y)就是把设备(视口)点(x,y)映射到逻辑点(0,0),所有坐标点都不用移动;SetWindowOrg(x,y)就是把逻辑(窗口)点(x,y)映射到设备点(0,0),同样所有坐标点都不用移动;只要(0,0)确定了,其他的点跟着变就行了。

 

比如在MM_LOMETRIC模式下,逻辑坐标,x轴向右,y轴向上,用代码:

CRect rect;

GetClientRect(&rect);

pDC->SetViewportOrg(rect.width()/2, rect.heigth()/2);

就是把设备坐标的(rect.width()/2, rect.heigth()/2)位置映射到了逻辑坐标的(0,0)点,或者说,逻辑坐标的(rect.width()/2(单位转换), rect.heigth()/2(单位转换))点,就是设备坐标的(0,0)点。

用代码:

CRect rect;

GetClientRect(&rect);

pDC->SetWindowOrg(-rect.width()/2(单位转换), rect.heigth()/2(单位转换));

就是把逻辑坐标的(-rect.width()/2(单位转换), rect.heigth()/2(单位转换))映射到了设备坐标的(0,0)点。

 

上面两种方法都把逻辑坐标映射到了屏幕中心。

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3