﻿<?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>博客园-编程　＆　生活 </title><link>http://www.cnblogs.com/watsonyin/</link><description>开心工作，快乐生活  (原创文章，转载请注明出处) 
</description><language>zh-cn</language><lastBuildDate>Thu, 28 Aug 2008 20:58:09 GMT</lastBuildDate><pubDate>Thu, 28 Aug 2008 20:58:09 GMT</pubDate><ttl>60</ttl><item><title>9月份的PMP成绩出来了</title><link>http://www.cnblogs.com/watsonyin/archive/2007/12/06/985641.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Thu, 06 Dec 2007 09:30:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/12/06/985641.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/985641.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/12/06/985641.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/985641.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/985641.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt">居然这么久才出来成绩，电脑阅卷怎么会这么慢，真奇怪！<br />
<br />
好在通过了，但不痛快，好险，只有120分，本来以为能到160分以上的。而看看同期同学的成绩，很多没过！要知道这个班以前的通过率都在90%以上。<br />
<br />
网上查了一下，原来同样的情况广泛存在，以致有些人认为是PMI在捣鬼，企图榨取钱财！面对如此惨象，我不由得暗自庆幸了一下，一把年纪了，我可不想重考啊，不管怎么说，过了就好，小小庆祝一下~ </span>
<img src ="http://www.cnblogs.com/watsonyin/aggbug/985641.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41943/" target="_blank">[新闻]轮回－新浪推出Facebook模式的SNS</a>]]></description></item><item><title>怎样将GIS图形复制到Windows剪贴板，粘贴到Word中</title><link>http://www.cnblogs.com/watsonyin/archive/2007/11/22/968651.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Thu, 22 Nov 2007 07:17:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/11/22/968651.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/968651.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/11/22/968651.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/968651.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/968651.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;很久没写随笔了，有点想关了这个博客，不再更新，但还是没有下定决心。趁这些天比较闲，发一个以前写着玩的功能吧。<br />
&nbsp;&nbsp;&nbsp;&nbsp;复制、粘贴功能是一件很简单的事情，但怎样将GIS图形粘贴到word中呢？最简单的思路还是将GIS图形保存为Image形式，发送到<font face="Courier New">剪贴板</font>，再粘贴到Word。但如果Image格式采用栅格的格式，如BMP或JPEG，则粘贴后在Word中拉伸时，效果会受到影响，比较合适的格式是采用WMF或EMF这种矢量的格式。将Visio格式复制到Word中时，可以看到就是这种效果，而且文字还是可以编辑的。好，下面我们就看看怎样实现这个功能。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;第一步当然是将图形复制为一个MetaFile对象：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Metafile&nbsp;GetGeometryMetafile(ISymbol&nbsp;pSymbol,&nbsp;IGeometry&nbsp;pGeometry)<br />
<img id="Codehighlighter1_90_1505_Open_Image" onclick="this.style.display='none'; Codehighlighter1_90_1505_Open_Text.style.display='none'; Codehighlighter1_90_1505_Closed_Image.style.display='inline'; Codehighlighter1_90_1505_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_90_1505_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_90_1505_Closed_Text.style.display='none'; Codehighlighter1_90_1505_Open_Image.style.display='inline'; Codehighlighter1_90_1505_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_90_1505_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_90_1505_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">先获取一个IDisplayTransformation对象</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDisplayTransformation&nbsp;pDisTrans&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DisplayTransformationClass();&nbsp;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IEnvelope&nbsp;pEnv&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pGeometry.Envelope;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rectangle&nbsp;rect&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Rectangle(</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">500</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">500</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tagRECT&nbsp;r;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.left&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;rect.Left;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.right&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;rect.Right;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.bottom&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;rect.Bottom;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.top&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;rect.Top;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDisTrans.set_DeviceFrame(</span><span style="color: #0000ff">ref</span><span style="color: #000000">&nbsp;r);<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDisTrans.Bounds&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pEnv;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDisTrans.Resolution&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">72</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDisTrans.ReferenceScale&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1.0</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDisTrans.ScaleRatio&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">创建WMF</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemoryStream&nbsp;ms&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MemoryStream();<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics&nbsp;g&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CreateGraphics();<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntPtr&nbsp;hdc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;g.GetHdc();<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Metafile&nbsp;mf&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Metafile(ms,&nbsp;hdc,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Rectangle(</span><span style="color: #000000">0</span><span style="color: #000000">,</span><span style="color: #000000">0</span><span style="color: #000000">,</span><span style="color: #000000">500</span><span style="color: #000000">,</span><span style="color: #000000">500</span><span style="color: #000000">),MetafileFrameUnit.Pixel,&nbsp;EmfType.EmfPlusDual);<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.ReleaseHdc(hdc);<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.Dispose();<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Graphics.FromImage(mf);&nbsp;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.FillRectangle(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SolidBrush(Color.White),&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Rectangle(</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">500</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">500</span><span style="color: #000000">));<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSymbol.SetupDC((</span><span style="color: #0000ff">int</span><span style="color: #000000">)g.GetHdc(),&nbsp;pDisTrans);<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSymbol.Draw(pGeometry);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSymbol.ResetDC();<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.ReleaseHdc();<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.DrawString(</span><span style="color: #000000">"</span><span style="color: #000000">by&nbsp;watson</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.Font,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SolidBrush(Color.Blue),&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;PointF(</span><span style="color: #000000">20</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">20</span><span style="color: #000000">));<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.Save();<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g.Dispose();<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;mf;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p><br />
第二步：发送到剪贴板：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">IDataObject&nbsp;data&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DataObject();<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.SetData(DataFormats.MetafilePict,&nbsp;mf);<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clipboard.SetDataObject(data,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">);</span></div>
<br />
测试 .... 什么，不成功？？<br />
估计是.net不支持将metafile格式复制到剪贴板吧。<br />
于是，用于搜索引擎，搜索一翻，在某国外论坛找到解决方案：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ClipboardMetafileHelper<br />
<img id="Codehighlighter1_42_1579_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_1579_Open_Text.style.display='none'; Codehighlighter1_42_1579_Closed_Image.style.display='inline'; Codehighlighter1_42_1579_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_42_1579_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_42_1579_Closed_Text.style.display='none'; Codehighlighter1_42_1579_Open_Image.style.display='inline'; Codehighlighter1_42_1579_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_42_1579_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_42_1579_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #000000">"</span><span style="color: #000000">user32.dll</span><span style="color: #000000">"</span><span style="color: #000000">)]<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;OpenClipboard(IntPtr&nbsp;hWndNewOwner);<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #000000">"</span><span style="color: #000000">user32.dll</span><span style="color: #000000">"</span><span style="color: #000000">)]<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;EmptyClipboard();<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #000000">"</span><span style="color: #000000">user32.dll</span><span style="color: #000000">"</span><span style="color: #000000">)]<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;SetClipboardData(</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;uFormat,&nbsp;IntPtr&nbsp;hMem);<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #000000">"</span><span style="color: #000000">user32.dll</span><span style="color: #000000">"</span><span style="color: #000000">)]<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;CloseClipboard();<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #000000">"</span><span style="color: #000000">gdi32.dll</span><span style="color: #000000">"</span><span style="color: #000000">)]<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;CopyEnhMetaFile(IntPtr&nbsp;hemfSrc,&nbsp;IntPtr&nbsp;hNULL);<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #000000">"</span><span style="color: #000000">gdi32.dll</span><span style="color: #000000">"</span><span style="color: #000000">)]<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;DeleteEnhMetaFile(IntPtr&nbsp;hemf);<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Metafile&nbsp;mf&nbsp;is&nbsp;set&nbsp;to&nbsp;an&nbsp;invalid&nbsp;state&nbsp;inside&nbsp;this&nbsp;function</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;PutEnhMetafileOnClipboard(IntPtr&nbsp;hWnd,&nbsp;Metafile&nbsp;mf)<br />
<img id="Codehighlighter1_767_1573_Open_Image" onclick="this.style.display='none'; Codehighlighter1_767_1573_Open_Text.style.display='none'; Codehighlighter1_767_1573_Closed_Image.style.display='inline'; Codehighlighter1_767_1573_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_767_1573_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_767_1573_Closed_Text.style.display='none'; Codehighlighter1_767_1573_Open_Image.style.display='inline'; Codehighlighter1_767_1573_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_767_1573_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_767_1573_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;bResult&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntPtr&nbsp;hEMF,&nbsp;hEMF2;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hEMF&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;mf.GetHenhmetafile();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;invalidates&nbsp;mf</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">hEMF.Equals(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;IntPtr(</span><span style="color: #000000">0</span><span style="color: #000000">)))<br />
<img id="Codehighlighter1_951_1535_Open_Image" onclick="this.style.display='none'; Codehighlighter1_951_1535_Open_Text.style.display='none'; Codehighlighter1_951_1535_Closed_Image.style.display='inline'; Codehighlighter1_951_1535_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_951_1535_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_951_1535_Closed_Text.style.display='none'; Codehighlighter1_951_1535_Open_Image.style.display='inline'; Codehighlighter1_951_1535_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_951_1535_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_951_1535_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hEMF2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CopyEnhMetaFile(hEMF,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;IntPtr(</span><span style="color: #000000">0</span><span style="color: #000000">));<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">hEMF2.Equals(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;IntPtr(</span><span style="color: #000000">0</span><span style="color: #000000">)))<br />
<img id="Codehighlighter1_1081_1480_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1081_1480_Open_Text.style.display='none'; Codehighlighter1_1081_1480_Closed_Image.style.display='inline'; Codehighlighter1_1081_1480_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1081_1480_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1081_1480_Closed_Text.style.display='none'; Codehighlighter1_1081_1480_Open_Image.style.display='inline'; Codehighlighter1_1081_1480_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1081_1480_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1081_1480_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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">if</span><span style="color: #000000">&nbsp;(OpenClipboard(hWnd))<br />
<img id="Codehighlighter1_1148_1462_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1148_1462_Open_Text.style.display='none'; Codehighlighter1_1148_1462_Closed_Image.style.display='inline'; Codehighlighter1_1148_1462_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1148_1462_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1148_1462_Closed_Text.style.display='none'; Codehighlighter1_1148_1462_Open_Image.style.display='inline'; Codehighlighter1_1148_1462_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1148_1462_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1148_1462_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&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">if</span><span style="color: #000000">&nbsp;(EmptyClipboard())<br />
<img id="Codehighlighter1_1220_1440_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1220_1440_Open_Text.style.display='none'; Codehighlighter1_1220_1440_Closed_Image.style.display='inline'; Codehighlighter1_1220_1440_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1220_1440_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1220_1440_Closed_Text.style.display='none'; Codehighlighter1_1220_1440_Open_Image.style.display='inline'; Codehighlighter1_1220_1440_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1220_1440_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1220_1440_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_1284_1301_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1284_1301_Open_Text.style.display='none'; Codehighlighter1_1284_1301_Closed_Image.style.display='inline'; Codehighlighter1_1284_1301_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1284_1301_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1284_1301_Closed_Text.style.display='none'; Codehighlighter1_1284_1301_Open_Image.style.display='inline'; Codehighlighter1_1284_1301_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;IntPtr&nbsp;hRes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;SetClipboardData(</span><span style="color: #000000">14</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1284_1301_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_1284_1301_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">CF_ENHMETAFILE</span><span style="color: #008000">*/</span></span><span style="color: #000000">,&nbsp;hEMF2);<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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;bResult&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;hRes.Equals(hEMF2);<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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;CloseClipboard();<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeleteEnhMetaFile(hEMF);<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;bResult;<br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
调用<font face="Courier New">PutEnhMetafileOnClipboard</font>方法就可以了，<br />
再测试....大功告成！<br />
<br />
再看一看<font face="Courier New">PutEnhMetafileOnClipboard</font>中的代码，比较特别的是<font face="Courier New">CopyEnhMetaFile函数，将MetaFile在内存中复制一份，看来是.net中的metafile与Windows中的metafile格式有一定出入，windows剪贴板不认识的缘故吧。<br />
<br />
</font>
<img src ="http://www.cnblogs.com/watsonyin/aggbug/968651.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41940/" target="_blank">[新闻]惠普139亿美元完成对EDS的收购</a>]]></description></item><item><title>为什么人照镜子时，左右是反过来的，而上下并没有反过来</title><link>http://www.cnblogs.com/watsonyin/archive/2007/10/19/930111.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Fri, 19 Oct 2007 02:57:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/10/19/930111.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/930111.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/10/19/930111.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/930111.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/930111.html</trackback:ping><description><![CDATA[<div class="Section0">
<p class="0" style="layout-grid-mode: char; text-indent: 21pt; text-align: justify"><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">这是有《世界500强面试题》书上的一个题目，我初看到这个题目，大吃一惊，为什么这样一个司空见惯的问题，我从来没有仔细思考过呢。因此我不得不说，提出这个问题的人是个天才。</span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></p>
<p class="0" style="layout-grid-mode: char; text-indent: 21pt; text-align: justify"><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'">我马上把书抛到一边，思考这个问题。下面是我思考的结果，先折叠起来，要不你先思考一下，然后比对一下？呵呵。</span><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></span></span></p>
<p class="0" style="layout-grid-mode: char; text-align: justify"><span style="font-size: 10.5pt; font-family: '宋体'; mso-spacerun: 'yes'"><o:p><span style="font-size: 12pt"><span style="font-size: 14pt"></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Code_Closed_Image_105145" onclick="this.style.display='none'; Code_Closed_Text_105145.style.display='none'; Code_Open_Image_105145.style.display='inline'; Code_Open_Text_105145.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" /><img id="Code_Open_Image_105145" style="display: none" onclick="this.style.display='none'; Code_Open_Text_105145.style.display='none'; Code_Closed_Image_105145.style.display='inline'; Code_Closed_Text_105145.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" /><span id="Code_Closed_Text_105145" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">我的答案</span><span id="Code_Open_Text_105145" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">我的第一反应是人的大脑的调整。根据人眼睛的成像原理，人通过神经感知到的是上下颠倒的，之所以我们看到的景物不是倒过来的，是因为大脑经过处理的缘故，会不会是照镜子左右反过来也是人大脑处理的结果？但很快我也不相信这个结果了，因为我不明白人脑做这种调整的用意何在</span><span style="color: #000000">~</span><span style="color: #000000">况且，镜子成像是光线反射的结果，我们从镜中看到的东东，与物理分析是完全符合的，不存在什么调整。<br />
<img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" />然后我想到是不是因为人左右对称的缘故。因为左右对称，所以我们才误把右手当左手，左手当右手，人上下不对称，所以不对所头当成脚，脚当成头。我被这个想法迷惑了好一阵子。于是尝试着把一些上下对称的东西放到镜子前面比划，甚至想象把自己横在镜子面前会是什么样子，但并没什么实质的变化。事实上，镜中左右确实是发生了反转，不信你把书放到镜子前面照一照，你会不认识镜子里书上的字，如果没有发生左右反转，我想你一定认得吧</span><span style="color: #000000">~</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" />经过近半小时的思考，我似乎受到了启发。跳出镜子来，不用镜子中的&#8220;我&#8221;来看问题，而用真实的我来看镜子中的&#8220;我&#8221;，发现其实镜子中的左手还是在我们的左边，右手还是在右边。如果镜子中我左右手不动，只把躯干部分放置180度，那镜子中的我看到的左右不是仍然没变化吗？这是我才猛然醒悟，其实不是左右发生了变化，而是身体的前后发生了变化。而身子的前后不管怎么变，我们的上下都是不会变的！这就是题目的解答。至于为什么照镜子时身体前后会发生变化，我想不用解释了吧，根据光线的反射原理是很容易理解的。<br />
<img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align="top" /></span></span></div>
</span></span></o:p></span></div>
<img src ="http://www.cnblogs.com/watsonyin/aggbug/930111.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41939/" target="_blank">[新闻]搜狗五笔输入法发布</a>]]></description></item><item><title>软件设计点滴</title><link>http://www.cnblogs.com/watsonyin/archive/2007/06/26/796066.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Tue, 26 Jun 2007 07:40:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/06/26/796066.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/796066.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/06/26/796066.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/796066.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/796066.html</trackback:ping><description><![CDATA[摘要: 曾经看过一本书叫《道法自然》，内容略记得一二，但我最欣赏的是它的书名。软件设计没什么太神秘有东西，只要用心体会，其实一切都很自然。软件的设计之“道”，也不在于设计有多么的华丽、精巧，而在于其朴实、自然，最终达到“以无招胜有招”，进入一个全新的境界。<br><br>一、软件设计理论的层次<br>&nbsp;&nbsp;<a href='http://www.cnblogs.com/watsonyin/archive/2007/06/26/796066.html'>阅读全文</a><img src ="http://www.cnblogs.com/watsonyin/aggbug/796066.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41938/" target="_blank">[新闻]新学年开始 大学生适用的十大互联网应用</a>]]></description></item><item><title>影像纠正配准功能的开发</title><link>http://www.cnblogs.com/watsonyin/archive/2007/04/29/700717.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Sun, 29 Apr 2007 06:59:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/04/29/700717.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/700717.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/04/29/700717.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/700717.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/700717.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将近两年前，我开发了一个影像纠正配准功能，可以说是本人开发的软件中为数不多的具有一定挑战性的功能，不记下来实在有点可惜，所以现在凭借有限的记忆作一个记录吧。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当时公司正在为某城市做一个土地利用调查的项目，采用的比例尺是1/5000，数据的建库、生产与管理软件均由我单位提供。生产工艺流程：航摄-&gt;生产分幅影像-&gt;影像打印成分幅图件-&gt;现场调查、在图件上线划标记-&gt;扫描图件-&gt;图件纠正与镶嵌-&gt;在GIS中线划接边（下面步骤略）。当时感觉这几个步骤挺傻的，外业人员直接带上笔记本电脑、装好GIS系统、套上幅影像，边调查边线划不就得了吗？打印费都可以省几百万啊。当然，这个我们也管不了，但其中&#8220;图件纠正与镶嵌&#8221;功能是我们软件中所没有的，必须进行开发。这个功能我当时开发了两个版本，第一个是用VB+MO开发的，第二个是是Delphi开发的，不需要GIS平台。其实两件版本的操作都挺方便的，主要是因为VB的图像操作功能比较弱，什么都要用API，当时只能整体纠正，有些地方精度达不到要求；第二版本采用了逐格网纠正，精度很高，下面只介绍第二个版本。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先当然是要弄清楚究竟是要做什么。由于接手时，经验很少，这个问题真难住了我几天，后来慢慢学习体会，总结下来大概有以下几个功能点：一、对影像进行纠正，消除图像在打印和扫描过程中产生的变形。二、以纠正后的结果进行裁切，只留下内图幅范围所需要内容；三、为影像生成坐标文件，以方便加载到地图中。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于影像的纠正，实际上是根据选定的公式，对图片每一个像素点进行转换，放到目标图片相应的位置上，或者反过来，遍历目标图片的像素点，根据公式，计算它对应在原始图片的哪个位置上，然后取得灰度值 。显然第二种方法比较理想，不会产生空白区域。我最后选择的是第二种方法。由于是按公式进行转换，对应到原始图像上时，不一定是整数，在计算灰度值的时候，可以先择一定的方法，例如取最邻近的像素点，或按一些方法进行计算。我最后提供了最邻近法与双线性内插法两种计算灰度的方法。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;影像纠正最重要的一点还是转换公式的选择。&nbsp;有很多公式可以选择，如仿射变换、双线性变换、二次多项式法、三次多项式法等。但公式所需参数是公式的参数需要计算的，越复杂的公式，精度会越高，但计算的难度越大。由于项目很紧，对于高次幂的公式，我也实在算不过来，最后选择一个精度不错，复杂度不高的算法：双线性变换法，公式为：X = axy + bx +cy + d&nbsp;&nbsp;&nbsp; Y = exy + fx + gy + h需要八参数，正好四组控制点可以搞定。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;至于裁切和生成坐标文件，不再详述。看看以前写的帮助文件吧，太懒了，哈哈~<br><br></p>
<p class=MsoNormal style="LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">推荐按照以下步骤来进行影像的纠正配准操作。</span><span lang=EN-US style="FONT-SIZE: 12pt"><o:p> </o:p></span></p>
<p class=MsoNormal style="LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第一步：打开要纠正的影像图</span><span lang=EN-US style="FONT-SIZE: 12pt"><o:p> <br></o:p></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第二步：在图像上定位内图廓的四个角点　<br></span><span lang=EN-US style="FONT-SIZE: 12pt; mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">影像图打开后，首先需要定位内图廓的四个角点在影像上的位置。第二步到第四步是配准的过程。这个过程要做的事情实际上就是将所有可以用于参与纠正的控制点找出来，并确定这些控制点在图像上的位置以及它们真实的地图坐标。</span><span lang=EN-US style="FONT-SIZE: 12pt"><o:p> </o:p></span></p>
<p class=MsoNormal style="LINE-HEIGHT: 150%"><span lang=EN-US style="FONT-SIZE: 12pt; mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">控制点配准的操作方法：</span><span lang=EN-US style="FONT-SIZE: 12pt"><o:p> </o:p></span></strong></p>
<p class=MsoNormal style="MARGIN-LEFT: 42.75pt; TEXT-INDENT: -21.75pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo8; tab-stops: list 42.75pt"><strong><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">１、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">鼠标靠近要配准的控制点，鼠标形状会由箭头形状</span><span lang=EN-US style="FONT-SIZE: 12pt"><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"> <img height=17 alt="" src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/影像纠正/02.jpg" width=16 border=0><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></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变成十字丝中间有小矩形的形状<img height=22 alt="" src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/影像纠正/03.jpg" width=23 border=0></span><span lang=EN-US style="FONT-SIZE: 12pt"></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这表示系统捕捉到了该控制点。</span><strong><span lang=EN-US style="FONT-SIZE: 12pt"><o:p> </o:p></span></strong></p>
<p class=MsoNormal style="MARGIN-LEFT: 42.75pt; TEXT-INDENT: -21.75pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo8; tab-stops: list 42.75pt"><strong><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">２、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点击控制点，鼠标形状会变成十字丝中间有圆形的形状<img height=25 alt="" src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/影像纠正/04.jpg" width=26 border=0></span><span lang=EN-US style="FONT-SIZE: 12pt"></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。这表示确定对该点进行配准。这里，在图像点任一处点击，该点都会移动到点击的位置。为了使用控制点能精确定位到每个像素，可以点击鼠标右键打开辅助窗口，如下图所示：</span><strong><span lang=EN-US style="FONT-SIZE: 12pt"><o:p> </o:p></span></strong></p>
<p class=MsoNormal style="MARGIN-LEFT: 42pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><strong><span lang=EN-US style="FONT-SIZE: 12pt"><o:p><img height=221 alt="" src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/影像纠正/01.jpg" width=221 border=0>&nbsp;</o:p></span></strong></p>
<p class=MsoNormal style="MARGIN-LEFT: 42pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果正确配准的话，辅助窗口中会用十字丝标识出正在配准的点的位置。辅助窗口打开时是以鼠标右键点击位置为中心的，所以，鼠标右击的位置最好离正在配准的点的位置比较近。这时，可以通过</span><span lang=EN-US style="FONT-SIZE: 12pt">AWDS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">四个键或方向键对辅助窗口中的图像进行移动。在辅助窗口中点击控制点的位置，该点就配置成功了，这里，标识该点的十字丝会变成白色。</span><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></p>
<p class=MsoNormal style="LINE-HEIGHT: 150%"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第三步：设置图幅信息</span></p>
<p class=MsoNormal style="LINE-HEIGHT: 150%"><span lang=EN-US style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点击&#8220;纠正&#8221;菜单下的&#8220;设置图幅信息&#8221;。<br></span></p>
<p class=MsoNormal style="LINE-HEIGHT: 150%"><span lang=EN-US style="mso-tab-count: 1"><o:p>
<div align=center src_cetemp="/images/cnblogs_com/watsonyin/影像纠正/08.jpg"><img height=301 alt="" src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/影像纠正/08.jpg" width=459 border=0></div>
&nbsp;</o:p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">经过第二步，已经知道了内图廓的影像坐标，但还不知道它们的地理坐标。设置图幅信息，首要目的就是为了确定图幅的地图坐标范围。这样，影像坐标就和地图坐标建立起了一个整体的对应关系。然后系统计算出该图幅内包含的控制点的地理坐标，并通过建立的对应关系，确定它们在影像上的位置。这样，就建立起了一个网状分布控制点格网。</span>
<p>&nbsp;</p>
<p class=MsoNormal style="LINE-HEIGHT: 150%"><span lang=EN-US style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如下图所示。</span></p>
<p class=MsoNormal style="LINE-HEIGHT: 150%" align=center><span lang=EN-US><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><img height=442 alt="" src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/影像纠正/06.jpg" width=554 border=0><br></span></p>
<p class=MsoNormal style="LINE-HEIGHT: 150%" align=center><span lang=EN-US style="FONT-SIZE: 12pt"></span></p>
<p class=MsoToc1 style="LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置图幅后，系统自动建立的控制点格网<br>第四步：配准所有控制点　</span><span lang=EN-US style="FONT-SIZE: 12pt"><o:p> </o:p></span></p>
<p class=MsoNormal style="LINE-HEIGHT: 150%"><span lang=EN-US style="FONT-SIZE: 12pt; mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配准的方法与第二步相同。通过这步操作，所有控制点的就建立了一个精确的地图坐标和影像坐标的对应关系。坐标点在配准之前，以红色显示，配准完成的以白色显示。</span></p>
<p class=MsoNormal style="LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第五步：纠正</span><span lang=EN-US style="FONT-SIZE: 12pt"><o:p></o:p></span>&nbsp; <br><span><br>&#8220;裁切范围&#8221;的显示数据为系统根据所输入的图幅号计算得出，<strong>默认是图幅四个角点构成的多边形的最小外接矩形</strong>。勾选&#8220;启用载切&#8221;对图幅外的周边进行载切，纠正后的图像文件只包启该范围中的内容；如不勾行选，则不进行裁切，纠正的结果会包含整幅图的内容。</span><span> </span></p>
<p><span>单击&#8220;纠正&#8221;按扭，进度条显示纠正进度（见图</span><span>22</span><span>）</span><span> </span></p>
<p align=center><span>&nbsp;<img height=240 alt="" src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/影像纠正/07.jpg" width=475 border=0><o:p> </o:p></span></p>
<p align=center><span>（图</span><span>22</span><span>）</span><span> </span></p>
<p><strong><span>纠正时，系统会自动保存内图廓在影像上的位置，下次打开影像时，会自动以该位置作为默认的内图廓位置。</span><span>&nbsp;</span></strong></p>
<p><strong><span>纠正完毕后，会包含两个文件，一个是纠正后的影像文件，一个是定位文件，</span><span>tfw</span><span>格式。</span></strong><span> <br></span></p>
<p class=MsoNormal style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%">整体纠正：如果进行整体纠正，第四步可以省略。<br><br>----------------------------------------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;记得偶刚准备开发的时候，我也是一头雾水，很多概念都搞不清。我先把这个功能交给部门里另一个同事，这个同事刚进公司不久，硬是把他给吓跑了(辞职)，呵呵。没办法，只好自己动手。当时我们的一个合作伙伴也想开发这玩艺儿，组织了一个团队进行开发，开发了一段时间，影子也没见着，就停工了。这些是插曲。其实开发完毕后，觉得并不是很难，算法上也还可以进一步改进。只是没以接触过的人，做起来真的很痛苦，就像蚕蛹破茧成蝶，是不断挣扎的过程，使上全身的力气，才能慢慢的展开翅膀，达到成功。<br><br><em>写得乱七八糟，主要因为不能静下心来写，要做的事情还很多啊。</em></p><img src ="http://www.cnblogs.com/watsonyin/aggbug/700717.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41937/" target="_blank">[新闻]Google拟在9月发布自有浏览器 或采用火狐内核</a>]]></description></item><item><title>很精彩的《乳赋》,作者是陈独秀，真想不到~</title><link>http://www.cnblogs.com/watsonyin/archive/2007/04/02/696534.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Mon, 02 Apr 2007 01:14:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/04/02/696534.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/696534.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/04/02/696534.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/696534.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/696534.html</trackback:ping><description><![CDATA[乳赋<br>-陈独秀<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 乳者，奶也。妇人胸前之物，其数为二，左右称之。发与豆蔻，成于二八。白昼伏蜇，夜展光华。曰咪咪，曰波波，曰双峰，曰花房。从来美人必争地，自古英雄温柔乡。其色若何？深冬冰雪。其质若何？初夏新棉。其味若何？三春桃李。其态若何？秋波滟滟。动时如兢兢玉兔，静时如慵慵白鸽。高颠颠，肉颤颤，粉嫩嫩，水灵灵。夺男人魂魄，发女子骚情。俯我憔悴首，探你双玉峰，一如船入港，犹如老还乡。除却一身寒风冷雨，投入万丈温暖海洋。深含，浅荡，沉醉，飞翔。<img src ="http://www.cnblogs.com/watsonyin/aggbug/696534.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41936/" target="_blank">[新闻]微软正在构思将Wi-Fi带入汽车</a>]]></description></item><item><title>我收藏的幽默与笑话</title><link>http://www.cnblogs.com/watsonyin/archive/2007/04/02/696528.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Mon, 02 Apr 2007 01:08:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/04/02/696528.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/696528.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/04/02/696528.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/696528.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/696528.html</trackback:ping><description><![CDATA[摘要: 1、某男看到一则广告：不开刀、不住院、让你的生殖器轻轻松松变大变粗！顿大喜，立即汇款。数日，收到邮包，急切地打开一看！！原来是一放大镜！2、牧师问一对夫妇：如果五分钟后就到世界末日，你们想做什么事？丈夫兴致勃勃地回答：想做爱。太太白他一眼幽幽地说：那剩下的四分钟干什么？　　　　　　3、俩屎壳螂讨论福利彩票，甲说:我要中了大奖就把方圆50里的厕所都买下来，每天吃个够！乙说:你丫太俗了！我要是中了大奖&nbsp;&nbsp;<a href='http://www.cnblogs.com/watsonyin/archive/2007/04/02/696528.html'>阅读全文</a><img src ="http://www.cnblogs.com/watsonyin/aggbug/696528.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41936/" target="_blank">[新闻]微软正在构思将Wi-Fi带入汽车</a>]]></description></item><item><title>DevExpress xtraTabbedMdiManager控件双击关闭MDI标签页</title><link>http://www.cnblogs.com/watsonyin/archive/2007/03/14/673989.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Wed, 14 Mar 2007 01:41:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/03/14/673989.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/673989.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/03/14/673989.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/673989.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/673989.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DevExpress .net组件包中，有一个组件是xtraTabbedMdiManager，可以将MDI窗口显示为TabControl的样式，可以说非常实用。可惜的是，关闭标签页（即子MdiChild)不能通过双击来实现，这对于用惯了傲游等软件的朋友来说，有点不习惯。查看xtraTabbedMdiManager的事件，只有MouseDown,MouseUp等，并没有DoubleClick，好不爽。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其实，转换一下思路，我们可以将连续的两次MouseDown事件模拟成一个双击事件，就可以解决上面的问题了，真是一点就破，技术上没有什么难度，且看代码吧：<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">通过MouseDown事件模拟双击关闭标签页</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;DateTime&nbsp;m_LastClick&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;System.DateTime.Now;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;xtraTabbedMdiManager1_MouseDown(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;MouseEventArgs&nbsp;e)<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">if</span><span style="COLOR: #000000">&nbsp;(e.Button&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;MouseButtons.Left)<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;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;dt&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;DateTime.Now;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TimeSpan&nbsp;span&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dt.Subtract(m_LastClick);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(span.TotalMilliseconds&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">300</span><span style="COLOR: #000000">)&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果两次点击的时间间隔小于300毫秒，则认为是双击</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.MdiChildren.Length&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ActiveMdiChild&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;m_MapForm)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ActiveMdiChild.Close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_LastClick&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dt.AddMinutes(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&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;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_LastClick&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dt;<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">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(e.Button&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;MouseButtons.Right)<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;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">弹出右键菜单</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ActiveMdiChild&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;m_MapForm)<br>&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;POINTAPI&nbsp;pt&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;POINTAPI();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetCursorPos(</span><span style="COLOR: #0000ff">ref</span><span style="COLOR: #000000">&nbsp;pt);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Drawing.Point&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;System.Drawing.Point(pt.x,&nbsp;pt.y);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popMenuCloseTab.ShowPopup(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.barManager1,&nbsp;p);<br>&nbsp;&nbsp;&nbsp;&nbsp;&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;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;mnuCloseTab_ItemClick(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;DevExpress.XtraBars.ItemClickEventArgs&nbsp;e)<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">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ActiveMdiChild&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;m_MapForm)<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;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ActiveMdiChild.Close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br>在这里，我们认为如果两次点击时间间隔小于300毫秒，就认为是双击。注意，m_LastClick&nbsp;<span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dt.AddMinutes(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)，这一行代码的作用是，表示双击完成，避免点击三次认为是双击了两次。<br></span><br>上面的代码还提供了点击右链弹出菜单功能。可以在右键菜单中加入你要的功能。<img src ="http://www.cnblogs.com/watsonyin/aggbug/673989.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41935/" target="_blank">[新闻]对比测试：IE8 Beta 2 VS Firefox 3.0.1</a>]]></description></item><item><title>哲学与真理 我的苦恼</title><link>http://www.cnblogs.com/watsonyin/archive/2007/03/07/666920.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Wed, 07 Mar 2007 08:04:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/03/07/666920.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/666920.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/03/07/666920.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/666920.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/666920.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中国的儒学，以我的浅见，大部分内容是教我们如何做人，如何在社会上立足，如果取得成功。这部分内容，我觉得还称不上是真正的哲学，起码与西方的哲学不是一回事。这些不过是对人性的思考和领悟。例如孔子主张&#8220;慎言&#8221;，待人处事要&#8220;如临深渊，如履薄冰&#8221;(论述见《于丹论语心得》)，其实不过是教我们圆滑，教我们明哲保身，可是这样的生活，人性处处受到压制，个性得不到发挥，活着有什么意思呢？</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;然而有些人认为这样过很有乐趣，我凭什么说这样生活没有意思？孔子不是做到了&#8220;从心所欲&#8221;吗？我又凭什么说人性受到压制呢？</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;真是苦恼。人家说真理越辩越明，对我而言，却是越辩糊涂。这世界上可能没有什么绝对的真理。大家都说，&#8220;实践是检验真理的唯一标准&#8221;，而这些实践，也不过是在一定的时间和空间范围内的人的活动而已，凭什么认为它放之宇宙而皆准呢？</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果真理不存在，我们活着又是为了什么，不就是为了追求真理吗？否则只能是活得稀里糊涂，还有什么意义？</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有些人又要说话了，我活着不是为了追求什么真理，而不过是一天三顿饱饭，有老婆孩子，我就觉得很有意义了，也很有乐趣。我倒。我又不知道如何回答。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;也许绝对的真理就是，没有适合所有人的真理，只有适合自己的真理。按自己的想法来过，心安理得就可以了。什么这个哲学家，那个思想家，也不过只是他们自己个人的思想而已，想用来蒙所有人，没门~<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有时真觉得自己像个无头的苍蝇，什么问题也想不清楚。我只想清楚地给自己一个活着的理由，竟不能。无论是哪个理由，似乎都是可笑的，是简陋的，禁不起推敲。难怪孔子七十岁才能做到&#8220;从心所欲&#8221;，我这一辈子，看来只能稀里糊涂的过了。<br><br></p><img src ="http://www.cnblogs.com/watsonyin/aggbug/666920.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41934/" target="_blank">[新闻]iPhone存在严重密码安全漏洞</a>]]></description></item><item><title>体验ArcGIS9.2的历史库功能</title><link>http://www.cnblogs.com/watsonyin/archive/2007/02/09/646066.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Fri, 09 Feb 2007 09:36:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/02/09/646066.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/646066.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/02/09/646066.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/646066.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/646066.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ESRI公司于2006年11月9日全球同步发布了历史上重要的软件版本ArcGIS9.2，在该版本中，主要新增了以下四大功能（ESRI田昌莲）：
<ol>
    <li>第一大新功能：非版本编辑功能。多用户编辑可以在没有版本的情况下进行；
    <li>第二大新功能：版本数据复制功能。为分布式数据同步复制提供了便利；
    <li>第三大新功能：Oracle空间的SQL功能。对Oracle实现的geodatabase的空间sql接口完全支持；
    <li>第四大新功能：增强的Geodatabase。包括以下几点：<br>（1）历史数据库功能<br>（2）对大量的表面数据集有了很在的改变和提高<br>（3）File-Based Geodatabase，突破了Access文件大小2G的限制，相当于增强的Personal Geodatabase。 </li>
