⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_40529.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:40529 发表者:titany 发表日期:2003-05-19 15:57:57
<br>主题:SetWindowExt 和 SetViewportExt (求解)
<br>内容:SetWindowExt 和 SetViewportExt 起什么作用的?查MSDN看不明白,INSIDECPP里是这样描述的,但我想知道它们是怎样起作用的<BR>/*The functions SetWindowExt and SetViewportExt work together to set the scale, based on the window's current client rectangle returned by the GetClientRect function. */<BR><BR><BR>void CMyView::OnDraw(CDC* pDC)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect rectClient;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(rectClient);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetMapMode(MM_ANISOTROPIC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetWindowExt(1000, 1000);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetViewportExt(rectClient.right, -rectClient.bottom);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetViewportOrg(rectClient.right / 2, rectClient.bottom / 2);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;Ellipse(CRect(-500, -500, 500, 500));<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>
回复者:titany 回复日期:2003-05-19 23:49:41
<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>
回复者:花无缺 回复日期:2003-05-20 21:23:08
<br>内容:设置映射模式的,选择MM_ANISOTROPIC时,x,y坐标轴的单位不同。<BR>以你当前的设置来说,相当于把你的frame客户区水平垂直分成<BR>1000份(因为你选的是1000,1000)当然,这时候你的单位坐标<BR>要随着你改变frame的大小而变。<BR>1。你可以试一下先改变pDC-&gt;SetWindowExt(1000, 1000);看看什么<BR>效果(不改变pDC-&gt;Ellipse(CRect(-500, -500, 500, 500));<BR><BR>2。然后再试一下改变pDC-&gt;Ellipse(CRect(-500, -500, 500, 500));<BR>不改变pDC-&gt;SetWindowExt(1000, 1000);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<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>
回复者:titany 回复日期:2003-05-21 10:02:52
<br>内容:那pDC-&gt;SetViewportExt(rectClient.right, -rectClient.bottom);<BR>呢?为什么-rectClient.bottom有时候是正的,有时侯又是负的,我最不明白的就是这里了&nbsp;&nbsp;&nbsp;&nbsp;
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:萧七 回复日期:2003-05-21 17:48:39
<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>
回复者:titany 回复日期:2003-05-22 11:14:40
<br>内容:那除了MM_ANISOTROPIC,什么映射模式下可以是负的呢
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:萧七 回复日期:2003-05-22 12:06:24
<br>内容:好象除了默认的MM_TEXT外,都这样吧,查MSDN吧
<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>回复者:花无缺 回复日期:2003-05-22 19:12:35
<br>内容:只有在isotropic和anisotropic方式下,你才能用SetWindowExt和SetViewportExt<BR>别的方式下不起作用,同样的道理也只有这两种映射下,你才能用setwindoworg和<BR>setviewportorg那么,这些函数有什么作用呢?<BR>1 setwindoworg和setviewportorg分别用来改变逻辑坐标和设备坐标的圆点,即对应<BR>点。注意,这时逻辑坐标和设备坐标坐标的单位你可没有设。<BR><BR>2 现在开始设置逻辑坐标系的单位和方向,你知道,设备坐标单位永远是pixel,x轴向右,y向下。那逻辑坐标系(单位,方向)怎么定呢?<BR>采用的办法就是用逻辑坐标系下的一个矩形映射设备坐标系下的一个矩形。比如你<BR>SetWindowExt(1000, 1000);SetViewportExt(10, 10);这里的意思就是你的逻辑坐标<BR>的单位为:10pixel/1000=1/100,方向就是x轴向右,y向下。<BR>如果你这么设SetWindowExt(1000, 1000);SetViewportExt(10, -10);那么单位没有改<BR>变,10pixel/1000=1/100,但y轴的方向改变了,变成向上了。当然你也可以改x轴的方向SetViewportExt(-10, 10);此时x周向左,当然可以同时改。这就是逻辑坐标系到设备坐标系的变换关系。<BR><BR>2003-5-22 19:15:14

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -