setwindoworg和setviewportorg的问题

upc_xiaowei 2010-05-28 04:05:25
setviewportorg的时候用的是像素,setwindoworg的时候用的是逻辑值。
比如setviewportorg(100,100);就是把距离客户区上边框100像素,左边框100像素的点设为逻辑原点
setwindoworg(100,100),就是把客户区的左上角设置为逻辑坐标(100,100)
我这样理解有错误吗?
应该对吧。
如果同时使用呢?
setviewportorg(100,100);
setwindoworg(100,100);
这时候的对应关系是怎么样的呢?(逻辑坐标和设备坐标的对应关系)

谁来说明一下啊
...全文
323 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
upc_xiaowei 2010-06-28
  • 打赏
  • 举报
回复
这个帖子我没结?
zoogoo 2010-06-28
  • 打赏
  • 举报
回复
我觉得可以这样理解的:
其实既然叫做“映射模式”,我们就应该从“映射”这个角度来理解。
SetViewportOrg(x,y)就是把设备(视口)点(x,y)映射到逻辑点(0,0),所有坐标点都不用移动;
SetWindowOrg(x,y)就是把逻辑(窗口)点(x,y)映射到设备点(0,0),同样所有坐标点都不用移动;
只要(0,0)确定了,其他的点跟着变就行了。
h1024254560 2010-05-30
  • 打赏
  • 举报
回复
不太会。。看看
东莞某某某 2010-05-30
  • 打赏
  • 举报
回复
兔子威武
不说害怕 2010-05-30
  • 打赏
  • 举报
回复
看到坐标就头痛..唉..
看到最后还是看不懂你们在说啥.
wltg2001 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 upc_xiaowei 的回复:]
其实(100,100),(100,100)之后又回去了,我觉得我对了
[/Quote]
研究了一下,我觉得是不是可以这样理解这两个函数:
物理坐标原点始终都是左上角,初始状态逻辑坐标原点也是左上角。
SetViewportOrg(x,y)的作用是逻辑坐标原点向右移动x个单位,向下移动y个单位(当然些时x轴以向右为正方向,y轴以向下为正方向),也就是说,这个函数的作用是将逻辑坐标原点从原来位置分别向着正方向移动若干个单位。
比如:
SetViewportOrg(100,100);//这句的作用是将逻辑坐标原点向右移100,向下移100.
SetWindowOrg(x,y)的作用是将逻辑坐标原点向左移x个单位,向上移y个单位。也就是说这个函数的作用是将逻辑坐标原点从原来位置分别向着负方向移动若干个单位。
比如:
SetWindowOrg(100,100)//这句的作用是将逻辑坐标原点从原来的位置向左移100个单位,向上移100个单位。
我试了一下将这两句同时写:
pDC->SetWindowOrg(100,100);
pDC->SetViewportOrg(100,100);
发现逻辑坐标原点又回到了左上角。
而将它改成:
pDC->SetWindowOrg(50,50);
pDC->SetViewportOrg(100,100);
发现,结果也是符合我上面所说的。
总结,这两个函数应该可以看作是将逻辑坐标进行移动,但是两者移动的方向恰好相反,SetViewportOrg是向正方向移动,而SetWindowOrg是向着负方向移动。另外,SetMapMode选择不同的映射模式应该也会影响到这两个函数。
upc_xiaowei 2010-05-29
  • 打赏
  • 举报
回复
其实(100,100),(100,100)之后又回去了,我觉得我对了
wltg2001 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 upc_xiaowei 的回复:]
楼下最后那一句的意思是,setviewportorg和setwindoworg谁最后调用,窗口原点由谁确定了?
那么你的理解就错了,以我无数次的实验结果来看是不对的
[/Quote]
我试验了一下,发现我的说法确实是错误的,具体的情况还不是很明白,回去思考下。
upc_xiaowei 2010-05-29
  • 打赏
  • 举报
回复
为了广大后继者的福祉,我查了一天资料,突然悟了,虽然有可能不正确:
setviewportorg毫无疑问的把逻辑原点设在了距离客户区上方x_view,距离客户区左边y_view的地方,也就是设备坐标的(x_view,y_view)映射为逻辑原点(0,0)
setwindoworg可以这么理解,它把逻辑原点逆着x,y轴的方向移动了x_window,y_window的距离。
比如setviewportorg(100,100),
setwindoworg(100,100),
这样逻辑原点又回到了设备原点!
实验结果也说明了这一点。
upc_xiaowei 2010-05-29
  • 打赏
  • 举报
回复
楼下最后那一句的意思是,setviewportorg和setwindoworg谁最后调用,窗口原点由谁确定了?
那么你的理解就错了,以我无数次的实验结果来看是不对的
upc_xiaowei 2010-05-29
  • 打赏
  • 举报
回复
所见略同啊,那些写博客的没有一个解释清楚地啊
wltg2001 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 upc_xiaowei 的回复:]
setviewportorg的时候用的是像素,setwindoworg的时候用的是逻辑值。
比如setviewportorg(100,100);就是把距离客户区上边框100像素,左边框100像素的点设为逻辑原点
setwindoworg(100,100),就是把客户区的左上角设置为逻辑坐标(100,100)
我这样理解有错误吗?
应该对吧。
如果同时使用呢?
setviewportor……
[/Quote]
SetViewPortOrg用的是物理坐标,比如SetViewPortOrg(100,100)是将以左上角为(0,0),向下100,向右100的那个点设为逻辑坐标原点。
SetWindowOrg用的是逻辑坐标,比如SetWindowOrg(100,100)是将屏幕左上角,物理坐标(0,0)点的逻辑坐标设为(0,0)点
这两个API一般只用一个就行了,如果你用了两个,那么,当然以后调用的那一个为准了。
upc_xiaowei 2010-05-28
  • 打赏
  • 举报
回复
快乐鹦鹉来啊
upc_xiaowei 2010-05-28
  • 打赏
  • 举报
回复
兔子党来人啊
upc_xiaowei 2010-05-28
  • 打赏
  • 举报
回复
高手来一下啊

16,509

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