</ol>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上面这些新功能，说实话我都很喜欢，有时间真要一个个都体验一下啊。废话少说，我们现在就开始验一下ArcGIS9.2带来的历史库功能吧。<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><span style="FONT-SIZE: 14pt">1、先装ArcGIS9.2 Desktop</span></strong>&nbsp;。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意，要安装9.2，必须先全部卸载掉以前版本的所有软件，包括Desktop，ArcGIS Engine，ArcGIS Server等。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="FONT-SIZE: 14pt">&nbsp;</span><strong><span style="FONT-SIZE: 14pt">2、安装SDE9.2。</span><br></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;之前的版本的SDE是不支持历史库功能的。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你有安装包，没有授权文件，请到这里:<a href="http://www.cnblogs.com/watsonyin/archive/2007/02/09/646031.html">http://www.cnblogs.com/watsonyin/archive/2007/02/09/646031.html</a><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;<span style="FONT-SIZE: 14pt">3、准备数据。</span></strong>这里我导入一个很小的宗地层，用于测试，图层名称是sde.sde.zd。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="FONT-SIZE: 14pt"><strong>4、注册版本</strong>。</span>打开ArcCatalog，新建一个到默认版本的连接，然后选择该图层，点击右键，在弹出菜单中点击Register As Versioned，这一点与9.1版本中一样的，只有注册版本，才能进行下一步创&#8220;建历史库&#8221;<br><br><span style="FONT-SIZE: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>5、创建历史库</strong>。</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在ArcCatalog中选择该图层，点击右键，发现其中比9.1多了一项Archiving，包含两个子菜单，Enable Archiving和Disable Archiving。点击Enable Archiving，这时系统会自动为该图层创建一个对应的历史图层，历史图层的名称为SDE.SDE.ZD_H。我们在ArcCatalog中并不能看到该图层，这是因为它作了过滤的缘故。如果用ArcGIS9.1软件其它机器连接该数据，可以看到该图层其实与普通图层没什么两样。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建好的历史图层的数据是原图层的拷贝，但可以看到多了三个字段：GDB_FROM_DATE，GDB_TO_DATE，GDB_ARCHIVE_OID。看到这三个字段，马上就明白了其大致思路，前面两个字段际是指明了图形对象的存活时间，GDB_FROM_DATE即图形的创建时间，GDB_TO_DATE是图形的删除或修改时间。这与我以前用MO做历史库的思路如出一辙啊。图形的操作可分为增、删、改三种类型，修改又可以看成是先删除再新增一个图形对象，所以所有的操作又可归为增、删两种操作，这就是那两个字段的由来。至于GDB_ARCHIVE_OID，就不有解释了吧。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong style="FONT-SIZE: 14pt">6、启用历史编辑选项<br></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在ArcCatalog中，点击Tools菜单下的Options，在&#8220;选项&#8221;窗口中，切换到Geoprocessing页，选中Log geoprocessing operations to as historical model，如下图所示，这样我们在编辑图形时，编辑过程中产生的历史数据会自动记录到历史图层中。<br>
<div align=center src_cetemp="/images/cnblogs_com/watsonyin/9201.jpg"><img height=170 alt="" src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/9201.jpg" width=431 border=0></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong> 7、编辑图形</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面我们可以进行编辑测试了。打开ArcMap，选择图层，断断续续的作一些编辑操作，以方便后面的体验。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong> 8、新建一个到历史数据库的连接<br></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在ArcCatalog或ArcMap的选择数据对话框中都可以完成。点击Add Spatail Database Connection，在新建连接窗口中点击Change按钮，会弹出如下窗口：
<div align=center src_cetemp="/images/cnblogs_com/watsonyin/9201-2.jpg"><img src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/9201-2.jpg" border=0></div>
<div align=left src_cetemp="/images/cnblogs_com/watsonyin/9205.jpg"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们选择The&nbsp;connection refers to a historical version，并选择是连接到历史标记还是指定一个时间点。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;9、历史数据浏览<br></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是我们体验过程的关键方旅~<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;连接建好了之后，在ArcMap我们用该连接打开数据sde.sde.zd。在ArcMap工具栏上点击右键，点击Geodabase History，会出现历史库工具条，如图<img height=22 alt="" src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/9208.jpg" width=74 border=0><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;该工具条有三个按钮，分别是：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（1）Geodatabase History Viewer：即历史数据浏览工具。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（2）Add Historical Archive：即添加历史图层到地图上。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （3）Historical Marker Manager：即历史标记管理器。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面分别介绍这三个工具：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>9.1&nbsp;Add Historical Archive</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;先在TOC中选中一个图层，再点击该工具按钮，会将选中图层对应的历史图层添加到地图窗口中。可以看到，历史图层包括了编辑过程中产生的所有数据。查看属性，可以看到它的数据源为sde.SDE.ZD_H，还可以到字段列表中查看新增的字段情况。这人工具的作用并不是很大，因为我们浏览历史数据，并不需要添加历史图层，直接对现状图层进行操作就可以了。当然，通过编程扩展，历史图层可以发挥很大的作用，例如，可以通过属性过滤，查看某个历史时段，而不是某个时点内的数据情况。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>9.2 Historical Marker Manager</strong></div>
<div align=left src_cetemp="/images/cnblogs_com/watsonyin/9205.jpg"><strong></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所谓历史标记，其实就是对某一历史时点的文字描述，这样比单纯的看历史时间，更加容易理解，从而更加方便历史数据的浏览。在例子里，我创建了三个历史标签，分别是&#8220;初始状态&#8221;，&#8220;新建AB&#8221;，&#8220;删除A移动B&#8221;，这样就会一目了然。<br>
<div align=center src_cetemp="/images/cnblogs_com/watsonyin/9207.jpg"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/9207.jpg" border=0></div>
<br></div>
<div align=left src_cetemp="/images/cnblogs_com/watsonyin/9205.jpg"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9.3 Geodatabase History Viewer<br></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;点击它，会出现以下界面。如果你是用是历史连接添加数据，这个界面会处于不可用的状态。<br>&nbsp; </div>
<div align=center src_cetemp="/images/cnblogs_com/watsonyin/9205.jpg"><img height=419 alt="" src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/9205.jpg" width=316 border=0></div>
<div align=left src_cetemp="/images/cnblogs_com/watsonyin/9205.jpg"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Historical Date and Time中，可以选择一个历史标记，也可以选择一个具体的时间，点击Apply按钮，就可以查看该历史时点的数据了。其它的我想不用解释，看一下在不同历史时点的图形状况吧。<br></div>
<div align=center src_cetemp="/images/cnblogs_com/watsonyin/9202.jpg"><img src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/9202.jpg" border=0><br></div>
<div align=center src_cetemp="/images/cnblogs_com/watsonyin/9205.jpg">（时间：16:20:09 初始状态）<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/9203.jpg" border=0><br>（时间：16:22:50 创建图形A、B）<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/watsonyin/9204.jpg" border=0><br>（时间：16:26:06 删除图形A、移动B）<br></div>
<p align=center src_cetemp="/images/cnblogs_com/watsonyin/9205.jpg">
<p align=left src_cetemp="/images/cnblogs_com/watsonyin/9205.jpg">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过这种方式，就可以轻松浏览任一历史时间的数据了。通过编程，我们还可以进行扩展，例如不同历史时刻的数据对比浏览等。<br></p>
<div align=left src_cetemp="/images/cnblogs_com/watsonyin/9205.jpg"><br><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;<em>&nbsp;&nbsp;&nbsp; 终于在放假之前完成了这篇随笔，否则，我可能不会写它了，就像之前一直想写多线程的文章一样，到现在也没写呀。祝大家开开心心过个好年~</em></div>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/watsonyin/aggbug/646066.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41931/" target="_blank">[新闻]GC2008：星际争霸2进程报告 微调进程延续</a>]]></description></item><item><title>ArcGIS9.2的授权文件</title><link>http://www.cnblogs.com/watsonyin/archive/2007/02/09/646031.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Fri, 09 Feb 2007 07:29:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/02/09/646031.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/646031.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/02/09/646031.html#Feedback</comments><slash:comments>24</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/646031.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/646031.html</trackback:ping><description><![CDATA[<p><br>&nbsp;&nbsp;&nbsp;ArcGIS9.2 Desktop， <a href="http://www.cnblogs.com/Files/watsonyin/CRArcGIS92.rar">点击下载CRArcGIS92.rar(540k)</a>&nbsp;&nbsp;<br><br>&nbsp;&nbsp; ArcSDE9.2&nbsp; <a href="http://www.cnblogs.com/Files/watsonyin/serverv92.rar">点击下载serverv92.rar</a> <br>
<p>&nbsp;&nbsp; 以上内容来自网上，希望对大家有用<br><br>&nbsp;&nbsp; 哪位能不能提供一下AE9.2的授权文件呀，小弟急用！</p><img src ="http://www.cnblogs.com/watsonyin/aggbug/646031.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41931/" target="_blank">[新闻]GC2008：星际争霸2进程报告 微调进程延续</a>]]></description></item><item><title>为什么我不会玩游戏</title><link>http://www.cnblogs.com/watsonyin/archive/2007/02/06/641685.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Tue, 06 Feb 2007 02:08:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/02/06/641685.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/641685.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/02/06/641685.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/641685.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/641685.html</trackback:ping><description><![CDATA[<div style="line_height: 20px">
<p style="FONT-SIZE: 12pt"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也许我真的太笨，连游戏也不会。</p>
<p style="FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我有时也会玩游戏，诸如拳皇这类打斗类型的游戏，我还是可以的，可是现在并不流行。当下流下的网络游戏，本人碰也不敢碰，觉得太复杂，比设计软件、编写代码复杂多了，甚至比编写这样的一个游戏还要复杂。</p>
<p style="FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 中国人自古以来，就喜欢玩游戏，很多人玩起来游刃有余，乐在其中。可是我不行，跟那些人在一起玩，我总是显得如此的笨拙。不会玩游戏是一件很郁闷的事情，就好比一头蛮牛闯入了五行八卦阵，碰到头破血流，还是找不着北。</p>
<p style="FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 有时我怀疑自己的智商是不是有问题，我就偿试让自己变得聪明起来。可是没有用，我看到了任何东西，在我的游戏里，都是代码、模块、组件，而我根本玩不转这些代码组件，反倒被折腾团团转。</p>
<p style="FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 看别人玩得多了，我现在明白了，要想玩好游戏，必须有一双好的眼睛，上下左右远近都能看得清楚，牛鬼蛇神辨得分明。我的眼睛读书时给弄坏了，所以我准备配一副眼镜。我找到一些眼睛好的朋友，问在哪里可以配到这样的眼镜，他们告诉我只能自己配。所以我打算就像写代码一样，精心为自己打造一副，以免在游戏里，一不小心被人砍死，进了地狱，还不知是谁把我送来的呀。</p>
</div>
<img src ="http://www.cnblogs.com/watsonyin/aggbug/641685.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41930/" target="_blank">[新闻]科学家在世界最大对撞机中观察到首批粒子</a>]]></description></item><item><title>Windows WorkFlow Foundation入门（六）- 编译工作流</title><link>http://www.cnblogs.com/watsonyin/archive/2007/01/23/627951.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Tue, 23 Jan 2007 06:41:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/01/23/627951.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/627951.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/01/23/627951.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/627951.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/627951.html</trackback:ping><description><![CDATA[<p><br><strong style="FONT-SIZE: 14pt">编译工作流</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;工作流可以通过以下三种方式被创建：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过工作流markup文件，使用工作流markup，该文件的后缀为.xoml。通过宿主程序，把该文件传入给工作流运行时引擎，这种方式被称为&#8220;无代码工作流创建&#8221;，这种方式下，工作流不需要编译。被创建的文件名WorkflowSample.xoml（举例）<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;另一种方式是，markup文件用来声明工作流，然后与包含逻辑实现的代码一起被编译。这种方式被称为&#8220;代码分离工作流创建&#8221;。被创建的文件名为：WorkflowSample.xoml 和WorkflowSample.xoml.cs<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在代码文件中使用WF对象模型。这种方式称为&#8220;仅代码工作流创建&#8221;。被创建的文件名为：WorkflowSample.cs 和 WorkflowSample.Designer.cs，这些文件会被编译。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当工作流被编译时，会执行以下过程：</p>
<ul>
    <li>验证工作流活动是否符合为该活动设置的规则，如果验证产生错误，编译器会返回一个错误列表；
    <li>据传入到编译器中的标记（markup）定义，创建一个partial类；
    <li>从标记文件产生的partial类和人代码文件产生的partial类，被送入到.net编译器，这个过程的输出结果就是一个.net 程序集。文件名如：WorkflowSample.dll，可以被部署运行工作流了。<br>&nbsp; </li>
</ul>
<p>&nbsp;<strong style="FONT-SIZE: 14pt">在命令行中使用wfc.exe</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WF提供了命令行方式的工作流编译器，即wfc.exe。WF同样提供一系列的支持工作流编译公共类型，可以用来开发自定义的工作流编译器。这些公共类型也是wfc.exe所用来的类型。你可以通过WorkflowCompiler类来创建一个自定义的编译器。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你还可以使用WorkflowCompiler类来编译工作流，例如：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">WorkflowCompiler&nbsp;compiler&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;WorkflowCompiler();&nbsp;<br>WorkflowCompilerParameters&nbsp;param&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;WorkflowCompilerParameters();&nbsp;<br>compiler.Compile(param,&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">[]&nbsp;{&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MainWorkflow.xoml</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;});</span></div>
<p><strong style="FONT-SIZE: 14pt">wfc.exe编译选项<br><br></strong>&nbsp;&nbsp;&nbsp;wfc命令行的选项如下&nbsp;<br>Microsoft (R) Windows Workflow Compiler version 3.0.0.0 <br>Copyright (C) Microsoft Corporation 2005. All rights reserved. <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows Workflow Compiler Options <br>&nbsp;<br>wfc.exe &lt;XAML file&gt; /target:codegen [/language:...] <br>wfc.exe &lt;XAML file list&gt; /target:assembly [&lt;vb/cs file list&gt;] [/language:...] <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [/out:...] [/reference:...] [/library:...] [/debug:...] [/nocode:...] [/checktypes:...] <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - OUTPUT FILE - <br>/out:&lt;file&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Output file name <br>/target:assembly&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Build a Windows Workflow assembly (default). <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Short form: /t:assembly <br>/target:exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Build a Windows Workflow application. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Short form: /t:exe <br>/target:codegen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Generate partial class definition. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Short form: /t:codegen <br>/delaysign[+|-]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Delay-sign the assembly using only the public portion <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; of the strong name key. <br>/keyfile:&lt;file&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Specifies a strong name key file. <br>/keycontainer:&lt;string&gt;&nbsp; Specifies a strong name key container. <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - INPUT FILES - <br>&lt;XAML file list&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XAML source file name(s). <br>&lt;vb/cs file list&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Code file name(s). <br>/reference:&lt;file list&gt;&nbsp; Reference metadata from the specified assembly file(s). <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Short form is '/r:'. <br>/library:&lt;path list&gt;&nbsp;&nbsp;&nbsp; Set of directories where to lookup for the references. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Short form is '/lib:'. <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - CODE GENERATION - <br>/debug[+|-]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Emit full debugging information. The default is '+'. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Short form is '/d:'. <br>/nocode[+|-]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Disallow code-separation and code-within models. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The default is '-'. Short form is '/nc:'. <br>/checktypes[+|-]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Check for permitted types in wfc.exe.config file. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The default is '-'. Short form is '/ct:'. <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - LANGUAGE - <br>/language:[cs|vb]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The language to use for the generated class. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The default is 'CS' (C#). Short form is '/l:'. <br>/rootnamespace:&lt;string&gt; Specifies the root Namespace for all type declarations. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Valid only for 'VB' (Visual Basic) language. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Short form is '/rns:'. <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - MISCELLANEOUS - <br>/help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Display this usage message. Short form is '/?'. <br>/nologo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Suppress compiler copyright message. Short form is '/n'. <br>/nowarn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ignore compiler warnings. Short form is '/w'.&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/watsonyin/aggbug/627951.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41929/" target="_blank">[新闻]阿里巴巴利润增1.36倍</a>]]></description></item><item><title>Windows WorkFlow Foundation入门（五）</title><link>http://www.cnblogs.com/watsonyin/archive/2007/01/23/627933.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Tue, 23 Jan 2007 06:30:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/01/23/627933.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/627933.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/01/23/627933.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/627933.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/627933.html</trackback:ping><description><![CDATA[<p><strong style="FONT-SIZE: 14pt"><br>WF中的错误处理</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WF中的错误是以异步的方式来处理的。在活动中显式或隐式的抛出异常后，工作流运行时引擎会将捕捉到的异常先保存到队列中，在之后的时间再进行处理。这与一般的异常处理方式不同在于，如果一个异常在try{}语句块中被抛出，在相应的catch{}语句块中无法截获该错误，同时该错误也不会立即抛出给用户。</p>
<p><strong>&nbsp;异常的起因<br><br></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以下几种情况可能会产生异常</p>
<ul>
    <li>原子事务超时
    <li>其它类型的事务失败
    <li>宿主程序通过ThrowActivity抛出异常
    <li>用户代码错误。当工作流调用外部的用户代码时，CLR类可能会抛出异常，如果这种异常在用户代码中没有被处理，它们最终会以工作流异常的的表式出现。
    <li>其它类型的系统异常，例如保存失败，.net或系统异常，或数据转换错误等 </li>
</ul>
<p><strong>异常捕获</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;错误处理中，如果抛出异常的活动不能处理它，异常会被转交到它的上一级活动处理，直到它被处理为止，否则的话，工作流实例就会被工作流运行时引擎终止。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;错误处理是由FaultHandlerActivity活动来完成的。每个FaultHandlerActivity活动都与一个.net异常类型相关联，并且它包含一系列的活动，如果错误类型与某个FaultHandlerActivity关联的错误类型匹配的话，就会执行为个FaultHandlerActivity活动。一个FaultHandlersActivity活动包含0-n个FaultHandlersActivity子活动，FaultHandlersActivity可以是任何复合活动的子活动。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WF中的错误处理通常被视为一个反向的工作，因为它的目标是当异常发生时，撤销活动中不成功的部分的工作。FaultHandlerActivity的执行完成不能被认为是事务活动的成功完成。事务活动会先被设置成错误状态，然后是关闭状态。任何兄弟活动同样会被取消。同时，compensation也会成为不可用状态。</p>
<p><br><strong style="FONT-SIZE: 14pt">在工作流中使用Compensation(下面译为补偿)</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WF中对于已完成事务的补偿模式，是对工作流中出现的异常进行处理的过程，并且会在逻辑上撤销已完成的事务。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WF补偿有以下两种形式：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当异常没有被处理的时候，系统隐式的补偿；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用Compensate活动进行显式的补偿。</p>
<p><br><span style="FONT-SIZE: 14pt"><strong style="FONT-SIZE: 14pt">在工作流中使用动态更新</strong></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;动态更新使得我们可以在工作流实例运行的时候对它做出改变。做这些改变，可能是由于设计时候的疏忽，或者是属性的改变，活动的绑定，或者是业务逻辑得到了加强和完善。如果你需要整个改变工作流，动态更新并不适用，否则会导致工作流与最初的设计原则完全不同。在这种情况下，你应该设计一个新的工作流。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;动态更新适用于工作流的单个实例。如果已经有工作流实例运行，不能对工作流中的进行类型的改变。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你可以使用动态更新来干面的事情：<br></p>
<ul>
    <li>改变正在运行的工作流实例；&nbsp;
    <li>改变运行时行为；&nbsp;
    <li>改变工作流结构，例如，添加或移除一个活动；&nbsp;
    <li>改变流程控制；&nbsp;
    <li>为对一个已经存在的活动定义一个新的条件；&nbsp;
    <li>改变一个PolicyActivity的RuleSet；&nbsp;
    <li>如果在工作流在已经部署和运行后， 需要在工作流中增加一个新的业务过程，可以通过添加一个新的自定义活动，或InvokeWorkflowActivity活动来实现；&nbsp;
    <li>添加一个新的EventDrivenActivity来响应一个新的事件，如一个附加的确认步骤； </li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对一个正在运行的工作流进行动态更新，可能会导致两个不同的入口点：一个在工作流代码文件内，一个在工作流外，如工作流宿主程序。</p>
<p><br><strong>工作流中的数据交换</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WF通信服务支持在工作流服务环境内的数据交换，它使得工作流可以以方法和事件的形式，与外部系统通过消息进行通信。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WF通过web serivce通信来实现工作流之间的数据交换。</p>
<p><br>&nbsp;<br><strong style="FONT-SIZE: 14pt">在工作流中使用角色</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WF提供了一种基于角色的访问机制，适用于所有支持数据输入的活动。工作流的创建者有完全的控制权限来创建角色和角色集合。创建者通过这种方式，可以提供一种必要的权限机制，在活动被执行之前，来检测访问者角色的权限。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有一些WF活动，如WebServiceInputActivity，通过其属性就可以取得或设置角色集合。<br>使用活动目录（Active Directory,），可以使得工作流的开发更加容易，WF通过一种被称为out-of-the-box的机制，来创建基于活动目录的角色。请参考MSDN，了解更多关于.net framework和活动目录的安全机制。<br>与角色相关的类有WebWorkflowRole，WorkflowRole，ActiveDirectoryRole等等，在System.Workflow.Activities命名空间中。<br></p>
<img src ="http://www.cnblogs.com/watsonyin/aggbug/627933.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41929/" target="_blank">[新闻]阿里巴巴利润增1.36倍</a>]]></description></item><item><title>Windows WorkFlow Foundation入门（四）-工作流中的异常处理</title><link>http://www.cnblogs.com/watsonyin/archive/2007/01/22/626676.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Mon, 22 Jan 2007 03:48:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/01/22/626676.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/626676.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/01/22/626676.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/626676.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/626676.html</trackback:ping><description><![CDATA[<P><BR><SPAN style="FONT-SIZE: 14pt"><STRONG>WF中的错误处理</STRONG></SPAN><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WF中的错误是以异步的方式来处理的。在活动中显式或隐式的抛出异常后，工作流运行时引擎会将捕捉到的异常先保存到队列中，在之后的时间再进行处理。这与一般的异常处理方式不同在于，如果一个异常在try{}语句块中被抛出，在相应的catch{}语句块中无法截获该错误，同时该错误也不会立即抛出给用户。<BR>&nbsp;&nbsp;&nbsp;<BR><SPAN style="FONT-SIZE: 12pt"><STRONG>异常的起因</STRONG></SPAN><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以下几种情况可能会产生异常<BR><BR>Ø&nbsp;原子事务超时<BR>Ø&nbsp;其它类型的事务失败<BR>Ø&nbsp;宿主程序通过ThrowActivity抛出异常<BR>Ø&nbsp;用户代码错误。当工作流调用外部的用户代码时，CLR类可能会抛出异常，如果这种异常在用户代码中没有被处理，它们最终会以工作流异常的的表式出现。<BR>Ø&nbsp;其它类型的系统异常，例如保存失败，.net或系统异常，或数据转换错误等 </P>
<P><BR><STRONG>错误捕获<BR></STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在错误处理中，如果抛出异常的活动不能处理它，异常会被转交到它的上一级活动处理，直到它被处理为止，否则的话，工作流实例就会被工作流运行时引擎终止。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;错误处理是由FaultHandlerActivity活动来完成的。每个FaultHandlerActivity活动都与一个.net异常类型相关联，并且它包含一系列的活动，如果错误类型与某个FaultHandlerActivity关联的错误类型匹配的话，就会执行为个FaultHandlerActivity活动。一个FaultHandlersActivity活动包含0-n个FaultHandlersActivity子活动，FaultHandlersActivity可以是任何复合活动的子活动。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WF中的错误处理通常被视为一个反向的工作，因为它的目标是当异常发生时，撤销活动中不成功的部分的工作。FaultHandlerActivity的执行完成不能被认为是事务活动的成功完成。事务活动会先被设置成错误状态，然后是关闭状态。任何兄弟活动同样会被取消。同时，compensation也会成为不可用状态。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在工作流中使用Compensation(下面译为补偿)<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WF中对于已完成事务的补偿模式，是对工作流中出现的异常进行处理的过程，并且会在逻辑上撤销已完成的事务。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WF补偿有以下两种形式：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、当异常没有被处理的时候，系统隐式的补偿；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、&nbsp;使用Compensate活动进行显式的补偿。</P>
<P>&nbsp;</P><img src ="http://www.cnblogs.com/watsonyin/aggbug/626676.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41928/" target="_blank">[新闻]Google Gears覆盖四大浏览器 Safari版推出</a>]]></description></item><item><title>Windows WorkFlow Foundation入门（三）</title><link>http://www.cnblogs.com/watsonyin/archive/2007/01/21/626028.html</link><dc:creator>watson</dc:creator><author>watson</author><pubDate>Sun, 21 Jan 2007 04:24:00 GMT</pubDate><guid>http://www.cnblogs.com/watsonyin/archive/2007/01/21/626028.html</guid><wfw:comment>http://www.cnblogs.com/watsonyin/comments/626028.html</wfw:comment><comments>http://www.cnblogs.com/watsonyin/archive/2007/01/21/626028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/watsonyin/comments/commentRss/626028.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/watsonyin/services/trackbacks/626028.html</trackback:ping><description><![CDATA[<p><strong><span>WF</span></strong><strong><span>支持的</span></strong><strong><span>CodeDOM</span></strong><strong><span>类型</span></strong><strong></strong></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WF&nbsp;System.CodeDOM</span><span>。你可使用这些类型来创建你的表达式，其中一些用于条件</span><span>(conditions)</span><span>，一些用于规则</span><span>(actions)</span><span>，还有一些能用于两者。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意：</span><span>CodeDOM不支持一元操作符，也不支持不等操作符，如</span><span>a!=b，你可以换成这样表达：</span><span lang=EN-US>(a==b)==false</span></p>
<p class=MsoNormal style="MARGIN: 5pt 0cm"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp;下表列出了</span><span>WF所支持的</span><span>CodeDOM类型。<o:p></o:p></span></p>
<div align=center>
<table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-table-layout-alt: fixed; mso-border-alt: solid windowtext .25pt; mso-padding-alt: 0cm 0cm 0cm 0cm" cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 0.25pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.25pt solid; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类</span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 0.25pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用于</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.25pt solid; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 5pt 0cm"><span lang=EN-US>CodeAssignStatement </span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .25pt; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 5pt 0cm"><span lang=EN-US>Actions</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.25pt solid; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 5pt 0cm"><span lang=EN-US>CodeBinaryOperatorExpression </span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .25pt; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 5pt 0cm"><span lang=EN-US>Conditions</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.25pt solid; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 5pt 0cm"><span lang=EN-US>CodeDirectionExpression </span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .25pt; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 5pt 0cm"><span lang=EN-US>Conditions</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.25pt solid; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 5pt 0cm"><span lang=EN-US>CodeExpressionStatement </span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .25pt; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 5pt 0cm"><span lang=EN-US>Actions</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.25pt solid; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 5pt 0cm"><span lang=EN-US>CodeFieldReferenceExpression </span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .25pt; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 5pt 0cm"><span lang=EN-US>Conditions</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.25pt solid; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 5pt 0cm"><span lang=EN-US>CodeMethodInvokeExpression </span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .25pt; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 5pt 0cm"><span lang=EN-US>Conditions</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.25pt solid; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>CodeMethodReferenceExpression </span></p>
            </td>
            <td style="BORDER-RIGHT: windowtext 0.25pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 206.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.25pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid windowtext .25pt; mso-border-top-alt: solid windowtext .25pt" vAlign=top width=276>
            <p class=MsoNormal style="MARGIN: 5pt 0cm"><span lang=EN-US>Conditions</span></p>
            </td>
        </tr>
        <tr