100165560.htm

来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 166 行 · 第 1/2 页

HTM
166
字号


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
	
        20.1.1  GDI和GDI+
</title></head>
<body>
    <div class="area">

        

        <div class="col1">
            <div class="lineBlue">
            </div>
            <!-- title -->
            <div class="arcTitle">
                <h1>
                    <a href="../16">
                        C#高级编程(第3版)【全文连载】
                    </a>
                </h1>
                <div style="text-align: center; font-size: 15px">
                    <a href="100165560.htm">
                        20.1.1  GDI和GDI+
                    </a>
                </div>
                <div style="text-align: center; font-size: 15px">
                    <a class="url" href="../../default.htm">http://book.csdn.net/</a>
                    2006-10-13 14:41:00
                </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="divCurrentNode" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165560.htm'><font color='red'>20.1.1  GDI和GDI+</font></a></h1>
                        <div id="divRelateNode" style="padding-left: 2px">
                        <div style='float:left;width:49%'>·<a href='100165557.htm'>19.4.3  定制控件</a></div><div style='float:right;width:49%'>·<a href='100165558.htm'>19.5  小结</a></div><div style='float:left;width:49%'>·<a href='100165559.htm'>20.1  理解绘图规则</a></div><div style='float:right;width:49%'>·<a href='100165561.htm'>20.1.2  绘制图形</a></div><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>
                    </div>
                </div>
                </div>
            <!-- main -->
            <div id="main">
                <div id="text"> <link href="css.css" rel="stylesheet" type="text/css" /><h3 style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 0cm; MARGIN-RIGHT: 0cm; FTEL: 8.15pt"><a ftel="_Toc507815353"><span lang="EN-US">20.1.1 &nbsp;GDI</span></a><span style="FONT-FAMILY: 黑体">和</span><span lang="EN-US">GDI+</span></h3>
<p class="MsoNormal" style="LINE-HEIGHT: 16pt"><span style="FONT-FAMILY: 宋体">一般来说,</span><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体">的一个优点</span><span style="FONT-SIZE: 5.5pt"> </span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">实际上是现代操作系统的优点</span><span lang="EN-US">)</span><span lang="EN-US" style="FONT-SIZE: 5.5pt"> </span><span style="FONT-FAMILY: 宋体">是它可以让开发人员不考虑特定设备的细节。例如,不需要理解硬盘设备驱动程序,只需在相关的</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">类中调用合适的方法</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">在没有</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">的日子里,使用等价的</span><span lang="EN-US">Windows API</span><span style="FONT-FAMILY: 宋体">函数</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,就可以编程读写磁盘上的文件。这个规则也适用于绘图。计算机在屏幕上绘图时,把指令发送给视频卡。问题是市面上有几百种不同的视频卡,大多数有不同的指令集和功能。如果把这个考虑在内,在应用程序中为每个视频卡驱动程序编写在屏幕上绘图的特定代码,这样的应用程序就根本不可能编写出来。这就是为什么在</span><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体">最早期的版本中就有</span><span lang="EN-US">Windows Graphical Device Interface (GDI)</span><span style="FONT-FAMILY: 宋体">的原因。</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 16pt"><span lang="EN-US">GDI+</span><span style="FONT-FAMILY: 宋体">提供了一个抽象层,隐藏了不同视频卡之间的区别,这样就可以调用</span><span lang="EN-US">Windows API</span><span style="FONT-FAMILY: 宋体">函数完成指定的任务了,</span><span lang="EN-US">GDI</span><span style="FONT-FAMILY: 宋体">会在内部指出如何让视频卡完成要绘制的图形。</span><span lang="EN-US">GDI</span><span style="FONT-FAMILY: 宋体">还可以完成其他任务。大多数计算机都有多个显示设备<span style="LETTER-SPACING: -1pt">&mdash;&mdash;</span></span><span style="LETTER-SPACING: -1pt"> </span><span style="FONT-FAMILY: 宋体">例如,监视器和打印机。</span><span lang="EN-US">GDI</span><span style="FONT-FAMILY: 宋体">成功地使应用程序所使用的打印机看起来与屏幕一样。如果要打印某些东西,而不是显示它们,只需告诉系统输出的设备是打印机,再用相同的方式调用相同的</span><span lang="EN-US">Windows API</span><span style="FONT-FAMILY: 宋体">函数即可。</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 16pt"><span style="FONT-FAMILY: 宋体">可以看出,</span><span lang="EN-US">DC(</span><span style="FONT-FAMILY: 宋体">设备环境</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">是一个功能非常强大的对象,在</span><span lang="EN-US">GDI</span><span style="FONT-FAMILY: 宋体">下,所有的绘图工作都必须通过设备环境来完成。</span><span lang="EN-US">DC</span><span style="FONT-FAMILY: 宋体">甚至可用于不涉及在屏幕或其他硬件设备上绘图的其他操作,例如在内存中修改图像。</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 16pt"><span lang="EN-US">GDI</span><span style="FONT-FAMILY: 宋体">给开发人员提供了一个相当高级的</span><span lang="EN-US">API</span><span style="FONT-FAMILY: 宋体">,但它仍是一个基于旧的</span><span lang="EN-US">Windows API</span><span style="FONT-FAMILY: 宋体">并且有</span><span lang="EN-US">C</span><span style="FONT-FAMILY: 宋体">语言风格函数的</span><span lang="EN-US">API</span><span style="FONT-FAMILY: 宋体">,所以使用起来不是很方便。</span><span lang="EN-US">GDI+</span><span style="FONT-FAMILY: 宋体">在很大程度上是</span><span lang="EN-US">GDI</span><span style="FONT-FAMILY: 宋体">和应用程序之间的一层,提供了更直观、基于继承性的对象模型。尽管</span><span lang="EN-US">GDI+</span><span style="FONT-FAMILY: 宋体">基本上是</span><span lang="EN-US">GDI</span><span style="FONT-FAMILY: 宋体">的一个包装器,但</span><span lang="EN-US">Microsoft</span><span style="FONT-FAMILY: 宋体">已经能通过</span><span lang="EN-US">GDI+</span><span style="FONT-FAMILY: 宋体">提供新功能了,并宣称它有一些性能方面的改进。</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 16pt"><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">基类库的</span><span lang="EN-US">GDI+</span><span style="FONT-FAMILY: 宋体">部分非常大,本章不解释其表面特性。这是一个深思熟虑的决定,因为只要解释其中的几个类、方法和属性,就会把本章变成一个仅列出</span><span lang="EN-US">GDI+</span><span style="FONT-FAMILY: 宋体">类和方法的参考指南。而理解绘图的基本规则更重要;所以您应可以自己研究这些类。当然,关于</span><span lang="EN-US">GDI+</span><span style="FONT-FAMILY: 宋体">中类和方法的完整列表,可以参阅</span><span lang="EN-US">MSDN</span><span style="FONT-FAMILY: 宋体">文档说明。</span></p>
<p class="a3" style="MARGIN-TOP: 8.15pt; FTEL: 21.45pt"><span style="FONT-FAMILY: 黑体">注意:</span></p>
<p class="a1" style="FTEL: 21.45pt"><span style="FONT-FAMILY: 楷体_GB2312">有</span><span lang="EN-US">VB</span><span style="FONT-FAMILY: 楷体_GB2312">背景的开发人员会发现,自己并不熟悉绘图过程涉及的概念,因为</span><span lang="EN-US">VB</span><span style="FONT-FAMILY: 楷体_GB2312">的重点是处理绘图的控件。有</span><span lang="EN-US">C++/MFC</span><span style="FONT-FAMILY: 楷体_GB2312">背景的开发人员则比较熟悉这个领域,因为</span><span lang="EN-US">MFC</span><span style="FONT-FAMILY: 楷体_GB2312">要求开发人员使用</span><span lang="EN-US">GDI</span><span style="FONT-FAMILY: 楷体_GB2312">更多地控制绘图过程。但是,即使您具备很好的</span><span lang="EN-US">GDI</span><span style="FONT-FAMILY: 楷体_GB2312">背景知识,也会发现</span><span lang="EN-US">GDI+</span><span style="FONT-FAMILY: 楷体_GB2312">中有许多新东西。</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">1. GDI +</span><span style="FONT-FAMILY: 黑体">命名空间</span></h4>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">表</span><span lang="EN-US">20-1</span><span style="FONT-FAMILY: 宋体">列出了</span><span lang="EN-US">GDI+</span><span style="FONT-FAMILY: 宋体">基类的主要命名空间。</span></p>
<p class="a5" style="MARGIN-TOP: 8.15pt"><span style="FONT-FAMILY: 黑体">表</span><span lang="EN-US">&nbsp; 20-1</span></p>
<div align="center">
<table class="MsoNormalTable" style="MARGIN-LEFT: 12.5pt; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-COLLAPSE: collapse; BORDER-BOTTOM-STYLE: none" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BORDER-LEFT-WIDTH: 1pt; BORDER-LEFT-COLOR: windowtext; PADDING-BOTTOM: 1.4pt; WIDTH: 137.6pt; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="183">
            <p class="a2"><span style="FONT-FAMILY: 黑体">命</span> <span style="FONT-FAMILY: 黑体">名</span> <span style="FONT-FAMILY: 黑体">空</span> <span style="FONT-FAMILY: 黑体">间</span></p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 1.4pt; WIDTH: 300.1pt; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="400">
            <p class="a2"><span style="FONT-FAMILY: 黑体">说</span><span lang="EN-US">&nbsp;&nbsp;&nbsp; </span><span style="FONT-FAMILY: 黑体">明</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 1.4pt; WIDTH: 137.6pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="183">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">System.Drawing</span></p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 1.4pt; WIDTH: 300.1pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="400">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span style="FONT-FAMILY: 宋体">包含与基本绘图功能有关</span><span style="MARGIN-TOP: 16px; Z-INDEX: 1; LEFT: 0px; MARGIN-LEFT: 80px; WIDTH: 111px; POSITION: absolute; HEIGHT: 26px">
            <table cellspacing="0" cellpadding="0">
                <tbody>
                    <tr>
                        <td style="VERTICAL-ALIGN: top" width="111" height="26"><span style="Z-INDEX: 1; 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">

⌨️ 快捷键说明

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