﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-珠海.NET俱乐部</title><link>http://www.cnblogs.com/team/zhuhai/</link><description>关注.NET技术，交流.NET技术，应用.NET技术。</description><language>zh-cn</language><lastBuildDate>Sat, 28 Jan 2012 19:30:13 GMT</lastBuildDate><pubDate>Sat, 28 Jan 2012 19:30:13 GMT</pubDate><ttl>60</ttl><item><title>C# Compiler Options</title><link>http://www.cnblogs.com/wd775/archive/2011/02/24/1964166.html</link><dc:creator>绿化树</dc:creator><author>绿化树</author><pubDate>Thu, 24 Feb 2011 13:08:00 GMT</pubDate><guid>http://www.cnblogs.com/wd775/archive/2011/02/24/1964166.html</guid><description><![CDATA[<p><br />
<h1 class="title">/platform (Specify Output Platform) (C# Compiler Options)&nbsp; </h1>
<div class="lw_vs">

Specifies which version of the common language runtime (CLR) can run the assembly.</div>
<div id="mainSection">
<div id="mainBody">
<div class="section" id="syntaxSection">
<div class="LW_CodeSnippetContainer"><a name="CodeSpippet0"></a>
<div class="LW_CodeSnippetContainerCodeCollection">
<div class="LW_CodeSnippetToolBar">
<div class="LW_CodeSnippetToolBarText" style="valign: top;"><a s_oid="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode0');" s_oidt="0" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode0');" title="Copy to clipboard."><span size="2" color="#1364c4" style="color: #1364c4; font-size: x-small;">Copy</span></a></div>
</div>
<div class="LW_CodeSnippetContainerCode" id="CodeSnippetContainerCode0">
<div style="color: black;">
<pre>/platform:string
</pre>
</div>
</div>
</div>
</div>
</div>

<h4 class="subHeading">Parameters</h4>
<dl><dt><span class="nonLinkTerms"><span class="parameter"><em>string</em></span> </span></dt><dd>
<p>x86, Itanium, x64, or anycpu (default).</p>
</dd></dl>
<div>
<div class="LW_CollapsibleArea_TitleDiv">
<div><a href="javascript:void(0)" onclick="javascript:CA_Click('39b77bb9-c64b-4308-b600-13b5594d78b7','Expand','Collapse')" title="Collapse" class="LW_CollapsibleArea_TitleAhref" id="39b77bb9-c64b-4308-b600-13b5594d78b7"><img src="http://i.msdn.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif" class="cl_CollapsibleArea_expanding LW_CollapsibleArea_Img" /><span class="LW_CollapsibleArea_Title"><strong><span size="5" color="#3f529c" style="color: #3f529c; font-size: large;">Remarks</span></strong></span></a>
<div class="LW_CollapsibleArea_HrDiv">
<hr class="LW_CollapsibleArea_Hr" />
</div>
</div>
</div>
<div class="sectionblock" id="39b77bb9-c64b-4308-b600-13b5594d78b7_c"><a xmlns="http://www.w3.org/1999/xhtml" name="remarksToggle"></a>
<ul xmlns="http://www.w3.org/1999/xhtml">
<li>
<p>x86 compiles your assembly to be run by the 32-bit, x86-compatible common language runtime.</p>
</li>
<li>
<p>Itanium compiles your assembly to be run by the 64-bit common language runtime on a computer with an Itanium processor.</p>
</li>
<li>
<p>x64 compiles your assembly to be run by the 64-bit common language runtime on a computer that supports the AMD64 or EM64T instruction set.</p>
</li>
<li>
<p>anycpu (default) compiles your assembly to run on any platform.</p>
</li>
</ul>
<p xmlns="http://www.w3.org/1999/xhtml">On a 64-bit Windows operating system:</p>
<ul xmlns="http://www.w3.org/1999/xhtml">
<li>
<p>Assemblies compiled with <b>/platform:x86</b> will execute on the 32 bit CLR running under WOW64.</p>
</li>
<li>
<p>Executables compiled with the <b>/platform:anycpu</b> will execute on the 64 bit CLR.</p>
</li>
<li>
<p>DLLs compiled with the <b>/platform:anycpu</b> will execute on the same CLR as the process into which it is being loaded.</p>
</li>
</ul>
<p xmlns="http://www.w3.org/1999/xhtml">For more information about developing an application to run on a Windows 64-bit operating system, see <span class="linkTerms"><a href="http://msdn.microsoft.com/en-us/library/ms241064(v=vs.80).aspx"><span color="#960bb4" style="color: #960bb4;">64-bit Applications</span></a></span>.</p>
<h3 xmlns="http://www.w3.org/1999/xhtml" class="procedureSubHeading">To set this compiler option in the Visual Studio development environment</h3>
<div xmlns="http://www.w3.org/1999/xhtml" class="subSection"><ol>
<li>
<p>Open the <b>Properties</b> page for the project. For details, see <span class="linkTerms"><a href="http://msdn.microsoft.com/en-us/library/69t33bf7(v=vs.80).aspx"><span color="#1364c4" style="color: #1364c4;">How to: Set Project Properties (C#, J#)</span></a></span>.</p>
</li>
<li>
<p>Click the <b>Build</b> property page.</p>
</li>
<li>
<p>Modify the <b>Platform target</b> property.</p>
</li>
</ol></div>
<p xmlns="http://www.w3.org/1999/xhtml"><b>Note</b>&nbsp;&nbsp;&nbsp;<b>/platform</b> is not available in the development environment in Visual C# Express.</p>
<p xmlns="http://www.w3.org/1999/xhtml">For information on how to set this compiler option programmatically, see <span class="linkTerms"><a href="http://msdn.microsoft.com/en-us/library/3ks35f6y(v=vs.80).aspx"><span color="#1364c4" style="color: #1364c4;">PlatformTarget</span></a></span>.</p>
</div>
</div>
<div>
<div class="LW_CollapsibleArea_TitleDiv">
<div><a href="javascript:void(0)" onclick="javascript:CA_Click('d8e30026-4d8d-45fa-a077-636ae24ff829','Expand','Collapse')" title="Collapse" class="LW_CollapsibleArea_TitleAhref" id="d8e30026-4d8d-45fa-a077-636ae24ff829"><img src="http://i.msdn.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif" class="cl_CollapsibleArea_expanding LW_CollapsibleArea_Img" /><span class="LW_CollapsibleArea_Title"><strong><span size="5" color="#3f529c" style="color: #3f529c; font-size: large;">Example</span></strong></span></a>
<div class="LW_CollapsibleArea_HrDiv">
<hr class="LW_CollapsibleArea_Hr" />
</div>
</div>
</div>
<div class="sectionblock" id="d8e30026-4d8d-45fa-a077-636ae24ff829_c"><a xmlns="http://www.w3.org/1999/xhtml" name="codeExampleToggle"></a>
<p xmlns="http://www.w3.org/1999/xhtml">The following example shows how to use the <b>/platform</b> option to specify that the application should only be run by the 64-bit CLR on a 64-bit Windows operating system for Itanium.</p>
<div class="LW_CodeSnippetContainer"><a name="CodeSpippet1"></a>
<div class="LW_CodeSnippetContainerCodeCollection">
<div class="LW_CodeSnippetToolBar">
<div class="LW_CodeSnippetToolBarText" style="valign: top;"><a href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode1');" title="Copy to clipboard."><span size="2" color="#1364c4" style="color: #1364c4; font-size: x-small;">Copy</span></a></div>
</div>
<div class="LW_CodeSnippetContainerCode" id="CodeSnippetContainerCode1">
<div style="color: black;">
<pre>csc /platform:Itanium myItanium.cs
</pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div><img src="http://www.cnblogs.com/wd775/aggbug/1964166.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/wd775/" target="_blank">绿化树</a> 发表于 2011-02-24 21:08 <a href="http://www.cnblogs.com/wd775/archive/2011/02/24/1964166.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/wd775/archive/2011/02/24/1964166.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/wd775/archive/2011/02/24/1964166.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Visual Studio 2010 帮助查看工具</title><link>http://www.cnblogs.com/kuku/archive/2010/05/07/1729435.html</link><dc:creator>匡匡</dc:creator><author>匡匡</author><pubDate>Fri, 07 May 2010 01:55:00 GMT</pubDate><guid>http://www.cnblogs.com/kuku/archive/2010/05/07/1729435.html</guid><description><![CDATA[<p>在 Visual Studio 2010 中，变化最大，让人最不能接受的应该就是帮助功能了。
在 VS2010 中，帮助的查看方式已经变成在浏览器里查看了，受浏览器的限制，很多功能被弱化，使用起来已经不方便，而帮助又是需要经常看的。
对于这个变化，看来老外也是接受不了，开发了一些相应的工具，来加强帮助文档的查看，以下是两个个功能相对比较强大的工具：
<h4><strong>HelpViewerKeywordIndex</strong></h4>
HelpViewKeywordIndex 是一个 VS 插件，如下图：<br />
<img src="http://visualstudiogallery.msdn.microsoft.com/en-us/site/view/file/25481/0" alt="" width="500" height="400" />
<br />
使用起来效果不可以。<br />
下载地址：<a href="http://visualstudiogallery.msdn.microsoft.com/en-US/4af86641-a302-4edf-9853-007bcc670b30" target="_blank">http://visualstudiogallery.msdn.microsoft.com/en-US/4af86641-a302-4edf-9853-007bcc670b30</a>
<br />
<br />
<h4>Help Viewer Power Tool</h4>
<p>这是一个单独的应用程序，支持两种方式来查看帮助，一种也是在浏览器中查看，另一种就是单独打开一个应用程序来查看帮助，使用起来也感觉比默认的查看方式方便不少。
<a href="http://visualstudiogallery.msdn.microsoft.com/en-us/60a86afe-159b-4940-a22f-4fef055cbd63" target="_blank"><font class="Apple-style-span" color="#000000"></font></a></p><p>下载地址：http://visualstudiogallery.msdn.microsoft.com/en-us/60a86afe-159b-4940-a22f-4fef055cbd63</p>
<p>&nbsp;</p>
<p>来自：<a href="http://www.star1168.com/" target="_blank">我的博客</a>&nbsp;</p><img src="http://www.cnblogs.com/kuku/aggbug/1729435.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/kuku/" target="_blank">匡匡</a> 发表于 2010-05-07 09:55 <a href="http://www.cnblogs.com/kuku/archive/2010/05/07/1729435.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/kuku/archive/2010/05/07/1729435.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kuku/archive/2010/05/07/1729435.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>计算汽车行驶的方向</title><link>http://www.cnblogs.com/xuanfeng/archive/2010/04/22/1718074.html</link><dc:creator>xuanfeng</dc:creator><author>xuanfeng</author><pubDate>Thu, 22 Apr 2010 10:07:00 GMT</pubDate><guid>http://www.cnblogs.com/xuanfeng/archive/2010/04/22/1718074.html</guid><description><![CDATA[<p><span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman">1．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></font></span></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">场景：已知汽车行驶过程中的</span><span lang="EN-US"><font face="Times New Roman">2</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">GPS</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">坐标点</span><span lang="EN-US"><font face="Times New Roman">A</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span><span lang="EN-US"><font face="Times New Roman">n1,e1</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），</span><span lang="EN-US"><font face="Times New Roman">B(e)</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，计算它行驶的方向。</span></p>
<p>&nbsp;</p>
<p><img height="400" alt="" src="http://images.cnblogs.com/cnblogs_com/xuanfeng/busDirect.JPG" width="640" border="0" /></p>
<p>&nbsp;</p>
<p><span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">2. 分析：如上图所示，知道了两个点</span><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">A</span><span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">、</span><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">B</span><span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，可以假设一个</span><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">C</span><span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">点，让三个点构成一个直角三角形。现在可以知道，</span><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">A</span><span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，</span><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">B</span><span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，</span><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">C</span><span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">三点的</span><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">GPS</span><span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">坐标就很容易求出三个角的对边长度</span><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">a,b,c(参考<a title="计算两个GPS坐标的距离" href="http://www.cnblogs.com/xuanfeng/archive/2010/04/20/1716431.html" target="_blank">计算两个GPS坐标的距离</a>)</span><span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">。根据余弦定下</span><em><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: Arial; letter-spacing: 0.4pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">Cos</span></em><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: Arial; letter-spacing: 0.4pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">B=(a<sup>2</sup>+c<sup>2</sup>-b<sup>2</sup>)/<st1:chmetcnv w:st="on" unitname="ac" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0">2ac</st1:chmetcnv>,</span><span style="font-size: 10.5pt; color: black; font-family: 宋体; letter-spacing: 0.4pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">就可以求出</span><span lang="EN-US" style="font-size: 10.5pt; color: black; font-family: Arial; letter-spacing: 0.4pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">CosB</span><span style="font-size: 10.5pt; color: black; font-family: 宋体; letter-spacing: 0.4pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">的值。</span></p>
<p><span style="font-size: 10.5pt; color: black; font-family: 宋体; letter-spacing: 0.4pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">3.C#实现代码。</span></p>
<div class="cnblogs_code" onclick="cnblogs_code_show('beeb559e-6858-4150-8e48-5d2ea3b97e32')"><img class="code_img_closed" id="code_img_closed_beeb559e-6858-4150-8e48-5d2ea3b97e32" alt="" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" /><img class="code_img_opened" id="code_img_opened_beeb559e-6858-4150-8e48-5d2ea3b97e32" style="display: none" onclick="cnblogs_code_hide('beeb559e-6858-4150-8e48-5d2ea3b97e32',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"><span class="cnblogs_code_collapse">计算汽车行驶的方向</span> 
<div class="cnblogs_code_hide" id="cnblogs_code_open_beeb559e-6858-4150-8e48-5d2ea3b97e32">
<div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #000000">&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">计算两点GPS坐标的距离<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="n1"&gt;</span><span style="color: #008000">第一点的纬度坐标</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="e1"&gt;</span><span style="color: #008000">第一点的经度坐标</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="n2"&gt;</span><span style="color: #008000">第二点的纬度坐标</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="e2"&gt;</span><span style="color: #008000">第二点的经度坐标</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;Distance(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;n1,&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;e1,&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;n2,&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;e2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;jl_jd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">102834.74258026089786013677476285</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;jl_wd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">111712.69150641055729984301412873</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Math.Abs((e1&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;e2)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;jl_jd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Math.Abs((n1&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;n2)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;jl_wd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Math.Sqrt((a&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;b));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;已知汽车行驶的两个GPS点，求汽车行驶的方向<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="n1"&gt;</span><span style="color: #008000">第一个GPS点纬度</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="e1"&gt;</span><span style="color: #008000">第一个GPS点经度</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="n2"&gt;</span><span style="color: #008000">第二个GPS点纬度</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="e2"&gt;</span><span style="color: #008000">第二个GPS点经度</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;GetBusDirection(&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;n1,</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;e1,&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;n2,&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;e2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;e3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;n3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;e1&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0.005</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;n1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Distance(e1,&nbsp;n1,&nbsp;e3,&nbsp;n3);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Distance(e3,&nbsp;n3,&nbsp;e2,&nbsp;n2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Distance(e1,&nbsp;n1,&nbsp;e2,&nbsp;n2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;cosB&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((a&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;c)&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cosB&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(a&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;c&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;c&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;b)&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;(</span><span style="color: #800080">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;B&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Math.Acos(cosB)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">180</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;Math.PI;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(n2</span><span style="color: #000000">&lt;</span><span style="color: #000000">n1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B</span><span style="color: #000000">=</span><span style="color: #800080">180</span><span style="color: #000000">+</span><span style="color: #000000">(</span><span style="color: #800080">180</span><span style="color: #000000">-</span><span style="color: #000000">B);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;B;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div></div></div>
<p>&nbsp;</p>
<p>&nbsp;</p></span> <img src="http://www.cnblogs.com/xuanfeng/aggbug/1718074.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/xuanfeng/" target="_blank">xuanfeng</a> 发表于 2010-04-22 18:07 <a href="http://www.cnblogs.com/xuanfeng/archive/2010/04/22/1718074.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/xuanfeng/archive/2010/04/22/1718074.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xuanfeng/archive/2010/04/22/1718074.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>计算两个GPS坐标的距离</title><link>http://www.cnblogs.com/xuanfeng/archive/2010/04/20/1716431.html</link><dc:creator>xuanfeng</dc:creator><author>xuanfeng</author><pubDate>Tue, 20 Apr 2010 10:34:00 GMT</pubDate><guid>http://www.cnblogs.com/xuanfeng/archive/2010/04/20/1716431.html</guid><description><![CDATA[<p><p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial">场景：已知两个<span lang="EN-US">GPS</span>点的经纬度坐标信息。计算两点的距离。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">1．<span style="font: 7pt 'Times New Roman'"> </span></span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial">距离<span lang="EN-US">/</span>纬度关系 <span lang="EN-US"><o:p></o:p></span></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial"><span style="mso-spacerun: yes">&nbsp; </span></span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体">GPS: 22.514519,113.380301<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 12pt; font-family: 宋体"><span style="mso-spacerun: yes">&nbsp;</span><span style="mso-spacerun: yes">&nbsp;</span>GPS: 22.511962,113.380301<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 12pt; mso-char-indent-count: 1.0"><span style="font-size: 12pt; font-family: 宋体">距离<span lang="EN-US">:</span></span><span lang="EN-US"><font face="Times New Roman"> </font></span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体">284.6439379583341 <strong style="mso-bidi-font-weight: normal"><span style="mso-spacerun: yes">&nbsp;</span><o:p></o:p></strong></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 12pt; font-family: 宋体">jl_wd=284.6439379583341/(22.51451-22.511962)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 12pt; font-family: 宋体">=</span><span lang="EN-US"><font face="Times New Roman"> </font></span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体">111712.69150641055729984301412873 (</span><span style="font-size: 12pt; font-family: 宋体">米<span lang="EN-US">/</span>度<span lang="EN-US">)<o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="font-size: 12pt; font-family: 宋体; mso-bidi-font-family: 宋体"><span style="mso-list: Ignore">2．<span style="font: 7pt 'Times New Roman'"> </span></span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-size: 12pt; font-family: 宋体">距离<span lang="EN-US">/</span>经度关系<span lang="EN-US"><o:p></o:p></span></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial">GPS: 22.514866, 113.388444<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial">GPS: 22.514866, 113.379378<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 5pt; mso-char-indent-count: .5"><span style="font-size: 10pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">距离</span><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial">: 932.2997762326453 </span><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="font-size: 12pt; font-family: 宋体"><o:p></o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 5pt; mso-char-indent-count: .5"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial">jl_jd =932.2997762326453/(113.388444-113.379378)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial">=102834.74258026089786013677476285</span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体">(</span><span style="font-size: 12pt; font-family: 宋体">米<span lang="EN-US">/</span>度<span lang="EN-US">)<o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="font-size: 12pt; font-family: 宋体">3</span></strong><strong style="mso-bidi-font-weight: normal"><span style="font-size: 12pt; font-family: 宋体">．勾股定理</span></strong><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="font-size: 12pt; font-family: 宋体"><o:p>&nbsp;</o:p></span></strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 14pt; font-family: 宋体">勾股定理<span lang="EN-US">:a<sup>2</sup></span></span><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-size: 10.5pt">+b</span><sup><span lang="EN-US" style="font-size: 14pt; font-family: 宋体">2 </span></sup><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-size: 10.5pt">=c</span><sup><span lang="EN-US" style="font-size: 14pt; font-family: 宋体">2</span></sup></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><sup><span lang="EN-US" style="font-size: 14pt; font-family: 宋体"></span></sup>&nbsp;</p><sup><span lang="EN-US" style="font-size: 14pt; font-family: 宋体"></span></sup>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-size: 10.5pt"><o:p><img height="287" alt="" src="http://images.cnblogs.com/cnblogs_com/xuanfeng/ggdi.jpg" width="497" border="0" /></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-size: 10.5pt"><o:p></o:p></span>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial"><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial">看上图中已知道<span lang="EN-US">A</span>，<span lang="EN-US">B</span>的坐标后，就可以求得<span lang="EN-US">A</span>点与<span lang="EN-US">B</span>点的纬度差值的绝对值</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial"><span lang="EN-US">wd_c=|(N1,-N2)|<o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial">A</span><span style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial">点与<span lang="EN-US">B</span>点的经度差值的绝对值<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial">jd_c=|(E2-E1)|<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial">知道了经度、纬度和距离的关系，又知道了<span lang="EN-US">A</span>点与<span lang="EN-US">B</span>点的经度差和纬度差，那么就可以求出<span lang="EN-US">b</span>的长度和<span lang="EN-US">a</span>的长度<span lang="EN-US">,a</span>和<span lang="EN-US">b</span>求出来后就可以用直三角形的勾股定理求出<span lang="EN-US">c</span>边的长度也就是<span lang="EN-US">A</span>点也<span lang="EN-US">B</span>点的距离。<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial">b=wd_c*jl_wd<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial">a=jd_c*jl_jd<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial">c=</span><span style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial">&#8730;<span lang="EN-US">(a<sup>2 </sup>+b<sup>2</sup>)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial"><span lang="EN-US"></span></span>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial"><span lang="EN-US">C#实现代码:</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; color: black; font-family: 宋体; mso-bidi-font-family: Arial"><span lang="EN-US"><o:p>&nbsp;</p>
<div class="cnblogs_code" onclick="cnblogs_code_show('58f89d4e-8657-43fa-80ae-478a4acb318e')"><img class="code_img_closed" id="code_img_closed_58f89d4e-8657-43fa-80ae-478a4acb318e" alt="" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" /><img class="code_img_opened" id="code_img_opened_58f89d4e-8657-43fa-80ae-478a4acb318e" style="display: none" onclick="cnblogs_code_hide('58f89d4e-8657-43fa-80ae-478a4acb318e',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"><span class="cnblogs_code_collapse">计算两点GPS坐标距离</span> 
<div class="cnblogs_code_hide" id="cnblogs_code_open_58f89d4e-8657-43fa-80ae-478a4acb318e">
<div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">计算两点GPS坐标的距离<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="n1"&gt;</span><span style="color: #008000">第一点的纬度坐标</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="e1"&gt;</span><span style="color: #008000">第一点的经度坐标</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="n2"&gt;</span><span style="color: #008000">第二点的纬度坐标</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="e2"&gt;</span><span style="color: #008000">第二点的经度坐标</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;Distance(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;n1,&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;e1,&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;n2,&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;e2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;jl_jd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">102834.74258026089786013677476285</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;jl_wd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">111712.69150641055729984301412873</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Math.Abs((e1&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;e2)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;jl_jd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Math.Abs((n1&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;n2)&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;jl_wd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Math.Sqrt((a&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;b));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div></div></div>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"></o:p></span></span>&nbsp;</p><img src="http://www.cnblogs.com/xuanfeng/aggbug/1716431.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/xuanfeng/" target="_blank">xuanfeng</a> 发表于 2010-04-20 18:34 <a href="http://www.cnblogs.com/xuanfeng/archive/2010/04/20/1716431.html" target="_blank">原文链接</a></p><p>评论: 3　<a href="http://www.cnblogs.com/xuanfeng/archive/2010/04/20/1716431.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xuanfeng/archive/2010/04/20/1716431.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>在母版页(MasterPage)中使用 jQuery 的一个小技巧</title><link>http://www.cnblogs.com/kuku/archive/2010/04/15/1712306.html</link><dc:creator>匡匡</dc:creator><author>匡匡</author><pubDate>Thu, 15 Apr 2010 00:49:00 GMT</pubDate><guid>http://www.cnblogs.com/kuku/archive/2010/04/15/1712306.html</guid><description><![CDATA[<p><p>所以在以前在 head 区加了很多类似于</p>
<p>
</p><div class="cnblogs_code">
<div><!--<br/ />
<br/ />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />
http://www.CodeHighlighter.com/<br/ />
<br/ />
--><span style="color: #000000;">var&nbsp;btnAddID&nbsp;=&nbsp;'</span><span style="background-color: #FFFF00; color: #000000;">&lt;%</span><span style="background-color: #F5F5F5; color: #000000;">=</span><span style="background-color: #F5F5F5; color: #000000;">btnAdd.ClientID</span><span style="background-color: #FFFF00; color: #000000;">%&gt;</span><span style="color: #000000;">';&nbsp;</span></div></div>
<p>这样的代码。</p>
<p>&nbsp;</p>
<p>在熟悉使用 jQuery 后，我就想到给控件加个特别的样式，样式并不一定需要真正的存在，这样就可以通过 jQuery 的样式选择器来获取这个控件，如：</p>
<p>
</p><div class="cnblogs_code">
<div><!--<br/ />
<br/ />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />
http://www.CodeHighlighter.com/<br/ />
<br/ />
--><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">asp:Button&nbsp;</span><span style="color: #FF0000;">ID</span><span style="color: #0000FF;">="btnAdd"</span><span style="color: #FF0000;">&nbsp;runat</span><span style="color: #0000FF;">="server"</span><span style="color: #FF0000;">&nbsp;CssClass</span><span style="color: #0000FF;">="Button&nbsp;btnAdd"</span><span style="color: #FF0000;">&nbsp;Text</span><span style="color: #0000FF;">="Add"</span><span style="color: #FF0000;">&nbsp;</span><span style="color: #0000FF;">/&gt;</span></div></div>
<p>下面使用 jQuery 来获取这个控件</p>
<p>
</p><div class="cnblogs_code">
<div><!--<br/ />
<br/ />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />
http://www.CodeHighlighter.com/<br/ />
<br/ />
--><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Javascript</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">$(</span><span style="color: #000000;">'</span><span style="color: #000000;">.btnAdd</span><span style="color: #000000;">'</span><span style="color: #000000;">).click(....);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;使用&nbsp;.btnAdd&nbsp;来获取&nbsp;btnAdd&nbsp;控件</span></div>
</div>
<p><br /></p>
<p>上面的代码是给 btnAdd 加了一个 'btnAdd' 的样式，这个样式并不存在，但这不影响 btnAdd 控件的显示。</p>
<p>&nbsp;</p>
<p>希望这个小技巧对你有用！</p>
<p><br />
</p>
<div style="text-align: center"><embed height="60" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="658" src="http://a.alimama.cn/widget/yr1/yr1fixed_658_60.swf" allowscriptaccess="sameDomain" bgcolor="#ffffff" wmode="transparent" quality="high" flashvars="catid=&amp;count=20&amp;sz=16&amp;type=2&amp;i=mm_15825859_0_0"> </div>
<p>文章出处：<a href="http://www.star1168.com/blog" target="_blank">我的网站</a></p><img src="http://www.cnblogs.com/kuku/aggbug/1712306.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/kuku/" target="_blank">匡匡</a> 发表于 2010-04-15 08:49 <a href="http://www.cnblogs.com/kuku/archive/2010/04/15/1712306.html" target="_blank">原文链接</a></p><p>评论: 12　<a href="http://www.cnblogs.com/kuku/archive/2010/04/15/1712306.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kuku/archive/2010/04/15/1712306.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Visual Studio 2010 (VS2010) 在工具箱中查询控件</title><link>http://www.cnblogs.com/kuku/archive/2010/04/14/1712245.html</link><dc:creator>匡匡</dc:creator><author>匡匡</author><pubDate>Wed, 14 Apr 2010 15:22:00 GMT</pubDate><guid>http://www.cnblogs.com/kuku/archive/2010/04/14/1712245.html</guid><description><![CDATA[<p><span class="Apple-style-span" style="font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; line-height: normal; font-size: 13px; color: #4e4e4e; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; line-height: 19px; ">现在不管是 WEBFORM 还是 WINFORM 中，.Net Framework 都自带了了很多控件，再加上使用一些第三方的控件库，工具箱里的控件和组件是越来越多了，有时候要使用一个控件的时候，在工具箱中一个一个找，有时候眼花了，一下子还找不到。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; line-height: 19px; ">在 VS2010 中可以在工具箱中查义控件或组件了，在工具箱挪用焦点的情况下，按控件的开始的字符，就可以定位到相应的控件，如快速按输入 &#8216;te&#8217; 两个字符，集点都定位到 TextBox 控件，如下图：</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; line-height: 19px; "><a href="http://www.star1168.com/blog/wp-content/uploads/2010/04/toolbox_search.png" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; color: #0071bb; outline-style: none; outline-width: initial; outline-color: initial; " target="_blank"><img class="alignnone size-full wp-image-48" title="toolbox_search" src="http://www.star1168.com/blog/wp-content/uploads/2010/04/toolbox_search.png" alt="" width="187" height="220" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /></a></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; line-height: 19px; ">希望这个功能对你有用！</p>
</span>
<br /><br />
<div style="text-align: center"><embed height="60" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="658" src="http://a.alimama.cn/widget/yr1/yr1fixed_658_60.swf" allowscriptaccess="sameDomain" bgcolor="#ffffff" wmode="transparent" quality="high" flashvars="catid=&amp;count=20&amp;sz=16&amp;type=2&amp;i=mm_15825859_0_0"> </div>
<p>文章出处：<a href="http://www.star1168.com/blog" target="_blank">我的网站</a></p><img src="http://www.cnblogs.com/kuku/aggbug/1712245.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/kuku/" target="_blank">匡匡</a> 发表于 2010-04-14 23:22 <a href="http://www.cnblogs.com/kuku/archive/2010/04/14/1712245.html" target="_blank">原文链接</a></p><p>评论: 9　<a href="http://www.cnblogs.com/kuku/archive/2010/04/14/1712245.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kuku/archive/2010/04/14/1712245.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Visual Studio 2010 (vs2010) 全屏功能的改进</title><link>http://www.cnblogs.com/kuku/archive/2010/04/14/1711996.html</link><dc:creator>匡匡</dc:creator><author>匡匡</author><pubDate>Wed, 14 Apr 2010 09:15:00 GMT</pubDate><guid>http://www.cnblogs.com/kuku/archive/2010/04/14/1711996.html</guid><description><![CDATA[<p><p>在 Visual Studio 的每一个版本里都有一个全屏显示的功能（视图菜单里的&#8220;全屏显示&#8221;），但在 VS2010 之前的版本里，如果使用&#8220;全屏显示&#8221;，全屏后 VS 窗口占据整个屏幕，把 Windows 的任务栏也给覆盖掉了，这样要切换到其他窗口很不方便，所以这个功能在我眼中基本变成了鸡肋，因为我只是想要把代码编辑器最大化，把其他的工具栏和其他做停靠窗口都隐藏掉，不需要隐藏 Windows 的任务栏，这样可以方便的切换到其他的窗口，就像在 Eclipse 里的功能一样。</p>
<p>&nbsp;</p>
<p>在 VS2010 里，这个功能终于得到了改进，现在使用&#8220;全屏显示&#8221;，最大化了编辑器，最重要的是 Windows 的任务栏没有覆盖，这样切换到其他窗口的时候就很方便了。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="text-align: center"><embed height="60" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="658" src="http://a.alimama.cn/widget/yr1/yr1fixed_658_60.swf" allowscriptaccess="sameDomain" bgcolor="#ffffff" wmode="transparent" quality="high" flashvars="catid=&amp;count=20&amp;sz=16&amp;type=2&amp;i=mm_15825859_0_0"> </div>
<p>文章出处：<a href="http://www.star1168.com/blog" target="_blank">我的网站</a></p><img src="http://www.cnblogs.com/kuku/aggbug/1711996.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/kuku/" target="_blank">匡匡</a> 发表于 2010-04-14 17:15 <a href="http://www.cnblogs.com/kuku/archive/2010/04/14/1711996.html" target="_blank">原文链接</a></p><p>评论: 4　<a href="http://www.cnblogs.com/kuku/archive/2010/04/14/1711996.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kuku/archive/2010/04/14/1711996.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>C#串口读取GPS接收仪器的数据</title><link>http://www.cnblogs.com/xuanfeng/archive/2010/04/12/1710303.html</link><dc:creator>xuanfeng</dc:creator><author>xuanfeng</author><pubDate>Mon, 12 Apr 2010 07:57:00 GMT</pubDate><guid>http://www.cnblogs.com/xuanfeng/archive/2010/04/12/1710303.html</guid><description><![CDATA[<p><p>1.场景:电脑通过蓝牙连接上Progin SBT-268 GPS接收仪器，客户端程序能够读取到仪器接收到的信息。</p>
<p>2.实现功能：程序能连接到相应端品，并把接收到的信息，按一条一条完整的信息显示出来(每条信息以LR结尾)</p>
<p>3.效果图:</p>
<p><img height="306" alt="" src="http://images.cnblogs.com/cnblogs_com/xuanfeng/GPSRead.jpg" width="593" border="0" /></p>
<p>4.接收到GPS信息格式说明：<a id="homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" href="http://www.cnblogs.com/xuanfeng/archive/2010/04/12/1710291.html" target="_blank"><font color="#223355">篮牙接收GPS数据格式说明</font></a></p>
<p>5.源码下载:<a title="下载" href="http://files.cnblogs.com/xuanfeng/GPSRead.rar" target="_blank">下载</a></p>
<p>6.The End.</p>
<p>&nbsp;</p>  <img src="http://www.cnblogs.com/xuanfeng/aggbug/1710303.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/xuanfeng/" target="_blank">xuanfeng</a> 发表于 2010-04-12 15:57 <a href="http://www.cnblogs.com/xuanfeng/archive/2010/04/12/1710303.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/xuanfeng/archive/2010/04/12/1710303.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xuanfeng/archive/2010/04/12/1710303.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>C# Win32API</title><link>http://www.cnblogs.com/linsongbin/archive/2010/03/27/1698364.html</link><dc:creator>o﹎Lin゛</dc:creator><author>o﹎Lin゛</author><pubDate>Sat, 27 Mar 2010 07:19:00 GMT</pubDate><guid>http://www.cnblogs.com/linsongbin/archive/2010/03/27/1698364.html</guid><description><![CDATA[<p><p>[assembly: AssemblyVersion("1.0.0.3")]</p>
<div class="cnblogs_code" onclick="cnblogs_code_show('ce8bc048-4cd7-4827-b47f-f9f56b417d95')"><img id="code_img_closed_ce8bc048-4cd7-4827-b47f-f9f56b417d95" class="code_img_closed" alt="" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" /><img style="display: none" id="code_img_opened_ce8bc048-4cd7-4827-b47f-f9f56b417d95" class="code_img_opened" onclick="cnblogs_code_hide('ce8bc048-4cd7-4827-b47f-f9f56b417d95',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"><span class="cnblogs_code_collapse">代码</span> 
<div id="cnblogs_code_open_ce8bc048-4cd7-4827-b47f-f9f56b417d95" class="cnblogs_code_hide">
<div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Win32API<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#region</span><span style="color: #000000">&nbsp;====&nbsp;Kernel32.dll&nbsp;====</span><span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;取得当前线程ID<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">kernel32.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CharSet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;GetCurrentThreadId();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">kernel32.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CharSet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;IntPtr&nbsp;CreateFile(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;lpFileName,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileAccess&nbsp;dwDesiredAccess,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileShare&nbsp;dwShareMode,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;lpSecurityAttributes,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileMode&nbsp;dwCreationDisposition,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;dwFlagsAndAttributes,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntPtr&nbsp;hTemplateFile);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;打开进程<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="dwDesiredAccess"&gt;</span><span style="color: #008000">想得到的访问权限</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="bInheritHandle"&gt;</span><span style="color: #008000">指定返回的句柄是否可以被继承</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="dwProcessId"&gt;</span><span style="color: #008000">指定要打开的进程的ID</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">kernel32.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CharSet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;IntPtr&nbsp;OpenProcess(DesiredAccess&nbsp;dwDesiredAccess,&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;bInheritHandle,&nbsp;</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;dwProcessId);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;结束其它进程<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="hProcess"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="uExitCode"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">kernel32.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CharSet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;TerminateProcess(IntPtr&nbsp;hProcess,&nbsp;</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;uExitCode);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="hProcess"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="lpBaseAddress"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="lpBuffer"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="nSize"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="lpNumberOfBytesRead"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">kernel32.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CharSet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;ReadProcessMemory(IntPtr&nbsp;hProcess,&nbsp;IntPtr&nbsp;lpBaseAddress,&nbsp;IntPtr&nbsp;lpBuffer,&nbsp;</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;nSize,&nbsp;</span><span style="color: #0000ff">out</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;lpNumberOfBytesRead);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="dwFlags"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="th32ProcessID"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">kernel32.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CharSet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;IntPtr&nbsp;CreateToolhelp32Snapshot(</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;dwFlags,&nbsp;</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;th32ProcessID);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">[DllImport("kernel32.dll",&nbsp;CharSet&nbsp;=&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;=&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">public&nbsp;static&nbsp;extern&nbsp;bool&nbsp;Process32First(IntPtr&nbsp;hSnapshot,&nbsp;LPPROCESSENTRY32W&nbsp;lppe);</span><span style="color: #008000"><br /></span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#endregion</span><span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#region</span><span style="color: #000000">&nbsp;====&nbsp;User32.dll&nbsp;====</span><span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;继续下一个钩子<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="hhk"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="nCode"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="wParam"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="lParam"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">user32.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CharSet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;CallNextHookEx(IntPtr&nbsp;hhk,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;nCode,&nbsp;IntPtr&nbsp;wParam,&nbsp;IntPtr&nbsp;lParam);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;获得一个顶层窗口的句柄，该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="lpClassName"&gt;</span><span style="color: #008000">指向一个指定了类名的空结束字符串，或一个标识类名字符串的成员的指针。如果该参数为一个成员，则它必须为前次调用theGlobafAddAtom函数产生的全局成员。该成员为16位，必须位于IpClassName的低&nbsp;16位，高位必须为&nbsp;0。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="lpWindowName"&gt;</span><span style="color: #008000">指向一个指定了窗口名（窗口标题）的空结束字符串。如果该参数为空，则为所有窗口全匹配。</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;</span><span style="color: #008000">如果函数成功，返回值为具有指定类名和窗口名的窗口句柄；如果函数失败，返回值为NULL</span><span style="color: #808080">&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">user32.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CharSet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;IntPtr&nbsp;FindWindow(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;lpClassName,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;lpWindowName);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;检取表示键名的字符串<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="lParam"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="lpBuffer"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="nSize"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">user32.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CharSet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;GetKeyNameText(IntPtr&nbsp;lParam,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;lpBuffer,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;nSize);&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="hWnd"&gt;</span><span style="color: #008000">收消息的窗口的句柄</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="Msg"&gt;</span><span style="color: #008000">指定被发送的消息</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="wParam"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="lParam"&gt;&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">user32.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CharSet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;SendMessage(IntPtr&nbsp;hWnd,&nbsp;</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;Msg,&nbsp;IntPtr&nbsp;wParam,&nbsp;IntPtr&nbsp;lParam);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;改变一个子窗口，弹出式窗口式顶层窗口的尺寸，位置和Z序。子窗口，弹出式窗口，及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高，并且被设置为Z序的第一个窗口。<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="hWnd"&gt;</span><span style="color: #008000">窗口句柄</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="hWndInsertAfter"&gt;</span><span style="color: #008000">在z序中的位于被置位的窗口前的窗口句柄</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="X"&gt;</span><span style="color: #008000">以客户坐标指定窗口新位置的左边界</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="Y"&gt;</span><span style="color: #008000">以客户坐标指定窗口新位置的顶边界</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="cx"&gt;</span><span style="color: #008000">以像素指定窗口的新的宽度</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="cy"&gt;</span><span style="color: #008000">以像素指定窗口的新的高度</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="uFlags"&gt;</span><span style="color: #008000">窗口尺寸和定位的标志</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">user32.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CharSet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;SetWindowPos(IntPtr&nbsp;hWnd,&nbsp;IntPtr&nbsp;hWndInsertAfter,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;x,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;y,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cx,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cy,&nbsp;SWP_Flags&nbsp;uFlags);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;安装钩子<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="idHook"&gt;</span><span style="color: #008000">钩子类型</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="lpfn"&gt;</span><span style="color: #008000">钩子函数的地址</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="hMod"&gt;</span><span style="color: #008000">钩子函数所在DLL的实例名柄.&nbsp;如果一个局部的钩子,&nbsp;该参数的值为&nbsp;NULL</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="dwThreadId"&gt;</span><span style="color: #008000">要安装钩子的线程,&nbsp;0&nbsp;为全局钩子</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;</span><span style="color: #008000">钩子句柄</span><span style="color: #808080">&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">user32.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CharSet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;IntPtr&nbsp;SetWindowsHookEx(WH_Codes&nbsp;idHook,&nbsp;HookProc&nbsp;lpfn,&nbsp;IntPtr&nbsp;hMod,&nbsp;</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;dwThreadId);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;卸载钩子<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;param&nbsp;name="hhk"&gt;</span><span style="color: #008000">要卸载的钩子的句柄</span><span style="color: #808080">&lt;/param&gt;</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">user32.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;CharSet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CharSet.Auto,&nbsp;CallingConvention&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CallingConvention.StdCall)]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;UnhookWindowsHookEx(IntPtr&nbsp;hhk);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#endregion</span><span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#region</span><span style="color: #000000">&nbsp;====&nbsp;文件系统&nbsp;====</span><span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#region</span><span style="color: #000000">&nbsp;====&nbsp;磁盘和驱动器管理类&nbsp;API&nbsp;===</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#endregion</span><span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#endregion</span><span style="color: #000000"><br />}</span></div></div></div>
<p>&nbsp;</p>
<p>&nbsp;</p><img src="http://www.cnblogs.com/linsongbin/aggbug/1698364.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/linsongbin/" target="_blank">o﹎Lin゛</a> 发表于 2010-03-27 15:19 <a href="http://www.cnblogs.com/linsongbin/archive/2010/03/27/1698364.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/linsongbin/archive/2010/03/27/1698364.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/linsongbin/archive/2010/03/27/1698364.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>在 .NET 中，后++ 运算符产生的一个小问题</title><link>http://www.cnblogs.com/kuku/archive/2010/03/25/1695420.html</link><dc:creator>匡匡</dc:creator><author>匡匡</author><pubDate>Thu, 25 Mar 2010 08:41:00 GMT</pubDate><guid>http://www.cnblogs.com/kuku/archive/2010/03/25/1695420.html</guid><description><![CDATA[<p><p>今天在编写一个功能，要求很简单，代码也很简单，但最终在界面上的结果对不正确，不过还好代码简单，一个就知道是哪里出了问题，大概代码是这样子的：</p>
<p>&nbsp;</p>
<p>&nbsp;<span style="font-family: 'Courier New'; font-size: 13px" class="Apple-style-span"><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;</span></span></p>
<div class="cnblogs_code">
<div><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(i</span><span style="color: #000000">++</span><span style="color: #000000">).ToString();<br />Console.WriteLine(a);</span></div></div>
<p>&nbsp;</p>
<p>我想应该 a 会等于 1 的，因为加了括号，结果是等于 0，&nbsp;<img alt="" src="http://www.cnblogs.com/Emoticons/msn/cry_smile.gif" />看来基本功还是没有打扎实啊。&nbsp;</p>
<p>&nbsp;</p>
<div style="text-align: center"><embed height="60" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="658" src="http://a.alimama.cn/widget/yr1/yr1fixed_658_60.swf" allowscriptaccess="sameDomain" bgcolor="#ffffff" wmode="transparent" quality="high" flashvars="catid=&amp;count=20&amp;sz=16&amp;type=2&amp;i=mm_15825859_0_0"> </div>
<p>文章出处：<a href="http://www.star1168.com/blog" target="_blank">我的网站</a></p><img src="http://www.cnblogs.com/kuku/aggbug/1695420.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/kuku/" target="_blank">匡匡</a> 发表于 2010-03-25 16:41 <a href="http://www.cnblogs.com/kuku/archive/2010/03/25/1695420.html" target="_blank">原文链接</a></p><p>评论: 1　<a href="http://www.cnblogs.com/kuku/archive/2010/03/25/1695420.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kuku/archive/2010/03/25/1695420.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>在 Visual Studio 2008 中去掉某些文件的只读属性</title><link>http://www.cnblogs.com/kuku/archive/2010/03/25/1695275.html</link><dc:creator>匡匡</dc:creator><author>匡匡</author><pubDate>Thu, 25 Mar 2010 06:24:00 GMT</pubDate><guid>http://www.cnblogs.com/kuku/archive/2010/03/25/1695275.html</guid><description><![CDATA[<p><p>在 Visual Studio 2008 中，使用 VSS 作为源码管理器，把文件签入后，文件会自动变为只读状态。在公司习惯是在某个开发人员的机器上获取最新的代码后编译，编译完之后服务器上再从 VSS 源码库里获取最新的程序供测试人员测试，在这种情况下，我们把项目生成的一个 DLL 也加会加入到 VSS 源码管理中去，所以在每次需要把项目更新到服务器上的时候，都会先把项目生成的 DLL文件签出来，编译完后再签入进去，签进去之后 DLL 文件就能变成只读的了，这个时候如果再在 VS2008 中编译项目，VS2008将会出现<span style="color: red"><strong>无法将文件&#8220;obj\Debug\xx.dll&#8221;复制到&#8220;bin\xx.dll&#8221;。对路径&#8220;bin\xx.dll&#8221;的访问被拒绝.</strong></span>的错误，所以每次都得手工去掉这个 DLL 文件的只读属性。感觉很麻烦。</p>
<p>&nbsp;</p>
<p>后来找到了一种方法，就是在项目生成之前运行一个命令，自动去掉这个 DLL 的只读属性，这样在编译的时候就不会出错了，具体设置是打开项目属性 ，然后打开&#8220;生成事件&#8221;活页，在&#8220;预生成事件命令行&#8221;下面的框里写入<span style="color: red">&#8220;attrib $(TargetPath) -R&#8221; </span>就可以了，这样在每次编译的时候，都会先运行这个命令去掉项目生成的 DLL 文件的只读属性。</p>
<div><br /></div>
<p>&nbsp;</p>
<div style="text-align: center"><embed height="60" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="658" src="http://a.alimama.cn/widget/yr1/yr1fixed_658_60.swf" allowscriptaccess="sameDomain" bgcolor="#ffffff" wmode="transparent" quality="high" flashvars="catid=&amp;count=20&amp;sz=16&amp;type=2&amp;i=mm_15825859_0_0"> </div>
<p>文章出处：<a href="http://www.star1168.com/blog" target="_blank">我的网站</a></p><img src="http://www.cnblogs.com/kuku/aggbug/1695275.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/kuku/" target="_blank">匡匡</a> 发表于 2010-03-25 14:24 <a href="http://www.cnblogs.com/kuku/archive/2010/03/25/1695275.html" target="_blank">原文链接</a></p><p>评论: 8　<a href="http://www.cnblogs.com/kuku/archive/2010/03/25/1695275.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kuku/archive/2010/03/25/1695275.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>parentElement 和 offsetParent 之间的区别</title><link>http://www.cnblogs.com/kuku/archive/2010/03/23/1692749.html</link><dc:creator>匡匡</dc:creator><author>匡匡</author><pubDate>Tue, 23 Mar 2010 09:03:00 GMT</pubDate><guid>http://www.cnblogs.com/kuku/archive/2010/03/23/1692749.html</guid><description><![CDATA[<p><p>首先是 parentElement 属性，这个属性好理解，就是在 DOM 层次结构定义的上下级关系，如果元素A包含元素B，那么元素B就可以通过 parentElement 属性来获取元素A。</p>
<p>这里主要说的是 offsetParent 属性，这个属性在 MSDN 的文档中也没有解释清楚，这就让人更难理解这个属性。 这几天在网上找了些资料看看，再加上自己的一些测试，对此属性有了那么一点的了解，在这里总结一下。</p>
<p>&nbsp;</p>
<p>要明白 offsetParent 属性，要先明白&#8220;已定位元素&#8221; 这个名字，所谓&#8220;已定位元素&#8221;就是指给元素设置了 position 属性的样式，并且 position 样式属性的值等于 absolute、relative、fixed 之一的元素。</p>
<p>&nbsp;</p>
<p>在使用 offsetParent 属性获取父级对象时有以下两种情况：</p>
<p><span style="white-space: pre" class="Apple-tab-span"></span>1、元素本身已经定位</p>
<p><span style="white-space: pre" class="Apple-tab-span"></span>如果元素本身已经定位，那么 offsetParent 属性返回此元素已定位父级元素，如没有已定位的父级元素，则返回 BODY 对象，例如：</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div><!--<br/ />
<br/ />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />
http://www.CodeHighlighter.com/<br/ />
<br/ />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="obj1"</span><span style="color: #ff0000">&nbsp;style</span><span style="color: #0000ff">="position:absolute"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="pObj1"</span><span style="color: #ff0000">&nbsp;style</span><span style="color: #0000ff">="position:absolute"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="obj2"</span><span style="color: #ff0000">&nbsp;style</span><span style="color: #0000ff">="position:absolute"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span></div></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;<span style="white-space: pre" class="Apple-tab-span"> </span>obj1.offsetParent 返回 BODY 对象</p>
<p><span style="white-space: pre" class="Apple-tab-span"></span>obj2.offsetParent 返回 pObj1 对象&nbsp;</p>
<p>&nbsp;</p>
<p><span style="white-space: pre" class="Apple-tab-span"></span>2、元素没有定位</p>
<p><span style="white-space: pre" class="Apple-tab-span"></span>如果元素没有定位，&nbsp;offsetParent 不但会找已经定位的父级元素而且还会查找类型为 TD 和 TABLE 的父级元素，只要找到这三种父级元素的其中任何一种元素将返回此元素，否则返回 BODY 对象，例如：</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<div><!--<br/ />
<br/ />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />
http://www.CodeHighlighter.com/<br/ />
<br/ />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">table&nbsp;</span><span style="color: #ff0000">width</span><span style="color: #0000ff">="500"</span><span style="color: #ff0000">&nbsp;border</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td id="td1"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="pObj1"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="obj1"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="pObj2" style="position:relative"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="obj2"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">table</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span></div></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="white-space: pre" class="Apple-tab-span"></span>obj1.offsetParent 返回 td1 对象</p>
<p><span style="white-space: pre" class="Apple-tab-span"></span>obj2.offsetParent 返回 pObj2 对象</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>在 DOM 元素的属性里，还有 parentNode 这个属性，其实这个属性跟 parentElement 属性是一个意思，parentElement 属性是 IE 特有的，W3C 标准是使用 parentNode 属性，还有 children 和 childNodes, children 是 IE 特有的， childNodes 被其他浏览支持。</p>
<p>&nbsp;</p>
<div style="text-align: center"><embed height="60" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="658" src="http://a.alimama.cn/widget/yr1/yr1fixed_658_60.swf" allowscriptaccess="sameDomain" bgcolor="#ffffff" wmode="transparent" quality="high" flashvars="catid=&amp;count=20&amp;sz=16&amp;type=2&amp;i=mm_15825859_0_0"> </div>
<p>文章出处：<a href="http://www.star1168.com/blog" target="_blank">我的网站</a></p><img src="http://www.cnblogs.com/kuku/aggbug/1692749.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/kuku/" target="_blank">匡匡</a> 发表于 2010-03-23 17:03 <a href="http://www.cnblogs.com/kuku/archive/2010/03/23/1692749.html" target="_blank">原文链接</a></p><p>评论: 1　<a href="http://www.cnblogs.com/kuku/archive/2010/03/23/1692749.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kuku/archive/2010/03/23/1692749.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>一道面试题，看这段代码最后抛出什么异常</title><link>http://www.cnblogs.com/kuku/archive/2010/03/22/1691516.html</link><dc:creator>匡匡</dc:creator><author>匡匡</author><pubDate>Mon, 22 Mar 2010 05:01:00 GMT</pubDate><guid>http://www.cnblogs.com/kuku/archive/2010/03/22/1691516.html</guid><description><![CDATA[<p><p>今天看到一个朋友在网上考试系统中做了一首是，题是这样子的：</p>
<p>&nbsp;</p>
<p>有以下一段代码：</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><pre><div><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> Method() {<br />
</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
{<br />
</span><span style="color: #008000">//</span><span style="color: #008000"> 操作 IO</span><span style="color: #008000"><br />
</span><span style="color: #000000">        </span><span style="color: #0000ff">return</span><span style="color: #000000"> ;<br />
}<br />
</span><span style="color: #0000ff">catch</span><span style="color: #000000"> (IOException e)<br />
{<br />
</span><span style="color: #008000">//</span><span style="color: #008000"> 相关处理</span><span style="color: #008000"><br />
</span><span style="color: #000000">        </span><span style="color: #0000ff">throw</span><span style="color: #000000">;<br />
}<br />
</span><span style="color: #0000ff">finally</span><span style="color: #000000"> {<br />
</span><span style="color: #0000ff">throw</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ApplicationException();<br />
}<br />
}</span></div>
</pre></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div>请问这段代码，如果在&#8220;操作 IO&#8221;的地方出现 IO 异常，这段代码最后会抛着哪个异常。</div>
<div>大家觉得呢？</div>
<p>&nbsp;</p>
<div style="text-align: center"><embed height="60" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="658" src="http://a.alimama.cn/widget/yr1/yr1fixed_658_60.swf" allowscriptaccess="sameDomain" bgcolor="#ffffff" wmode="transparent" quality="high" flashvars="catid=&amp;count=20&amp;sz=16&amp;type=2&amp;i=mm_15825859_0_0"> </div>
<p>文章出处：<a href="http://www.star1168.com/blog" target="_blank">我的网站</a></p><img src="http://www.cnblogs.com/kuku/aggbug/1691516.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/kuku/" target="_blank">匡匡</a> 发表于 2010-03-22 13:01 <a href="http://www.cnblogs.com/kuku/archive/2010/03/22/1691516.html" target="_blank">原文链接</a></p><p>评论: 2　<a href="http://www.cnblogs.com/kuku/archive/2010/03/22/1691516.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kuku/archive/2010/03/22/1691516.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>使用 B、KB、MB、GB 等常规格式显示文件大小</title><link>http://www.cnblogs.com/kuku/archive/2010/03/21/1691007.html</link><dc:creator>匡匡</dc:creator><author>匡匡</author><pubDate>Sun, 21 Mar 2010 07:53:00 GMT</pubDate><guid>http://www.cnblogs.com/kuku/archive/2010/03/21/1691007.html</guid><description><![CDATA[<p><p>使用常规格式显示文件大小的意思是如一个文件的大小有3个G，那么在显示的时候就用 GB 作为单位来显示，如果只有几百兆，那就用 MB 作为单位来显示文件的大小等。</p>
<p>&nbsp;</p>
<p>以前在使用引功能的时候，都是使用 if 语句来检查文件的大小，以选择相应的单位。</p>
<p>昨天发现一个新方式来处理这种需要，感觉相当的方便，以下是代码：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><pre><div><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">string</span><span style="color: #000000">[] units </span><span style="color: #000000">=</span><span style="color: #000000"> { </span><span style="color: #800000">"</span><span style="color: #800000">B</span><span style="color: #800000">"</span><span style="color: #000000">, </span><span style="color: #800000">"</span><span style="color: #800000">KB</span><span style="color: #800000">"</span><span style="color: #000000">, </span><span style="color: #800000">"</span><span style="color: #800000">MB</span><span style="color: #800000">"</span><span style="color: #000000">, </span><span style="color: #800000">"</span><span style="color: #800000">GB</span><span style="color: #800000">"</span><span style="color: #000000">, </span><span style="color: #800000">"</span><span style="color: #800000">TB</span><span style="color: #800000">"</span><span style="color: #000000">, </span><span style="color: #800000">"</span><span style="color: #800000">EB</span><span style="color: #800000">"</span><span style="color: #000000">, </span><span style="color: #800000">"</span><span style="color: #800000">ZB</span><span style="color: #800000">"</span><span style="color: #000000">, </span><span style="color: #800000">"</span><span style="color: #800000">YB</span><span style="color: #800000">"</span><span style="color: #000000">};<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">string</span><span style="color: #000000"> FormatBytes(</span><span style="color: #0000ff">long</span><span style="color: #000000"> bytes)<br />
{<br />
</span><span style="color: #0000ff">double</span><span style="color: #000000"> db </span><span style="color: #000000">=</span><span style="color: #000000"> bytes;<br />
</span><span style="color: #0000ff">int</span><span style="color: #000000"> level </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #800080">0</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">while</span><span style="color: #000000"> (db </span><span style="color: #000000">&gt;</span><span style="color: #000000"> </span><span style="color: #800080">1024</span><span style="color: #000000">)<br />
{<br />
db </span><span style="color: #000000">/=</span><span style="color: #000000"> </span><span style="color: #800080">1024</span><span style="color: #000000">;<br />
level</span><span style="color: #000000">++</span><span style="color: #000000">;<br />
}<br />
<br />
</span><span style="color: #0000ff">return</span><span style="color: #000000"> db.ToString(</span><span style="color: #800000">"</span><span style="color: #800000">.##</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #000000">+</span><span style="color: #000000"> units[level];<br />
}</span></div>
</pre></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="text-align: center"><embed height="60" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="658" src="http://a.alimama.cn/widget/yr1/yr1fixed_658_60.swf" allowscriptaccess="sameDomain" bgcolor="#ffffff" wmode="transparent" quality="high" flashvars="catid=&amp;count=20&amp;sz=16&amp;type=2&amp;i=mm_15825859_0_0"> </div>
<p>文章出处：<a href="http://www.star1168.com/blog" target="_blank">我的网站</a></p><img src="http://www.cnblogs.com/kuku/aggbug/1691007.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/kuku/" target="_blank">匡匡</a> 发表于 2010-03-21 15:53 <a href="http://www.cnblogs.com/kuku/archive/2010/03/21/1691007.html" target="_blank">原文链接</a></p><p>评论: 2　<a href="http://www.cnblogs.com/kuku/archive/2010/03/21/1691007.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kuku/archive/2010/03/21/1691007.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明</title><link>http://www.cnblogs.com/kuku/archive/2010/03/20/1690543.html</link><dc:creator>匡匡</dc:creator><author>匡匡</author><pubDate>Sat, 20 Mar 2010 09:17:00 GMT</pubDate><guid>http://www.cnblogs.com/kuku/archive/2010/03/20/1690543.html</guid><description><![CDATA[<p><p>修改的 lightbox 版本是 2.04 版。</p>
<p>&nbsp;</p>
<p>下面是使用我们在使用 lightbox 来显示图片时的基本设置：</p>
<p>&lt;a href="image-url" rel="lightbox" title="image-remark"&gt;</p>
<p>　　content</p>
<p>&lt;/a&gt;</p>
<p>主要是给连接加了一个 rel="lightbox" 属性</p>
<p>以上面的试设置好连接时， 当点击此连接，lightbox 将会显示连接上的图片，并使用连接的 title 属性作为图片的说明，如果要为图片添加详细的图片说明，并为图片的说明设置一些格式，如字体的大小、颜色等，那么使用 title 这个属性来设置这些说明信息是没办法实现的。</p>
<p>由于客户一定要此功能，所以只好去查看 lightbox 的源代码，检查是否可以对其进行改造，以满足这个需要，幸运的是 lightbox 主要的代码量不是很大，而且可以对其进行一个小小的修改，就可以满足这个需要，主要是对 prototype.js 这个JS 框架不太熟悉。</p>
<p>以下是修改的过程 ：</p>
<p>打开 lightbox.js 文件，原 218 行的代码为：</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><pre><div><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">this</span><span style="color: #000000">.imageArray.push([imageLink.href, imageLink.title]);</span></div>
</pre></div>
<p>&nbsp;</p>
<p>可以看到这里是直接读取连接对象的 title 属性，所以我们只需要把 imageLink.title 改一下就可以了：</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><pre><div><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">this</span><span style="color: #000000">.imageArray.push([imageLink.href, document.getElementById(imageLink.contentId).innerHTML]);</span></div>
</pre></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>把 imageLink.title 改成了 document.getElementById(imageLink.contentId).innerHTML 了;</p>
<p>从这一句可以看出来，我们需要为连接对象设置一个 contentId 属性，这个属性的值是某个 DOM 元素的 ID 号，图片的说明就是此元素的内容了。</p>
<p>修改完之后就可以在 HTML 这样设置图片说明了：</p>
<p>&lt;a href="image-url" rel="lightbox" contentId="imgDesc" title="image"&gt;</p>
<p>　　&lt;div id="imgDesc" style="display:none"&gt;description&lt;/div&gt;</p>
<p>　　content</p>
<p>&lt;/a&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="text-align: center"><embed height="60" type="application/x-shockwave-flash" align="center" pluginspage="http://www.macromedia.com/go/getflashplayer" width="658" src="http://a.alimama.cn/widget/yr1/yr1fixed_658_60.swf" allowscriptaccess="sameDomain" bgcolor="#ffffff" wmode="transparent" quality="high" flashvars="catid=&amp;count=20&amp;sz=16&amp;type=2&amp;i=mm_15825859_0_0"> </div>
<p>文章出处：<a href="http://www.star1168.com/blog" target="_blank">我的网站</a></p><img src="http://www.cnblogs.com/kuku/aggbug/1690543.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/kuku/" target="_blank">匡匡</a> 发表于 2010-03-20 17:17 <a href="http://www.cnblogs.com/kuku/archive/2010/03/20/1690543.html" target="_blank">原文链接</a></p><p>评论: 1　<a href="http://www.cnblogs.com/kuku/archive/2010/03/20/1690543.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/kuku/archive/2010/03/20/1690543.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>堆和栈的区别</title><link>http://www.cnblogs.com/wd775/archive/2010/03/11/1683578.html</link><dc:creator>绿化树</dc:creator><author>绿化树</author><pubDate>Thu, 11 Mar 2010 08:22:00 GMT</pubDate><guid>http://www.cnblogs.com/wd775/archive/2010/03/11/1683578.html</guid><description><![CDATA[<p><p>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 预备知识&mdash;程序的内存分配<br />一个由c/C++编译的程序占用的内存分为以下几个部分</p>
<p>u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、栈区（stack）&mdash;&nbsp;&nbsp; 由编译器自动分配释放 (由编译器在需要的时候分配，在不需要的时候自动清除) 。存放函数的参数值，局部变量的值等。其操作方式类似于数据结构中的栈。</p>
<p>&nbsp;</p>
<p>u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、堆区（heap） &mdash;&nbsp;&nbsp; 一般由程序员分配释放（由new分配的内存块，他们的释放编译器不去管，由我们的应用程序去控制，一般一个new就要对应一个delete）(c中用malloc，c++中用new)， 若程序员不释放，程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事，分配方式倒是类似于链表，呵呵。</p>
<p>u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 自由存储区，就是那些由malloc等分配的内存块，他和堆是十分相似的，不过它是用free来结束自己的生命的。</p>
<p>&nbsp;</p>
<p>u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、全局区（静态区）（static）&mdash;，全局变量和静态变量的存储是放在一块的，初始化的全局变量和静态变量在一块区域， 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。在C++里面没有这个区分了，他们共同占用同一块内存区。 - 程序结束后有系统释放</p>
<p>&nbsp;</p>
<p>u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、文字常量区&nbsp; &mdash;常量字符串就是放在这里的，不允许修改。 程序结束后由系统释放</p>
<p>&nbsp;</p>
<p>u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、程序代码区&mdash;存放函数体的二进制代码。&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 更改堆栈大小的设置：</p>
<p>在VC6下面，默认的栈空间大小是1M（好像是，记不清楚了）。当然，我们可以修改：</p>
<p>&nbsp;&nbsp;&nbsp; 打开工程，依次操作菜单如下：Project-&gt;Setting-&gt;Link，在Category 中选中Output，然后在Reserve中设定堆栈的最大值和commit。</p>
<p>注意：reserve最小值为4Byte；commit是保留在虚拟内存的页文件里面，它设置的较大会使栈开辟较大的值，可能增加内存的开销和启动时间。</p>
<p>&nbsp;</p>
<p>1.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例子程序 <br />这是一个前辈写的，非常详细 </p>
<p>//main.cpp </p>
<p>int a = 0; 全局初始化区 </p>
<p>char *p1; 全局未初始化区 </p>
<p>main() </p>
<p>{ </p>
<p>int b; 栈 </p>
<p>char s[] = "abc"; 栈 </p>
<p>char *p2; 栈 </p>
<p>char *p3 = "123456"; 123456\0在常量区，p3在栈上。 </p>
<p>static int c =0； 全局（静态）初始化区 </p>
<p>p1 = (char *)malloc(10); </p>
<p>p2 = (char *)malloc(20); </p>
<p>分配得来得10和20字节的区域就在堆区。 </p>
<p>strcpy(p1, "123456"); 123456\0放在常量区，编译器可能会将它与p3所指向的"123456"优化成一个地方。 </p>
<p>} </p>
<p>&nbsp;</p>
<p>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 堆和栈的理论知识 <br />2.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 申请方式 <br />stack: </p>
<p>由系统自动分配。 例如，声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间 </p>
<p>heap: </p>
<p>需要程序员自己申请，并指明大小，在c中malloc函数 </p>
<p>如p1 = (char *)malloc(10); </p>
<p>在C++中用new运算符 </p>
<p>如p2 = (char *)malloc(10); </p>
<p>但是注意p1、p2本身是在栈中的。 </p>
<p>2.2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 申请后系统的响应 <br />栈</p>
<p>只要栈的剩余空间大于所申请空间，系统将为程序提供内存，否则将报异常提示栈溢出。 </p>
<p>堆</p>
<p>首先应该知道操作系统有一个记录空闲内存地址的链表，当系统收到程序的申请时， </p>
<p>会遍历该链表，寻找第一个空间大于所申请空间的堆结点，然后将该结点从空闲结点链表中删除，并将该结点的空间分配给程序，另外，对于大多数系统，会在这块内存空间中的首地址处记录本次分配的大小，这样，代码中的delete语句才能正确的释放本内存空间。另外，由于找到的堆结点的大小不一定正好等于申请的大小，系统会自动的将多余的那部分重新放入空闲链表中。 </p>
<p>&nbsp;</p>
<p>2.3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 申请大小的限制 <br />栈</p>
<p>在Windows下,栈是向低地址扩展的数据结构，是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的，在WINDOWS下，栈的大小是2M（也有的说是1M，总之是一个编译时就确定的常数），如果申请的空间超过栈的剩余空间时，将提示overflow。因此，能从栈获得的空间较小。 </p>
<p>堆</p>
<p>堆是向高地址扩展的数据结构，是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的，自然是不连续的，而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见，堆获得的空间比较灵活，也比较大。 </p>
<p>&nbsp;</p>
<p>2.4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 申请效率的比较： <br />栈由系统自动分配，速度较快。但程序员是无法控制的。 </p>
<p>堆是由new分配的内存，一般速度比较慢，而且容易产生内存碎片,不过用起来最方便. </p>
<p>另外，在WINDOWS下，最好的方式是用VirtualAlloc分配内存，他不是在堆，也不是在栈是直接在进程的地址空间中保留一快内存，虽然用起来最不方便。但是速度快，也最灵活。 </p>
<p>&nbsp;</p>
<p>2.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 堆和栈中的存储内容 <br />栈： 在函数调用时，第一个进栈的是主函数中后的下一条指令（函数调用语句的下一条可执行语句）的地址，然后是函数的各个参数，在大多数的C编译器中，参数是由右往左入栈的，然后是函数中的局部变量。注意静态变量是不入栈的。 </p>
<p>当本次函数调用结束后，局部变量先出栈，然后是参数，最后栈顶指针指向最开始存的地址，也就是主函数中的下一条指令，程序由该点继续运行。 </p>
<p>堆：一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。 </p>
<p>&nbsp;</p>
<p>2.6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存取效率的比较 <br />char s1[] = "aaaaaaaaaaaaaaa"; </p>
<p>char *s2 = "bbbbbbbbbbbbbbbbb"; </p>
<p>aaaaaaaaaaa是在运行时刻赋值的； </p>
<p>而bbbbbbbbbbb是在编译时就确定的； </p>
<p>但是，在以后的存取中，在栈上的数组比指针所指向的字符串(例如堆)快。 </p>
<p>比如： </p>
<p>#include </p>
<p>void main() </p>
<p>{ </p>
<p>char a = 1; </p>
<p>char c[] = "1234567890"; </p>
<p>char *p ="1234567890"; </p>
<p>a = c[1]; </p>
<p>a = p[1]; </p>
<p>return; </p>
<p>} </p>
<p>对应的汇编代码 </p>
<p>10: a = c[1]; </p>
<p>00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh] </p>
<p>0040106A 88 4D FC mov byte ptr [ebp-4],cl </p>
<p>11: a = p[1]; </p>
<p>0040106D 8B 55 EC mov edx,dword ptr [ebp-14h] </p>
<p>00401070 8A 42 01 mov al,byte ptr [edx+1] </p>
<p>00401073 88 45 FC mov byte ptr [ebp-4],al </p>
<p>第一种在读取时直接就把字符串中的元素读到寄存器cl中，而第二种则要先把指针值读到edx中，在根据edx读取字符，显然慢了。 </p>
<p>2.7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 小结： <br />堆和栈的区别可以用如下的比喻来看出： </p>
<p>使用栈就象我们去饭馆里吃饭，只管点菜（发出申请）、付钱、和吃（使用），吃饱了就走，不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作，他的好处是快捷，但是自由度小。 </p>
<p>使用堆就象是自己动手做喜欢吃的菜肴，比较麻烦，但是比较符合自己的口味，而且自由度大</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/douzixinxin/archive/2006/02/23/606942.aspx">http://blog.csdn.net/douzixinxin/archive/2006/02/23/606942.aspx</a></p><img src="http://www.cnblogs.com/wd775/aggbug/1683578.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/wd775/" target="_blank">绿化树</a> 发表于 2010-03-11 16:22 <a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683578.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683578.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683578.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>使用LINQ来简化编程的7个技巧</title><link>http://www.cnblogs.com/wd775/archive/2010/03/11/1683474.html</link><dc:creator>绿化树</dc:creator><author>绿化树</author><pubDate>Thu, 11 Mar 2010 06:49:00 GMT</pubDate><guid>http://www.cnblogs.com/wd775/archive/2010/03/11/1683474.html</guid><description><![CDATA[<p><div id="blogDetailDiv" style="font-size: 16px;">
<p align="left"><span style="line-height: 1.8em; color: #cc0000;">摘要：</span><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>本文讲解了通过使用LINQ来改善代码的一些技巧，文中的每一个技巧都让代码写起来更加简单，可读性更强。</p>
<p align="left">原文地址：<a href="http://igoro.com/archive/7-tricks-to-simplify-your-programs-with-linq/">http://igoro.com/archive/7-tricks-to-simplify-your-programs-with-linq/</a></p>
<p align="left">&nbsp;</p>
<p align="left">自从学习LINQ以来，我发现了很多使用LINQ来改善代码的方式。每一个技巧都让代码写起来更简单，可读性更强。</p>
<p align="left">这里总结了这些技巧。我会介绍如何使用LINQ来：</p>
<ul>
<li>初始化数组 </li>
<li>在一个循环中遍历多个数组 </li>
<li>生成随机序列 </li>
<li>生成字符串 </li>
<li>转换序列或集合 </li>
<li>把值转换为长度为1的序列 </li>
<li>遍历序列的所有子集 </li>
</ul>
<p align="left">如果你在LINQ方面有心得也欢迎在评论中一起分享。</p>
<p align="left"><strong>1. </strong><strong>初始化数组</strong></p>
<p align="left">通常，我们需要把数组的值初始化为相同的值或递增的序列值，或者可能是一个步进不为1的递增/递减序列。有了LINQ，我们可以在数组的初始化器中完成所有工作，不再需要循环！</p>
<p align="left">在如下的示例代码中，第一行代码初始化了一个长度为10的数组，所有元素都是-1，第二行代码初始化b为0、1、2到9，第三行代码初始化c为100、110、120到190.</p>
<p align="left">int[] a = Enumerable.Repeat(-1, 10).ToArray();</p>
<p align="left">int[] b = Enumerable.Range(0, 10).ToArray();</p>
<p align="left">int[] c = Enumerable.Range(0, 10).Select(i =&gt; 100 + 10 * i).ToArray();</p>
<p align="left">&nbsp;&nbsp;&nbsp; 要提醒一下：如果你初始化一个很大的数组，最好不考虑这种优雅的方式而是使用传统的方式来替代。LINQ的这种解决方案会动态产生数组，因此垃圾数组需要在运行时被回收。也就是说，我总是会在小数组或测试调试代码的情况下使用这种技巧。</p>
<p align="left"><strong>2. </strong><strong>在一个循环中遍历多个数组</strong></p>
<p align="left">&nbsp;&nbsp;&nbsp; 有个朋友问我一个C#的问题：有没有办法在一个循环中遍历多个集合？他的代码差不多是这样：</p>
<p align="left">foreach (var x in array1) {</p>
<p align="left">&nbsp;&nbsp;&nbsp; DoSomething(x);</p>
<p align="left">}</p>
<p align="left">&nbsp;</p>
<p align="left">foreach (var x in array2) {</p>
<p align="left">&nbsp;&nbsp;&nbsp; DoSomething(x);</p>
<p align="left">}</p>
<p align="left">&nbsp;&nbsp;&nbsp; 这样的话，循环主体会很大，而且他也不希望这样重复的代码。但是，他又不希望创建一个数组来保存array1和array2的所有元素。</p>
<p align="left">&nbsp;&nbsp;&nbsp; LINQ提供了一种优雅的解决方案：Concat操作。我们可以使用单个循环来重写上面的代码，如下：</p>
<p align="left">foreach (var x in array1.Concat(array2)) {</p>
<p align="left">&nbsp;&nbsp;&nbsp; DoSomething(x);</p>
<p align="left">}</p>
<p align="left">注意，由于LINQ在枚举器级别进行操作，他不会产生新的数组来保存array1和array2的元素。因此，除了优雅之外，这个方案还很高效。</p>
<p align="left"><strong>3. </strong><strong>生成随机序列</strong></p>
<p align="left">这是一个生成N长度随机序列的简单技巧：</p>
<p align="left">Random rand = new Random();</p>
<p align="left">var randomSeq = Enumerable.Repeat(0, N).Select(i =&gt; rand.Next());</p>
<p align="left">&nbsp;&nbsp;&nbsp; 有了LINQ的延迟特性，序列不会实现进行计算并保存到数组中，而是在迭代randomSeq的时候按需生成随机数。</p>
<p align="left"><strong>4. </strong><strong>生成字符串</strong></p>
<p align="left">&nbsp;&nbsp;&nbsp; LINQ同样也是生成各种类型字符串的好工具。对于测试或调试，生成字符串时很有用的。假设我们需要生成一个N长度的字符串，按照&ldquo;ABCABCABC&rdquo;的方式。使用LINQ，解决方案非常优雅：</p>
<p align="left">string str = new string(</p>
<p align="left">&nbsp;&nbsp;&nbsp; Enumerable.Range(0, N)</p>
<p align="left">&nbsp;&nbsp;&nbsp; .Select(i =&gt; (char)(&lsquo;A&rsquo; + i % 3))</p>
<p align="left">&nbsp;&nbsp;&nbsp; .ToArray());</p>
<p align="left"><em>&nbsp;&nbsp;&nbsp; Petar Petrov</em><em>给出了另外一种有趣的方式使用LINQ来生成字符串：</em></p>
<p align="left">string values = string.Join(string.Empty, Enumerable.Repeat(pattern, N).ToArray());</p>
<p align="left"><strong>5. </strong><strong>转换序列或集合</strong></p>
<p align="left">&nbsp;&nbsp;&nbsp; 在C#或VB中我们不能实现把序列从T类型转换为U类型，即使T从U类继承。因此，即使把List&lt;string&gt;转换为List&lt;object&gt;也很难实现。（要解释为什么，请看Bick Byer的<a href="http://blogs.msdn.com/rmbyers/archive/2005/02/16/375079.aspx">帖子</a>）。但是如果要把IEnumerable&lt;T&gt;转换为IEnumerable&lt;U&gt;的话，LINQ有一个简单而有效的解决方案：</p>
<p align="left">IEnumerable&lt;string&gt; strEnumerable = &hellip;;</p>
<p align="left">IEnumerable&lt;object&gt; objEnumerable = strEnumerable.Cast&lt;object&gt;();</p>
<p align="left">&nbsp;&nbsp;&nbsp; 如果我们需要转换List&lt;T&gt;为List&lt;U&gt;，LINQ也提供了解决方案，但是它会进行列表的复制：</p>
<p align="left">List&lt;string&gt; strList = &hellip;;</p>
<p align="left">List&lt;object&gt; objList = new List&lt;object&gt;(strList.Cast&lt;object&gt;());</p>
<p align="left"><em>&nbsp;&nbsp;&nbsp; <a href="http://chriscavanagh.wordpress.com/">Chris Cavanagh</a></em><em>建议另外一种解决方式：</em></p>
<p align="left">var objList = strList.Cast&lt;object&gt;().ToList();</p>
<p align="left"><strong>6. </strong><strong>把值转换为长度为1的序列</strong></p>
<p align="left">&nbsp;&nbsp;&nbsp; 当我们需要把单个值转化为一个长度为1的序列时，会怎么做？我们可以创建一个长度为1的数组，但是我还是喜欢LINQ的Repeat操作：</p>
<p align="left">IEnumerable&lt;int&gt; seq = Enumerable.Repeat(myValue, 1);</p>
<p align="left"><strong>7. </strong><strong>遍历序列的所有子集</strong></p>
<p align="left">&nbsp;&nbsp;&nbsp; 有的时候，遍历数组的所有子集很有用。<a href="http://en.wikipedia.org/wiki/Subset_sum">子集和问题</a>、<a href="http://en.wikipedia.org/wiki/Boolean_satisfiability_problem">布尔可满足性问题</a>以及<a href="http://en.wikipedia.org/wiki/Knapsack_problem">背包问题</a>都可以通过遍历某个序列的所有子集来简单解决。</p>
<p align="left">&nbsp;&nbsp;&nbsp; 有了LINQ，我们可以如下声场所有arr数组的子集：</p>
<p align="left">T[] arr = ...;</p>
<p align="left">var subsets = from m in Enumerable.Range(0, 1 &lt;&lt; arr.Length)</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from i in Enumerable.Range(0, arr.Length)</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where (m &amp; (1 &lt;&lt; i)) != 0</p>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select arr[i];</p>
<p align="left">&nbsp;&nbsp;&nbsp; 注意，如果子集的个数超过了int，上面的代码就不能工作。因此，仅当你知道arr的长度不超过30的时候才去使用这个方式。如果arr长度超过30，你应该不会是想去遍历所有的子集，因为可能这会耗费几分钟或更长的时间。</p>
<p align="left"><strong>评论和总结</strong></p>
<p align="left">&nbsp;&nbsp;&nbsp; 希望这些技巧对你有用，这些示例代码都使用C#实现，但是你可以很容易得改变为其它.NET语言。然而，LINQ对于支持扩展方法、lambda表达式和类型推断的语言更方便，比如C#和VB。这里的每一段代码都可行，但是我不能保证什么，请在使用前仔细检查。</p>
</div><img src="http://www.cnblogs.com/wd775/aggbug/1683474.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/wd775/" target="_blank">绿化树</a> 发表于 2010-03-11 14:49 <a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683474.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683474.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683474.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>测试驱动开发面临的挑战</title><link>http://www.cnblogs.com/wd775/archive/2010/03/11/1683464.html</link><dc:creator>绿化树</dc:creator><author>绿化树</author><pubDate>Thu, 11 Mar 2010 06:43:00 GMT</pubDate><guid>http://www.cnblogs.com/wd775/archive/2010/03/11/1683464.html</guid><description><![CDATA[<p><p>Forrester的高级分析师Dave West认为，测试驱动开发（TDD）就像是&ldquo;圣杯&rdquo;，但是&ldquo;如果能达到这个目标，付出再多的辛苦也是值得的。&rdquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;在企业向敏捷转型的各种实践中，TDD通常是最艰难的一个。<br />&nbsp;&nbsp;&nbsp;&nbsp;这对美国犹他州Midvale的IBM软件组来说是确确实实的体验。他们从2007年就开始向敏捷转型。IBM开发转型部门副总裁Sue Mckinney认为，测试驱动开发前景非常诱人，但是&ldquo;在这个过程中我们的付出可能也是最多的。&rdquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;Mckinney说：&ldquo;虽然我们做了大量的自动单元测试和功能测试，集成测试也做得越来越好，但是这毕竟是一种意识问题。开发人员喜欢编写代码，他们一点儿也不喜欢做测试。&rdquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;她又补充道，但这是他们必须经历的一段旅程，&ldquo;我们通过兼并获得一些优秀的设计师，他们在TDD方面有很不错的经验，值得我们效仿。我们请他们将经验和大家分享。这将是我们2009年的重点工作&mdash;&mdash;让我们的团队学习TDD。&rdquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;TDD根源于极限编程（XP），通常指开发人员在编写代码之前创建用于对代码进行自动单元测试的实践。Kirk Knoernschild是Burton集团的一位分析师。他列举了这个过程中所面临的挑战：&ldquo;如果单元太大就很难写出高质量的测试。并且，虽然许多组织都说他们的开发人员在写单元测试，但是实际上他们也不知道自己的代码覆盖率有多高。还有许多组织仍然会把测试阶段推迟到软件周期的后期，这无疑会使问题变得更严重。&rdquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;旧代码也会产生问题。据AMS Services的首席架构师Chris Kinsman说，虽然AMS已经提高了对代码的单元测试和集成测试的力度，但是他们并没有做太多TDD方面的工作。&ldquo;我们现在有大量的非TDD代码。旧代码几乎没有测试驱动的。&rdquo;Chris表示，&ldquo;部分团队做过TDD方面的短期努力，但那不等于在全部团队都采用了这个实践。&rdquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;他认为，AMS不一定会把TDD作为目标，&ldquo;我担心我们的代码基础可能不支持这么做。在走这一步之前，我们还要先解决一些架构上的问题。我并不是从理论上反对这么做，我只是不想把我们当前的工作弄得更辛苦而已。&rdquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;Knoernschild认为，测试驱动开发所面临的另一难题是它给人一种会减缓开发团队速度的感觉。复式记账法就是一个很好的类比。如果会计不使用复式记账法，那么他的工作会快很多。但是这样的结果就是一旦出错他无法（轻松地）使用制约系统进行检查。测试也是如此。一旦出现了问题，你会发现你缺少相应的制约系统来检查并确定问题的根源所在。<br />&nbsp;&nbsp;&nbsp;&nbsp;虽然TDD确实会减缓工作速度，但是长远看来，&ldquo;随着代码的增长，它实际上是会提高速度的。&rdquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;Forrester的分析师West认为，这是一种文化上的转变，&ldquo;以前的软件工程师在拿不定主意的时候会写许多文件，但是这些文件都没有说到痛处。因为这时候没有让你战胜这个问题的环境，缺少的是一种氛围。&rdquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;West还说道，开发人员在写测试之前可能需要先研究一些东西，&ldquo;并不是说你不喜欢这种方式，而是在你写出一部分编码、了解到一个大概之前，你无法真正地明白问题，也就无法写出测试来。而在敏捷所提倡的探索性过程中，你可以更好地了解问题所在，相应地也就会更习惯于这种做法。&rdquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;West认为，测试资源按部门划分的方法也是一个障碍，&ldquo;某些供应商要为此负责，因为他们鼓励卓越中心的做法&mdash;&mdash;即专门负责QA的部门。这使得很难从早期就开始QA方面的工作，所以你只能在没有QA的情况做敏捷工作。你确实会做单元测试，但是你把它和其它工作分开了，因为它们属于不同的部门。&rdquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;网络内容管理公司Vignette已经开始接受TDD，但也只是刚开始。其工程部主任Subu Subramanian说，&ldquo;如果团队考虑了需求描述和验收标准，他们会把这些详细地写到测试里，这样他们在进行设计和开发的时候就会同时考虑测试。&rdquo;他表示，Vignette的最终目标是把测试带入到开发周期的早期阶段。<br />&nbsp;&nbsp;&nbsp;&nbsp;虽然这不是敏捷的一部分，却可以为测试驱动开发带来意想不到的效果。他说，&ldquo;虽然TDD通常会和敏捷开发联系在一起，也是敏捷实践的一种，但是即使你没有把全部精力都投入到敏捷当中，TDD的价值也是显而易见的。从你写下第一行代码的时候，你就可以把测试带入开发周期。你可以在编写代码的同时生成相应的测试集。&rdquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;他还补充说，&ldquo;如何执行TDD取决于你的企业结构。你必须根据实际情况做决定。比如可以是一种两人工作的模式，一人写测试，一人写代码。&rdquo;<br />&nbsp;&nbsp;&nbsp;&nbsp;不管TDD将来如何发展，各企业都需要&ldquo;尽可能地在早期阶段把尽量多的精力放到质量与测试当中&rdquo;。 </p>
<!--v:3.2--><img src="http://www.cnblogs.com/wd775/aggbug/1683464.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/wd775/" target="_blank">绿化树</a> 发表于 2010-03-11 14:43 <a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683464.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683464.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683464.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Mime编码方式</title><link>http://www.cnblogs.com/wd775/archive/2010/03/11/1683454.html</link><dc:creator>绿化树</dc:creator><author>绿化树</author><pubDate>Thu, 11 Mar 2010 06:39:00 GMT</pubDate><guid>http://www.cnblogs.com/wd775/archive/2010/03/11/1683454.html</guid><description><![CDATA[<p><div class="cnt">
<p>MIME的编码介绍(由网上资料和实践经验整合)</p>
<p>一、MIME: Multipurpose Internet Mail Extensions</p>
<p>英国帝国大学计算机在线字典FOLDOC对MIME的解释为:&ldquo;多部分(multi-part)、多媒体电子邮件和WWW超文本的一种编码标准，用于传送诸如图形、声音和传真等非文本数据。MIME定义于RFC1341，用MIMENCODE的方法将二进制数据转换成为一种被称为BASE64的ASCII子集的字符的组合。&rdquo;</p>
<p>Internet上有专门讨论MIME的新闻组: comp.mail.mime。该新闻组的FAQ可以从下面的网点获得：</p>
<p><a target="_blank" href="http://www.cis.ohio-state.edu/hypertext/faq/usenet/mail/mime-faq/mime0/faq.html">http://www.cis.ohio-state.edu/hypertext/faq/usenet/mail/mime-faq/mime0/faq.html</a></p>
<p>MIMENCODE最早称为MMENCODE，提出用MIMENCODE代替UUENCODE，是因为UUENCODE使用了一些字符在一些邮件网关（特别是那些转换ASCII和EBCDIC码的网关）中造成传输障碍，（还有一些软件不能对所有 UUENCODE 的算法进行正确解码而导致邮件的阅读困难），因此 MIME 被设计用于替代UUENCODE，但是结果是这些协议共存。</p>
<p>在MIME出台之前，使用RFC 822只能发送基本的ASCII码文本信息，邮件内容如果要包括二进制文件、声音和动画等，实现起来非常困难。</p>
<p>&nbsp;&nbsp; MIME提供了一种可以在邮件中附加多种不同编码文件的方法，弥补了原来的信息格式的不足。实际上不仅仅是邮件编码，现在MIME经成为HTTP协议标准的一个部分。</p>
<p>二、MIME编码方式简介</p>
<p>对邮件进行编码最初的原因是因为 Internet 上的很多网关不能正确传输8bit内码的字符，比如汉字等。编码的原理就是把8bit的内容转换成7bit的形式以能正确传输，在接收方收到之后，再将其还原成8bit的内容。</p>
<p>在MIME协议之前，邮件的编码曾经有过UUENCODE等编码方式 ，但是由于MIME协议算法简单，并且易于扩展，现在已经成为邮件编码方式的主流，不仅是用来传输8bit的字符，也可以用来传送二进制的文件，如邮件附件中的图像、音频等信息，而且扩展了很多基于MIME 的应用。从编码方式来说，MIME定义了两种编码方法Base64与QP(Quote-Printable)。</p>
<p>1.Base64编码</p>
<p>Base64是一种通用的方法，其原理很简单，就是把三个Byte的数据用4个Byte表示。在这四个Byte中，实际用到的都只有前面6bit，这样就不存在只能传输7bit的字符的问题了。Base64的缩写一般是&ldquo;B&rdquo;。</p>
<p>&nbsp;&nbsp; Base64将输入的字符串或一段数据编码成只含有{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}这64个字符的串，'='用于填充。</p>
<p>&nbsp;&nbsp; 其编码的方法是，将输入数据流每次取6bit，用此6bit的值(0-63)作为索引去查表，输出相应字符。</p>
<p>这样，每3个字节将编码为4个字符(3&times;8 &rarr; 4&times;6)；不满4个字符的以'='填充。</p>
<p>&nbsp;&nbsp; 有的场合，以&ldquo;=?charset?B?xxxxxxxx?=&rdquo;表示xxxxxxxx是Base64编码，且原文的字符集是charset。在段体内则直接编码，适当时机换行，MIME建议每行最多76个字符。</p>
<p>&nbsp;&nbsp; Base64的算法很简单，它将字符流顺序放入一个24位的缓冲区，缺字符的地方补零。</p>
<p>&nbsp;&nbsp; 然后将缓冲区截断成为4个部分，高位在先，每个部分6位，用64个字符重新表示。如果输入只有一个或两个字节，那么输出将用等号&ldquo;=&rdquo;补足。这可以隔断附加的信息造成编码的混乱。</p>
<p>&nbsp;</p>
<p>如何进行base64编码 <br />&nbsp;&nbsp; Base64 使用US-ASCII子集的65个字符, 每个字符用6位表示 <br />&nbsp;&nbsp; 对于文本串，编码过程如下。例如"men": <br />&nbsp;&nbsp; 先转成US-ASCII值. <br /><br />&nbsp;&nbsp; "m"十进制 109 <br />&nbsp;&nbsp; "e"十进制 101 <br />&nbsp;&nbsp; "n"十进制 110 <br />&nbsp;&nbsp; 二进制 : <br />&nbsp;&nbsp; m 01101101 <br />&nbsp;&nbsp; e 01100101 <br />&nbsp;&nbsp; n 01101110 <br /><br />&nbsp;&nbsp; 三个8位连起来是24位 <br />&nbsp;&nbsp; 011011010110010101101110 <br /><br />&nbsp;&nbsp; 然后分成4个6位 <br />&nbsp;&nbsp; 011011 010110 010101 101110 <br /><br />&nbsp;&nbsp; 现在得到4个值，十进制为 <br />&nbsp;&nbsp; 27 22 21 46 <br /><br />&nbsp; 对应的 Base64 字符是 : b W V u <br />&nbsp; 编码总是基于3个字符，从而产生4个Base64字符。 <br /><br />&nbsp; 如果只是2个字符的数据，使用特殊字符"="补齐Base64的4字。 <br />&nbsp; 如，编码"me" <br />&nbsp; 01101101 01100101 <br />&nbsp; 0110110101100101 <br />&nbsp; 011011 010110 0101 <br />&nbsp; 111111 (与，补足6位) <br />&nbsp; 011011 010110 010100 <br />&nbsp; b W U <br />&nbsp; b W U = ("=" 补足4字符) <br />&nbsp; 于是 "bWU=" 就是"me"的Base64值. <br /><br />&nbsp; 如果只是2个字符的数据,如编码 "m" <br />&nbsp; 01101101 <br />&nbsp; 011011 01 <br />&nbsp; 111111 <br />&nbsp; 011011 010000 <br />&nbsp; b Q = = <br />于是 "bQ==" 就是"m"的Base64值. </p>
<p>&nbsp;</p>
<p>2.QP编码</p>
<p>另一种方法是QP(Quote-Printable) 方法，通常缩写为&ldquo;Q&rdquo;方法，其原理是把一个8bit的字符用两个16进制数值表示，然后在前面加&ldquo;=&rdquo;。所以我们看到经过QP编码后的文件通常是这个样子：=B3=C2=BF=A1=C7=E5=A3= AC=C4=FA=BA=C3=A3=A1。</p>
<p>&nbsp;&nbsp;&nbsp; Quoted -printable根据输入的字符串或字节范围进行编码，若是不需编码的字符，直接输出。若需要编码，则先输出'='，后面跟着以2个字符表示的十六进制字节值。有的场合，以&ldquo;=?charset?Q?xxxxxxxx?=&rdquo;表示xxxxxxxx是Quoted-printable编码，且原文的字符集是charset。在段体内则直接编码，适当时机换行，换行前额外输出一个'='。</p>
<p>三、MIME的头信息</p>
<p>邮件头</p>
<p>在邮件头中，有很多从RFC 822沿用的域名，MIME也增加了一些。常见的标准域名和含义如下:</p>
<p>域名 含义 添加者</p>
<p>&nbsp;&nbsp; Received &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 传输路径 各级邮件服务器</p>
<p>&nbsp;&nbsp; Return-Path &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 回复地址 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 目标邮件服务器</p>
<p>&nbsp;&nbsp; Delivered-To &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 发送地址 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 目标邮件服务器</p>
<p>&nbsp;&nbsp; Reply-To &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 回复地址 邮件的创建者</p>
<p>&nbsp;&nbsp; From &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 发件人地址 邮件的创建者</p>
<p>&nbsp;&nbsp; To &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 收件人地址 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 邮件的创建者</p>
<p>&nbsp;&nbsp; Cc &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 抄送地址 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 邮件的创建者</p>
<p>&nbsp;&nbsp; Bcc &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 暗送地址 邮件的创建者</p>
<p>&nbsp;&nbsp; Date &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 日期和时间 邮件的创建者</p>
<p>&nbsp;&nbsp; Subject &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 主题 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 邮件的创建者</p>
<p>&nbsp;&nbsp; Message-ID &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 消息ID &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 邮件的创建者</p>
<p>&nbsp;&nbsp; MIME-Version &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MIME版本 邮件的创建者</p>
<p>&nbsp;&nbsp; Content-Type &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 内容的类型 邮件的创建者</p>
<p>&nbsp;&nbsp; Content-Transfer-Encoding&nbsp;&nbsp;&nbsp; 内容的传输编码方式 邮件的创建者</p>
<p>非标准的、自定义域名都以X-开头，例如X-Mailer, X-MSMail-Priority等，通常在接收和发送邮件的是同一程序时才能理解它们的意义。</p>
<p>段头</p>
<p>在段头中，大致有如下一些域:</p>
<p>域名 含义</p>
<p>&nbsp;&nbsp; Content-Type &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 段体的类型</p>
<p>&nbsp;&nbsp; Content-Transfer-Encoding &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 段体的传输编码方式</p>
<p>&nbsp;&nbsp; Content-Disposition &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 段体的安排方式</p>
<p>&nbsp;&nbsp; Content-ID &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 段体的ID</p>
<p>&nbsp;&nbsp; Content-Location &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 段体的位置(路径)</p>
<p>&nbsp;&nbsp; Content-Base &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 段体的基位置</p>
<p>有的域除了值之外，还带有参数。值与参数、参数与参数之间以&ldquo;;&rdquo;分隔。参数名与参数值之间以&ldquo;=&rdquo;分隔。</p>
<p>1.MIME-Version</p>
<p>表示使用的MIME的版本号，一般是1.0;</p>
<p>如:</p>
<p>&nbsp;&nbsp;&nbsp; MIME-Version: 1.0</p>
<p>2.Content-Type</p>
<p>&nbsp;&nbsp; Content-Type定义了正文的类型，我们实际上是通过这个标识来知道正文内是什么类型的文件。比如：text/plain 表示的是无格式的文本正文，text/html 表示的 Html 文档，image/gif 表示的是 gif 格式的图片等等。Content-Type都是&ldquo;主类型/子类型&rdquo;的形式。主类型有text, image, audio, video, application, multipart, message等，分别表示文本、图片、音频、视频、应用、分段、消息等。每个主类型都可能有多个子类型，如text类型就包含plain, html, xml, css等子类型。以X-开头的主类型和子类型，同样表示自定义的类型，未向IANA正式注册，但大多已经约定成俗了。如application/x-zip-compressed是ZIP文件类型。在Windows中，注册表的&ldquo;HKEY_CLASSES_ROOT\MIME\Database\Content Type&rdquo;内列举了除multipart之外大部分已知的Content-Type。</p>
<p>关于参数的形式，RFC里有很多补充规定，有的允许带几个参数，较为常见的有:</p>
<p>主类型 参数名 含义</p>
<p>&nbsp;&nbsp; text &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; charset &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符集</p>
<p>&nbsp;&nbsp; image &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 名称</p>
<p>&nbsp;&nbsp; application &nbsp;&nbsp; name &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 名称</p>
<p>&nbsp;&nbsp; multipart &nbsp;&nbsp;&nbsp;&nbsp; boundary &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 边界</p>
<p>multipart类型</p>
<p>邮件中常用到的复合类型:multipart。</p>
<p>multipart类型表示正文是由多个部分组成的，后面的子类型说明的是这些部分之间的关系。</p>
<p>邮件中用到的三个类型有:</p>
<p>(1).multipart/alternative：表示正文由两个部分组成，可以选择其中的任意一个。主要作用是在征文同时有text格式和html格式时，可以在两个正文中选择一个来显示，支持 html 格式的邮件客户端软件一般会显示其 HTML 正文，而不支持的则会显示其Text正文；</p>
<p>(2).multipart/mixed：表示文档的多个部分是混合的，指正文与附件的关系。如果邮件的MIME类型是multipart/mixed，即表示邮件带有附件。</p>
<p>(3).multipart/related：表示文档的多个部分是相关的，一般用来描述 Html 正文与其相关的图片。</p>
<p>multipart类型，是MIME邮件的精髓。邮件体被分为多个段，每个段又包含段头和段体两部分，这两部分之间也以空行分隔。它们之间的层次关系可归纳为下图所示：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; +------------------------- multipart/mixed ----------------------------+</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; | +----------------- multipart/related ------------------+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; | |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; | | +----- multipart/alternative ------+ +----------+ | +------+ |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; | | |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | | 内嵌资源 | | | 附件 | |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; | | | +------------+ +------------+ | +----------+ | +------+ |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; | | | | 纯文本正文 | | 超文本正文 | |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; | | | +------------+ +------------+ | +----------+ | +------+ |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; | | |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | | 内嵌资源 | | | 附件 | |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; | | +----------------------------------+ +----------+ | +------+ |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; | |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; | +------------------------------------------------------+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; +----------------------------------------------------------------------+</p>
<p>&nbsp;&nbsp; 可以看出，如果在邮件中要添加附件，必须定义multipart/mixed段；如果存在内嵌资源，至少要定义multipart/related段；如果纯文本与超文本共存，至少要定义multipart/alternative段。什么是&ldquo;至少&rdquo;？举个例子说，如果只有纯文本与超文本正文，那么在邮件头中将类型扩大化，定义为multipart/related，甚至multipart/mixed，都是允许的。</p>
<p>&nbsp;&nbsp; multipart诸类型的共同特征是，在段头指定&ldquo;boundary&rdquo;参数字符串，段体内的每个子段以此串定界。所有的子段都以&ldquo;--&rdquo;+boundary行开始，父段则以&ldquo;--&rdquo;+boundary+&ldquo;--&rdquo;行结束。段与段之间也以空行分隔。在邮件体是multipart类型的情况下，邮件体的开始部分(第一个&ldquo;--&rdquo; +boundary行之前)可以有一些附加的文本行，相当于注释，解码时应忽略。段间也可以有一些附加的文本行，不会显示出来。</p>
<p>这些复合类型又是可以嵌套使用的，比如说一个带有附件的邮件，同时有html与text两种格式的正文，则邮件的结构是：</p>
<p>Content-Type: multipart/mixed</p>
<p>部分一：</p>
<p>Content Type : multipart/alternative：</p>
<p>Text 正文；</p>
<p>Html 格式的正文</p>
<p>部分二：</p>
<p>附件</p>
<p>邮件结束符；</p>
<p>由于复合类型由多个部分组成，因此，需要一个分隔符来分隔这多个部分，这就是上面的邮件源文件中的boundary所描述的，对于每一个Contect type :multipart/* 的内容，都会有这么一个说明，表示多个部分之间的分隔。</p>
<p>含有 MIME/BASE64编码的邮件，你查看它的源码时一般都含有:&ldquo;This is a multi-part message in MIME format.&rdquo;这样的句子。也可以被绝大多数的email程序进行解码，包括Netscape、MS Mail、Eudora等。这些程序可以正确识别邮件的正文，恢 MIME/BASE64 编码的部分为正确的文字或夹带的二进制文件。</p>
<p>3.Content-Transfer-Encoding</p>
<p>它表示了这个部分文档的编码方式。只有识别了这个说明，才能用正确的解码方式实现对其解码。</p>
<p>Content-Transfer-Encoding共有Base64, Quoted-printable, 7bit, 8bit, Binary等几种。</p>
<p>其中7bit是缺省的编码方式。电子邮件源码最初设计为全部是可打印的ASCII码的形式。</p>
<p>非ASCII码的文本或数据要编码成要求的格式。</p>
<p>Base64, Quoted-Printable是在非英语国家使用最广使的编码方式。</p>
<p>Binary方式只具有象征意义，而没有任何实用价值。</p>
<p>4.boundary</p>
<p>这个分隔符是正文中不可能出现的一串古字符的组合，在文档中，以"--"加上这个boundary 来表示一个部分的开始，在文档的结束，以"--"加boundary再在最后加上"--"来表示文档的结束。由于复合类型是可以嵌套使用的，因此，邮件中可能会多个boundary。</p>
</div><img src="http://www.cnblogs.com/wd775/aggbug/1683454.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/wd775/" target="_blank">绿化树</a> 发表于 2010-03-11 14:39 <a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683454.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683454.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683454.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>LPTSTR、LPCSTR、LPCTSTR、LPSTR的意义</title><link>http://www.cnblogs.com/wd775/archive/2010/03/11/1683363.html</link><dc:creator>绿化树</dc:creator><author>绿化树</author><pubDate>Thu, 11 Mar 2010 04:55:00 GMT</pubDate><guid>http://www.cnblogs.com/wd775/archive/2010/03/11/1683363.html</guid><description><![CDATA[<p><p>UNICODE：它是用两个字节表示一个字符的方法。比如字符'A'在ASCII下面是一个字符，可'A'在UNICODE下面是两个字符,高字符用0填充，而且汉字'程'在ASCII下面是两个字节，而在UNICODE下仍旧是两个字节。UNICODE的用处就是定长表示世界文字，据统计，用两个字节可以编码现存的所有文字而没有二义。&nbsp;&nbsp; MBCS，它是多字节字符集，它是不定长表示世界文字的编码。MBCS表示英文字母时就和ASCII一样（这也是我们容易把MBCS和ASCII搞混的原因），但表示其他文字时就需要用多字节。&nbsp;&nbsp; WINDOWS下面的程序设计可以支持MBCS和UNICODE两种编码的字符串，具体用那种就看你定义了MBCS宏还是UNICODE宏。MBCS宏对应的字符串指针是char*也就是LPSTR，UNICODE对应的指针是unsigned&nbsp;&nbsp; short*也就是LPWSTR，为了写程序方便微软定义了类型LPTSTR，在MBCS下他就是char*,&nbsp;&nbsp; 在UNICODE下它是unsigned&nbsp;&nbsp; char*,这样你就可以重定义一个宏进行不同字符集的转换了。 LPTSTR、LPCSTR、LPCTSTR、LPSTR的意义：</p>
<p>LPSTR：32bit指针 指向一个字符串，每个字符占1字节</p>
<p>LPCSTR:32-bit指针 指向一个常字符串，每个字符占1字节<br />LPCTSTR:32-bit指针 指向一个常字符串,每字符可能占1字节或2字节，取决于Unicode是否定义<br />LPTSTR:32-bit指针 每字符可能占1字节或2字节，取决于Unicode是否定义</p>
<p>Windows使用两种字符集ANSI和UNICODE，前者就是通常使用的单字节方式，但这种方式处理象中文这样的双字节字符不方便，容易出现半个汉字的情况。而后者是双字节方式，方便处理双字节字符。WindowsNT的所有与字符有关的函数都提供两种方式的版本，而Windows9x只支持ANSI方式。_T一般同字常数相关，如_T("Hello"。如果你编译一个程序为ANSI方式，_T实际不起任何作用。而如果编译一个程序为UNICODE方式，则编译器会把"Hello"字符串以UNICODE方式保存。_T和_L的区别在于，_L不管你是以什么方式编译，一律以UNICODE方式保存.</p>
<p>&nbsp;Windows核心编程的第一章。</p>
<p>L是表示字符串资源为Unicode的。</p>
<p>比如<br />wchar_t Str[] = L"Hello World!";<br />这个就是双子节存储字符了。</p>
<p>_T是一个适配的宏～</p>
<p>当<br />#ifdef _UNICODE的时候<br />_T就是L<br />没有#ifdef _UNICODE的时候<br />_T就是ANSI的。</p>
<p>比如</p>
<p>LPTSTR lpStr = new TCHAR[32];<br />TCHAR* szBuf = _T("Hello");<br />以上两句使得无论是在UNICODE编译条件下都是正确编译的。</p>
<p>而且MS推荐你使用相匹配的字符串函数。<br />比如处理LPTSTR或者LPCTSTR 的时候，不要用strlen ,而是要用_tcslen</p>
<p>否则在UNICODE的编译条件下，strlen不能处理 wchar_t*的字符串。</p>
<p>T是非常有意思的一个符号（TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...），它表示使用一种中间类型，既不明确表示使用 MBCS，也不明确表示使用 UNICODE。那到底使用哪种字符集?编译的时候才决定</p>
<p><br />本文来自CSDN博客，转载请标明出处：<a target="_blank" href="http://blog.csdn.net/douzixinxin/archive/2006/07/03/869937.aspx">http://blog.csdn.net/douzixinxin/archive/2006/07/03/869937.aspx</a></p><img src="http://www.cnblogs.com/wd775/aggbug/1683363.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/wd775/" target="_blank">绿化树</a> 发表于 2010-03-11 12:55 <a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683363.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683363.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/wd775/archive/2010/03/11/1683363.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item></channel></rss>
