100165565.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 212 行 · 第 1/2 页
HTM
212 行
</table>
</span><span style="FONT-FAMILY: 宋体">首先介绍</span><span lang="EN-US"> Point</span><span style="FONT-FAMILY: 宋体">。从概念上讲,</span><span lang="EN-US">Point</span><span style="FONT-FAMILY: 宋体">在这些结构中是最简单的,在数学上,它完全等价于一个二维矢量,包含两个公共整型属性,表示它与某个特定位置的水平和垂直距离</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">在屏幕上</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,如图</span><span lang="EN-US">20-3</span><span style="FONT-FAMILY: 宋体">所示。</span></p>
<p align="center"><span style="MARGIN-TOP: 28px; Z-INDEX: 4; LEFT: 0px; MARGIN-LEFT: 259px; WIDTH: 87px; POSITION: absolute; HEIGHT: 33px">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="VERTICAL-ALIGN: top" width="87" height="33"><span style="Z-INDEX: 4; LEFT: 0pt; POSITION: absolute">
<table cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<div style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 0pt; PADDING-TOP: 0pt">
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 7.5pt">10</span><span style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体">个单位</span></p>
</div>
</td>
</tr>
</tbody>
</table>
</span> </td>
</tr>
</tbody>
</table>
</span><span style="MARGIN-TOP: 21px; Z-INDEX: 7; LEFT: 0px; MARGIN-LEFT: 311px; WIDTH: 87px; POSITION: absolute; HEIGHT: 33px">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="VERTICAL-ALIGN: top" width="87" height="33"><span style="Z-INDEX: 7; LEFT: 0pt; POSITION: absolute">
<table cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<div style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 0pt; PADDING-TOP: 0pt">
<p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 7.5pt">Y</span></p>
</div>
</td>
</tr>
</tbody>
</table>
</span> </td>
</tr>
</tbody>
</table>
</span><span style="MARGIN-TOP: 60px; Z-INDEX: 5; LEFT: 0px; MARGIN-LEFT: 242px; WIDTH: 87px; POSITION: absolute; HEIGHT: 33px">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="VERTICAL-ALIGN: top" width="87" height="33"><span style="Z-INDEX: 5; LEFT: 0pt; POSITION: absolute">
<table cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<div style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 0pt; PADDING-TOP: 0pt">
<p class="MsoNormal"><span style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体">点</span><span lang="EN-US" style="FONT-SIZE: 7.5pt">B</span></p>
</div>
</td>
</tr>
</tbody>
</table>
</span> </td>
</tr>
</tbody>
</table>
</span><span lang="EN-US"><img height="84" width="224" alt="" src="20/image003.jpg" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="FONT-FAMILY: 宋体">图</span><span lang="EN-US"> 20-3</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">为了从点</span><span lang="EN-US">A</span><span style="FONT-FAMILY: 宋体">到点</span><span lang="EN-US">B</span><span style="FONT-FAMILY: 宋体">,需要水平移动</span><span lang="EN-US">20</span><span style="FONT-FAMILY: 宋体">个单位,并向下垂直移动</span><span lang="EN-US">10</span><span style="FONT-FAMILY: 宋体">个单位,在图中标为</span><span lang="EN-US">x</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">y</span><span style="FONT-FAMILY: 宋体">,这就是它们的一般含义。我们可以创建一个</span><span lang="EN-US">Point</span><span style="FONT-FAMILY: 宋体">结构,表示它们:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><a ftel="OLE_LINK3"><span lang="EN-US">Point ab = new Point(20, 10);</span></a></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">Console.WriteLine("Moved {0} across, {1} down", ab.X, ab.Y);</span></p>
<p class="MsoNormal"><span lang="EN-US">X</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">Y</span><span style="FONT-FAMILY: 宋体">都是读写属性,也可以在</span><span lang="EN-US">Point</span><span style="FONT-FAMILY: 宋体">中设置这些值:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">Point ab = new Point();</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">ab.X = 20;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">ab.Y = 10;</span></p>
<p class="a6" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">Console.WriteLine("Moved {0} across, {1} down", ab.X, ab.Y);</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">注意,按照惯例,水平和垂直坐标表示为</span><span lang="EN-US">x</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">y(</span><span style="FONT-FAMILY: 宋体">小写</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,但相应的</span><span lang="EN-US">Point</span><span style="FONT-FAMILY: 宋体">属性是</span><span lang="EN-US">X</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">Y(</span><span style="FONT-FAMILY: 宋体">大写</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,因为在</span><span lang="EN-US">C#</span><span style="FONT-FAMILY: 宋体">中,公共属性的一般约定是名称以大写字母开头。</span></p>
<p class="MsoNormal"><span lang="EN-US">PointF</span><span style="FONT-FAMILY: 宋体">与</span><span lang="EN-US">Point</span><span style="FONT-FAMILY: 宋体">完全相同,但</span><span lang="EN-US">X</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">Y</span><span style="FONT-FAMILY: 宋体">属性的类型是</span><span lang="EN-US">float</span><span style="FONT-FAMILY: 宋体">,而不是</span><span lang="EN-US">int</span><span style="FONT-FAMILY: 宋体">。</span><span lang="EN-US">PointF</span><span style="FONT-FAMILY: 宋体">用于坐标不是整数值的情况。已经为这些结构定义了数据类型转换,这样就可以把</span><span lang="EN-US">Point</span><span style="FONT-FAMILY: 宋体">隐式转换为</span><span lang="EN-US"> PointF</span><span style="FONT-FAMILY: 宋体">,</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">注意因为</span><span lang="EN-US">Point</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US"> PointF</span><span style="FONT-FAMILY: 宋体">是结构,这种转换实际上涉及到数据的复制</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">。但没有相应的逆过程,要把</span><span lang="EN-US">PointF</span><span style="FONT-FAMILY: 宋体">转换为</span><span lang="EN-US">Point</span><span style="FONT-FAMILY: 宋体">,必须显式地复制值,或使用下面的</span><span lang="EN-US">3</span><span style="FONT-FAMILY: 宋体">个转换方法</span><span lang="EN-US">Round()</span><span style="FONT-FAMILY: 宋体">、</span><span lang="EN-US">Truncate()</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">Ceiling()</span><span style="FONT-FAMILY: 宋体">:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US"> PointF abFloat = new PointF(20.5F, 10.9F);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> // converting to Point</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US" style="COLOR: black"> Point ab = new Point();</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US" style="COLOR: black"> ab.X = (int)abFloat.X;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US" style="COLOR: black"> ab.Y = (int)abFloat.Y;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> Point ab1 = Point.Round(abFloat);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> Point ab2 = Point.Truncate(abFloat);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> Point ab3 = Point.Ceiling(abFloat);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> // but conversion back to PointF is implicit</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US" style="COLOR: black"> PointF abFloat2 = ab;</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17.6pt"><span style="FONT-FAMILY: 宋体">下面看看测量单位。在默认情况下,</span><span lang="EN-US">GDI+</span><span style="FONT-FAMILY: 宋体">把单位看作是屏幕</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">或打印机,无论图形设备是什么,都可以这样认为</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">上的像素,这就是</span><span lang="EN-US">Graphics</span><span style="FONT-FAMILY: 宋体">对象方法把它们接收到的坐标看作其参数的方式。例如,点</span><span lang="EN-US">new Point(20,10)</span><span style="FONT-FAMILY: 宋体">表示在屏幕上水平移动</span><span lang="EN-US">20</span><span style="FONT-FAMILY: 宋体">个像素,向下垂直移动</span><span lang="EN-US">10</span><span style="FONT-FAMILY: 宋体">个像素。通常这些像素从窗口客户区域的左上角开始测量,如上面的示例所示。但是,情况并不总是如此。例如,在某些情况下,需要以窗口的左上角</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">包括其边框</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">为原点来绘图,甚至以屏幕的左上角为原点。但在大多数情况下,除非文档说明书说明,否则都可以假定像素值是相对于客户区域的左上角。</span></p></div>
<!-- page -->
<div class="page" style="text-align: center">
<a href="100165564.htm">上一页</a> <a href="index.html">首页</a> <a href="100165566.htm">下一页</a>
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165565.htm'><font color='red'>20.2.1 Point和PointF结构</font></a></h1>
<div id="divRealteNod2" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165562.htm'>20.1.3 使用OnPaint()绘制图形</a></div><div style='float:right;width:49%'>·<a href='100165563.htm'>20.1.4 使用剪切区域</a></div><div style='float:left;width:49%'>·<a href='100165564.htm'>20.2 测量坐标和区域</a></div><div style='float:right;width:49%'>·<a href='100165566.htm'>20.2.2 Size和SizeF结构</a></div><div style='float:left;width:49%'>·<a href='100165567.htm'>20.2.3 Rectangle和RectangleF结构</a></div><div style='float:right;width:49%'>·<a href='100165568.htm'>20.2.4 Region</a></div></div>
</div>
</div>
</div>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?