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

      最近在做一个类似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)点。

 

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

 

 

转载于:https://www.cnblogs.com/T-C-hong-dou/p/4719437.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值