码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-10 23:51:11      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

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

 

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

 

 

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

标签:

原文地址:http://www.cnblogs.com/T-C-hong-dou/p/4719437.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!