📄 subject_20939.htm
字号:
<p>
序号:20939 发表者:man_chang 发表日期:2002-11-12 11:55:47
<br>主题:使用SetWindowOrgEx函数赖改变逻辑坐标的原点的问题!!!!
<br>内容:代码如下(Win32 code 《Programming Windows》P168-P169):<BR>CRect rect;<BR>GetClientRect(&rect);<BR><BR>CPoint pt;<BR>pt.x=rect.Width();<BR>pt.y=rect.Height();<BR><BR>SetMapMode(hdc,MM_LOENGLISH);<BR>DptoLP(hdc,&pt,1);<BR>SetWindowOrgEx(hdc,-pt.x/2,-pt.y/2,NULL);<BR><BR>我的问题是:在SetMapMode函数设置映射模式后,使用SetWindowOrgEx函数赖改变逻辑坐标的原点,使坐标原点位于窗口客户区的中央,我认为SetWindowOrgEx(...)中的x,y值应为<BR>-pt.x/2,pt.y/2时,才能把逻辑点(-pt.x/2,pt.y/2)映射位设备坐标点(0,0),这样才能使坐标原点位于窗口客户区的中央(当然,肯定不对,因为上机测试过)......<BR>请高手指点,应如何理解<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:未出手的飞刀 回复日期:2002-11-12 23:03:56
<br>内容:<BR>你的测试错了,要不就是你理解错了,<BR>反正你的代码确实使逻辑坐标原点改变到窗口客户区的中央
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:man_chang 回复日期:2002-11-13 09:47:32
<br>内容:Thanks,这些代码确实使逻辑坐标原点改变到窗口客户区的中央 。<BR>but 我的问题是:<BR>在MM_LOENGLISH映射模式中,坐标系X轴的正向向右,Y轴正向向上,要使坐标系位于窗口客户区的中央,我认为应使点(-pt.x/2,pt.y/2)映射为设备坐标点(0,0),而不是点(-pt.x/2,-pt.y/2).但实际上是(-pt.x/2,-pt.y/2)点时才能使坐标原点位于窗口客户区的中央,我不知道如何理解????<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:惊风 回复日期:2002-11-13 09:55:34
<br>内容:pt经过DptoLP()转换后,其中pt的y值应该是负值才对,所以设置(-pt.x/2,-pt.y/2)是对的,刚好和你的理解一致,我没有验证只是猜测。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:man_chang 回复日期:2002-11-13 11:53:30
<br>内容:bscott,<BR>Thanks a lot.<BR>I have test in the vc6.0,It's OK!<BR>It is that I don't really understand the function DPtoLP().<BR>THANKS......
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:未出手的飞刀 回复日期:2002-11-13 14:59:49
<br>内容:<BR>是 (-pt.x/2,-pt.y/2)映射为设备坐标点(0,0)才能使逻辑坐标原点改变到窗口客户区的中央啊。<BR>你可以这样逆向来想,如果逻辑坐标原点(0,0)改变到窗口客户区的中央,则逻辑坐标(-pt.x/2,-pt.y/2)在那里呢,根据x向右,y向上为正,(-pt.x/2,-pt.y/2)正好是屏幕左上角,正是设备原点所在。所以你的影射是对的,呵呵。<BR><BR>实际上使用 <BR>SetViewportOrgEx(hdc,rect.Width()/2,rect.Height()/2,NULL);<BR>更直观一些。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -