<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://jiangsheng.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fjiangsheng.spaces.live.com%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>蒋晟(JIANG,Sheng), a Microsoft MVP @Austin, Texas</title><description>So proud to be re-awarded Microsoft Most Valuable Professional!</description><link>http://jiangsheng.spaces.live.com/</link><language>en-US</language><pubDate>Mon, 06 Oct 2008 01:11:19 GMT</pubDate><lastBuildDate>Mon, 06 Oct 2008 01:11:19 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><live:identity><live:id>2011020917763304970</live:id><live:alias>jiangsheng</live:alias></live:identity><image><title>蒋晟(JIANG,Sheng), a Microsoft MVP @Austin, Texas</title><url>http://blufiles.storage.live.com/y1pfMYDDO6-jdfSmzkU09dpVBTPYUt22L8ULgdhrqO4FRY6s_52ypuXNiHyadovuwzQ</url><link>http://jiangsheng.spaces.live.com/</link></image><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Type 'System.Web.UI.WebControls.Parameter' does not have a public property named 'DbType'</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!816.entry</link><description>&lt;p&gt;In Visual C# 2005 SP1, I added an object data source to a web page that uses my business class as the select method. The method has one parameter of type Guid. The data source wizard generates code like this &lt;p&gt;&amp;lt;asp:Parameter DbType=&amp;quot;Guid&amp;quot; Name=&amp;quot;rowId&amp;quot; /&amp;gt; &lt;p&gt;Although the web server has .Net 2.0 SP1 installed (I checked the registry), it still throws an error &lt;p&gt;Type 'System.Web.UI.WebControls.Parameter' does not have a public property named 'DbType' &lt;p&gt;The walk around is easy: &lt;p&gt;&amp;lt;asp:Parameter Type=&amp;quot;Object&amp;quot; Name=&amp;quot;rowId&amp;quot; /&amp;gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Type+'System.Web.UI.WebControls.Parameter'+does+not+have+a+public+property+named+'DbType'&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><category>None</category><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!816.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!816.entry</guid><pubDate>Mon, 06 Oct 2008 01:11:19 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!816/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!816.entry#comment</wfw:comment><dcterms:modified>2008-10-06T01:11:19Z</dcterms:modified></item><item><title>When Microsoft Office Live Meets Google Chrome</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!804.entry</link><description>&lt;p&gt;To use Microsoft Office Live, your computer must meet one of the following requirements:  &lt;p&gt;Microsoft Internet Explorer 6 or 7, running on Microsoft Windows XP, Windows Server 2003 or Windows Vista. You can download Internet Explorer from the Windows Internet Explorer page.&lt;br&gt;Mozilla Firefox running on Windows XP, Windows Server 2003, Windows Vista, or Mac OS X 10.2.x and later. You can download Firefox from the Firefox download page.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+When+Microsoft+Office+Live+Meets+Google+Chrome&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!804.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!804.entry</guid><pubDate>Mon, 08 Sep 2008 19:35:05 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!804/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!804.entry#comment</wfw:comment><dcterms:modified>2008-09-08T19:35:05Z</dcterms:modified></item><item><title>Feedback from Microsoft</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!796.entry</link><description>&lt;a href="http://www.facebook.com/photo.php?pid=747440&amp;amp;id=656911815"&gt;&lt;img src="http://photos-b.ak.facebook.com/photos-ak-snc1/v263/17/38/656911815/n656911815_925193_9506.jpg"&gt;&lt;/a&gt;  &lt;p&gt;Looks like the &lt;a href="http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!445.entry"&gt;Microsoft Award for Customer Excellence award&lt;/a&gt; I got a few years ago...&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Feedback+from+Microsoft&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!796.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!796.entry</guid><pubDate>Thu, 05 Jun 2008 02:17:33 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!796/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!796.entry#comment</wfw:comment><dcterms:modified>2008-06-05T02:17:33Z</dcterms:modified></item><item><title>MFC Feature Pack发布</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!793.entry</link><description>&lt;p&gt;Visual C++项目组今天&lt;a href="http://blogs.msdn.com/vcblog/archive/2008/04/07/visual-c-2008-feature-pack-released.aspx#comments" rel=nofollow&gt;发布&lt;/a&gt;了Visual C++ 2008 Feature Pack。这个Feature Pack包含了一些以前需要付费给BCG Soft才可以使用的控件，例如BCG著名的窗口布局和风格自定义功能，不过也有一些有用的控件，例如&lt;a href="http://msdn2.microsoft.com/en-us/library/bb983966.aspx" rel=nofollow&gt;文件夹列表&lt;/a&gt;、&lt;a href="http://msdn2.microsoft.com/en-us/library/bb982944.aspx" rel=nofollow&gt;文件夹树&lt;/a&gt;、&lt;a href="http://msdn2.microsoft.com/en-us/library/bb983759.aspx" rel=nofollow&gt;属性窗格&lt;/a&gt;等等。 &lt;p&gt;这个Feature Pack也包含从Dinkumware获得授权的一些对STL的扩展，实现了&lt;a href="http://msdn2.microsoft.com/en-us/library/bb982198.aspx" rel=nofollow&gt;TR1草案&lt;/a&gt;。这包含新的随机算法、集合类和正则表达式支持。关于TR1的更多信息，可以参考&lt;a href="http://dinkumware.com/tr1.aspx" rel=nofollow&gt;Dinkumware的网站&lt;/a&gt;。 &lt;p&gt;安装了这个Feature Pack之后，生成的应用程序在发布时需要同时发布新版本的MFC和CRT组件。预计对这个Feature Pack的技术支持策略会和VC6中从Dinkumware获得授权的STL库会是一个级别，也就是说，BCG Soft、Dinkumware和微软都会提供技术支持。如果在安装了这个Feature Pack之后需要安装Windows SDK 6.1，那么在安装完SDK之后需要修复Visual Studio 2008以保持文件是最新的。 &lt;p&gt;目前发布的这个补丁只支持英文版的Visual Studio 2008 标准版或更高版本，其他语言版的Visual Studio 2008 要获得这些新的功能的话，需要等到Visual Studio 2008 SP1发布。Visual Studio 2008会包含这个Feature Pack。&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+MFC+Feature+Pack%e5%8f%91%e5%b8%83&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!793.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!793.entry</guid><pubDate>Mon, 07 Apr 2008 17:45:51 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!793/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!793.entry#comment</wfw:comment><dcterms:modified>2008-04-07T17:45:51Z</dcterms:modified></item><item><title>Detect if a MSI component is installed</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!789.entry</link><description>&lt;p&gt;A C# program for those who don't know MSI SDK or C++. C++ programmers can find the API inside the msi.h  file in Windows SDK. &lt;p&gt;class Program&lt;br&gt;{&lt;br&gt;    static int Main(string[] args)&lt;br&gt;    {&lt;br&gt;        uint pathSize = 0;&lt;br&gt;        try&lt;br&gt;        {&lt;br&gt;            foreach (string componentId in args)&lt;br&gt;            {&lt;br&gt;                MsiInstallState state = MsiLocateComponent(&lt;br&gt;                    componentId, null, ref pathSize);&lt;br&gt;                if (state != MsiInstallState.Local)&lt;br&gt;                {&lt;br&gt;                    return ERROR_UNKNOWN_COMPONENT;&lt;br&gt;                }&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;        catch (Exception ex)&lt;br&gt;        {&lt;br&gt;            Console.WriteLine(ex.Message);&lt;br&gt;            Console.WriteLine(ex.StackTrace);&lt;br&gt;            return ERROR_MOD_NOT_FOUND;&lt;br&gt;        }&lt;br&gt;        return 0;&lt;br&gt;    }&lt;br&gt;    [DllImport(&amp;quot;msi.dll&amp;quot;, CharSet = CharSet.Auto)]&lt;br&gt;    extern static internal MsiInstallState MsiLocateComponent(string component, string path, ref uint pathSize);&lt;br&gt;    /// &amp;lt;summary&amp;gt;Enumeration of MSI install states.&amp;lt;/summary&amp;gt;&lt;br&gt;    internal enum MsiInstallState : int&lt;br&gt;    {&lt;br&gt;        Local = 3&lt;br&gt;    }&lt;br&gt;    const int ERROR_MOD_NOT_FOUND = 126;&lt;br&gt;    const int ERROR_UNKNOWN_COMPONENT = 1607;&lt;br&gt;}&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Detect+if+a+MSI+component+is+installed&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!789.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!789.entry</guid><pubDate>Mon, 24 Mar 2008 21:31:34 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!789/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!789.entry#comment</wfw:comment><dcterms:modified>2008-03-24T21:57:51Z</dcterms:modified></item><item><title>Hard Drive broke</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!785.entry</link><description>&lt;p&gt;The first 3 Dell support technicians tried to persuade me to clean the temp files, to remove unnecessary startup programs and to reinstall Windows. It does not help if the computer complains an error during self test. I keep saying a self test error can not be solved by twisting the OS, but they won't listen. After educating the representatives for a week I finally got one that has better experience (and better English) to examine my computer. A full system test shows bad sectors on the hard drive, and totally toasted the hard drive. Luckily I just bought the computer for 6 months so I asked for a replacement. Dell sent me one in 2 days and I sent back the broken one. &lt;p&gt;Now my back up hard drive started to fail ... Time to call Seagate.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Hard+Drive+broke&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!785.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!785.entry</guid><pubDate>Mon, 17 Mar 2008 18:39:43 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!785/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!785.entry#comment</wfw:comment><dcterms:modified>2008-03-17T18:47:31Z</dcterms:modified></item><item><title>Smart harddrive error</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!781.entry</link><description>&lt;div&gt;In case anyone is googling this message&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;Hard Drive SELF MONITOR SYSTEM has reported that a parameter has exceed its normal operating range&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;
&lt;div&gt;&lt;span&gt;Dell recommends that you back up your data regularly&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;
&lt;div&gt;&lt;span&gt;Press F1 to continue, Press F2 to enter setup&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div&gt;&lt;span&gt;Run event log and look for warning messages. I have several messages looked like this&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;
&lt;div&gt;&lt;span&gt;C:\Program Files\Microsoft Windows OneCare Live\Database\WinSS_st.edb (3612) C:\Program Files\Microsoft Windows OneCare Live\Database\WinSS_st.edb: A request to read from the file &amp;quot;C:\Program Files\Microsoft Windows OneCare Live\Database\WinSS_st.edb&amp;quot; at offset 180224 (0x000000000002c000) for 4096 (0x00001000) bytes succeeded, but took an abnormally long time (60 seconds) to be serviced by the OS. In addition, 0 other I/O requests to this file have also taken an abnormally long time to be serviced since the last message regarding this problem was posted 0 seconds ago. This problem is likely due to faulty hardware. Please contact your hardware vendor for further assistance diagnosing the problem.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div&gt;&lt;span&gt;msnmsgr (2980) &lt;a&gt;\\.\C:\Users\jiangsheng\AppData\Local\Microsoft\Messenger\&amp;lt;windows&lt;/a&gt; live id&amp;gt;\SharingMetadata\Working\database_8E6C_5899_6C58_7E41\dfsr.db: A request to write to the file &amp;quot;&lt;a&gt;\\.\C:\Users\jiangsheng\AppData\Local\Microsoft\Messenger\&amp;lt;windows&lt;/a&gt; live id&amp;gt;\SharingMetadata\Working\database_8E6C_5899_6C58_7E41\fsr.log&amp;quot; at offset 19456 (0x0000000000004c00) for 512 (0x00000200) bytes succeeded, but took an abnormally long time (75 seconds) to be serviced by the OS. This problem is likely due to faulty hardware. Please contact your hardware vendor for further assistance diagnosing the problem.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div&gt;&lt;span&gt;The reaction is obvious: contact Dell Customer Support.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div&gt;&lt;span&gt;thankfully, I have dialy incremental backup and weekly full system backup, but my dialy backup has been failing. So I will lose a week's data, not a big deal.&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Smart+harddrive+error&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!781.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!781.entry</guid><pubDate>Wed, 09 Jan 2008 12:40:40 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!781/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!781.entry#comment</wfw:comment><dcterms:modified>2008-01-09T12:40:40Z</dcterms:modified></item><item><title>MFC更新Beta版</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!780.entry</link><description>&lt;p&gt;一个面向Visual C++ 2008的MFC更新测试版&lt;a href="http://blogs.msdn.com/vcblog/archive/2008/01/07/mfc-beta-now-available.aspx" target="_blank" rel=nofollow&gt;已经发布&lt;/a&gt;，同时也提供了&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=0D805D4E-2DC2-47C7-8818-A9F59DE4CD9B&amp;amp;displaylang=en" target="_blank" rel=nofollow&gt;文档的下载&lt;/a&gt;。这个版本包含新的界面的特性，例如Office Ribbon、2003和XP风格,Visual Studio风格和MDI标签。另外，这个版本也包含部分TR1的实现，例如正则表达式、更加丰富的集合和智能指针。 &lt;p&gt;另外，在下载页面居然说这个版本还不支持Visual Studio 2008 Service Pack 1的Beta版，正式版才出来几天SP1的测试版就出来了？&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+MFC%e6%9b%b4%e6%96%b0Beta%e7%89%88&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!780.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!780.entry</guid><pubDate>Tue, 08 Jan 2008 03:20:33 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!780/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!780.entry#comment</wfw:comment><dcterms:modified>2008-01-08T03:20:33Z</dcterms:modified></item><item><title>科学，我的信仰?</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!762.entry</link><description>花が咲き そして散る&lt;br&gt;Flowers open out and then they fade&lt;br&gt;花开，然后花落&lt;br&gt;星が輝き やがていつかは消える&lt;br&gt;Stars shine and later or sooner they go off&lt;br&gt;星光闪耀，不知何时熄灭&lt;br&gt;この地球も 太陽も 銀河系 大いなる宇宙も いつか死するときがくる&lt;br&gt;Both this Earth, the Sun, the Milky Way, and even for the big Universe which is growing, later or sooner the time to die will come&lt;br&gt;这个地球，太阳，银河系，甚至整个宇宙也总会有消失的时候&lt;br&gt;人間の一生などそれらに比べれば瞬きほどの僅かなものであろう&lt;br&gt;And compared to these things, human life is insignificant.&lt;br&gt;人的生命和那些相比只不过是一瞬间吧&lt;br&gt;その僅かなひとときに 人は生まれ&lt;br&gt;In that little moment, a man is born&lt;br&gt;在那一瞬间中，人诞生&lt;br&gt;笑い 涙し 戦い 傷つき 喜び 悲しみ 誰かを憎み 誰かを愛し&lt;br&gt;Laughs, cries, fights, is injured, feels joy and feels sadness, loves someone, hates someone&lt;br&gt;微笑，哭泣，战斗，伤害，喜悦，悲伤，憎恨谁，喜欢谁&lt;br&gt;全ては刹那の邂逅&lt;br&gt;Everything is random and in a instant&lt;br&gt;所有的一切都是刹那间的邂逅&lt;br&gt;そして誰しもが死という永遠の眠りに包まれる&lt;br&gt;And, in the end, covered by an eternal sleep called Death.&lt;br&gt;谁都不能逃脱死亡的长眠&lt;br&gt;——沙加在沙罗双树涅磐时的遗言，引自《圣斗士·冥王篇·沙罗双树下之卷》&lt;br&gt;昨天有位朋友问我，你到底信仰什么，我当时的回答是科学；我不信仰一切把自然科学解释不了的现象归类于一个超自然的存在的宗教。我当时的逻辑是超自然是无法被定义的。这是因为你可以定义一个东西是什么，但是你不能定义一个东西为不是什么，因为定义是确定的，而定义的反面（不是什么）的范围是无法确定的。后来想想，我自己对我的信仰下的定义也不是很准确，因为科学是在不断发展的。&lt;br&gt;毕达哥拉斯曾认为万物之源是数，但是他对数的定义仅限制于有理数。当他的学生希帕索斯用毕达哥拉斯定理发现当两个直角边长度都是1时斜边的长度是不是一个有理数的时候，这个发现震撼了整个毕达哥拉斯学派的根基。在传说中，希帕索斯被愤怒的毕达哥拉斯学派的人沉到海中淹死了。现在我们知道除了无理数之外还存在复数，在高维空间内我们还有超复数。人的信仰，即使是一个数学伟人的信仰，也阻挡不了数学发展的脚步。&lt;br&gt;再举一个例子。几何学是基于一系列假设（数学上叫做公理）的。在欧几里得的《几何原本》中，被称为平行公理的第五条公理（或者其等价命题）表述如下：&lt;br&gt;    通过一个不在直线上的点，有且仅有一条不与该直线相交的直线。 &lt;br&gt;这个定理只在证明第二十九个命题中才用到，以后再也没有用到。也就是说，看起来欧几里得几何中此定理的地位可有可无。关于第五公理的地位争论了两千多年，终于在十九世纪二十年代得到解决。俄国数学家罗巴切夫斯基试图用反证法证明这个命题。他用一个和第五公理冲突的公理替代了第五公理，然后试图推导出一个自相矛盾的理论体系。和他的预期相反，他推导出了一门新的几何学，在后来被称为罗巴切夫斯基几何。如果认为空间的曲率是可以变化的，那么第五公里就可以被去掉，而欧几里德几何和罗巴切夫斯基几何成为鲍耶提出的绝对几何在常曲率空间的特例。&lt;br&gt;我们上学的时候都学过，太阳系有九大行星。然而在2006年，国际天文家联合会将冥王星从行星中除名，太阳系只剩下八大行星。如果客观真理可以这样更改的话，究竟什么才是科学？建立在科学方法上的主流意见就是科学么？我们都知道哥白尼这个反例了。另外，科学真的可以用科学手段来验证么？像恒星的演化这样的课题，短命的人类永远只能用理论来解释观测到的现象，没有人能有足够的寿命来验证恒星演化论的真伪。科学，不过是人类对有限的世界的解读而已。&lt;br&gt;我对这个问题没有答案。我对那个朋友的回答可能需要更改一下，我可能信仰客观唯心主义。我认为物质的存在不能用客观的方式来证明，而只能用主观的理论来表述。我认为科学是建立在一系列假设上的，也只能描述基于这些假设的世界。科学越发展，可以描述的现象就越多，但是——引用一下哥德尔第二条定理——任何相容的形式体系不能用于证明它本身的相容性，科学是不能用科学方法来验证的。&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+%e7%a7%91%e5%ad%a6%ef%bc%8c%e6%88%91%e7%9a%84%e4%bf%a1%e4%bb%b0%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!762.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!762.entry</guid><pubDate>Tue, 18 Sep 2007 23:26:29 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!762/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!762.entry#comment</wfw:comment><dcterms:modified>2007-09-18T23:26:29Z</dcterms:modified></item><item><title>AutoComplete with DataSource</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!732.entry</link><description>&lt;p&gt;&lt;a href="http://jiangsheng.net/Documents/AutoCompleteDemo.zip" rel=nofollow&gt;Download the code for this article (22KB)&lt;/a&gt; &lt;p&gt;.Net 2.0 &lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/05/NETFramework20/" rel=nofollow&gt;introduced&lt;/a&gt; autocompletion in &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.textbox.aspx" rel=nofollow&gt;TextBox&lt;/a&gt; and &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.textbox.aspx" rel=nofollow&gt;ComboBox&lt;/a&gt;. It is obvious that autocomplete is not very useful when the number of options is small. However, when your option becomes too many, pre-filling of all options to an &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.autocompletestringcollection.aspx" rel=nofollow&gt;AutoCompleteStringCollection&lt;/a&gt; becomes impractical, especially when your data comes from a remote computer. An alternative is to replace the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.textbox.autocompletecustomsource.aspx" rel=nofollow&gt;AutoCompleteCustomSource&lt;/a&gt; in a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.textchanged.aspx" rel=nofollow&gt;TextChanged&lt;/a&gt; event, however, users are &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=270349&amp;amp;SiteID=1" rel=nofollow&gt;getting random AccessViolationException&lt;/a&gt; when trying to replace it.  In this article I will demonstrate another alternative, using a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx" rel=nofollow&gt;BindingSource&lt;/a&gt; as the data source of options and bypassing the .Net framework and call the underline Windows API directly. &lt;p&gt;The first thing I need to do is to port the APIs to managed code. The autocompletion API is exposed as a COM object, so I need to write managed version of its interfaces: &lt;p&gt;    [ComImport]&lt;br&gt;    [InterfaceType(ComInterfaceType::InterfaceIsIUnknown)]&lt;br&gt;    [Guid(&amp;quot;EAC04BC0-3791-11D2-BB95-0060977B464C&amp;quot;)]&lt;br&gt;    [SuppressUnmanagedCodeSecurity]&lt;br&gt;    interface  class IAutoComplete2&lt;br&gt;    {&lt;br&gt;             [PreserveSig] int Init(&lt;br&gt;            HandleRef hwndEdit,&lt;br&gt;            IEnumString^ punkACL,&lt;br&gt;             String^ pwszRegKeyPath,            &lt;br&gt;            String^ pwszQuickComplete&lt;br&gt;        );&lt;br&gt;        void Enable( [MarshalAs(UnmanagedType::Bool)] bool value);  &lt;p&gt;        int SetOptions(int dwFlag);  &lt;p&gt;        void GetOptions([Out]IntPtr pdwFlag);&lt;br&gt;    };&lt;br&gt;Second, I need to create the autocomplete object and query the IAutoComplete2 interface: &lt;p&gt;       Type^ autoCompleteType = Type::GetTypeFromCLSID(CLSID_AutoComplete);&lt;br&gt;        try{&lt;br&gt;            autoComplete2 =(IAutoComplete2^)(Activator::CreateInstance(autoCompleteType));&lt;br&gt;        }&lt;br&gt;        catch(Exception^ e)&lt;br&gt;        {&lt;br&gt;            Marshal::ReleaseComObject(autoComplete2);&lt;br&gt;            autoComplete2 = nullptr;&lt;br&gt;        } &lt;p&gt;Third, I need to bind it to an TextBox control: &lt;p&gt;    bool AutocompleteBindingSource::Bind()&lt;br&gt;    {&lt;br&gt;        if (nullptr==this-&amp;gt;autoComplete2)&lt;br&gt;            return false;&lt;br&gt;        try&lt;br&gt;        {&lt;br&gt;            this-&amp;gt;autoComplete2-&amp;gt;SetOptions((int)ControlToBind-&amp;gt;AutoCompleteMode);&lt;br&gt;            this-&amp;gt;autoComplete2-&amp;gt;Init(&lt;br&gt;                HandleRef(ControlToBind,ControlToBind-&amp;gt;Handle),&lt;br&gt;                this,&lt;br&gt;                String::Empty&lt;br&gt;                ,String::Empty);&lt;br&gt;            return true;&lt;br&gt;        }&lt;br&gt;        catch(Exception^e) &lt;br&gt;        {&lt;br&gt;            return false;&lt;br&gt;        }  &lt;p&gt;    } &lt;p&gt;Finally, I need to implement &lt;a href="http://msdn2.microsoft.com/en-us/library/system.runtime.interopservices.comtypes.ienumstring(VS.80).aspx" rel=nofollow&gt;IEnumString&lt;/a&gt; to provide a list of options. Luckily, .Net has declared this interface, so I don't need to port it to managed code, however, I still need to write my binding code in my implementation of IEnumString. &lt;p&gt;    void AutocompleteBindingSource::Reset()&lt;br&gt;    {&lt;br&gt;        this-&amp;gt;current = 0;&lt;br&gt;        if(BindingSource!=nullptr)&lt;br&gt;            this-&amp;gt;size=BindingSource-&amp;gt;Count;&lt;br&gt;    } &lt;p&gt;        int AutocompleteBindingSource::Next(&lt;br&gt;        int celt, [Out, MarshalAs(UnmanagedType::LPArray, ArraySubType=UnmanagedType::LPWStr, SizeParamIndex=0)] array&amp;lt;String^&amp;gt;^ rgelt, IntPtr pceltFetched)&lt;br&gt;    {&lt;br&gt;        if (celt &amp;lt; 0)        {&lt;br&gt;            return E_INVALIDARG;&lt;br&gt;        }&lt;br&gt;        int index = 0;&lt;br&gt;        while ((this-&amp;gt;current &amp;lt; this-&amp;gt;size) &amp;amp;&amp;amp; (celt &amp;gt; 0))&lt;br&gt;        {&lt;br&gt;            Object^ item=this-&amp;gt;BindingSource-&amp;gt;default[this-&amp;gt;current];  &lt;p&gt;            bool useDisplayMember=false;  &lt;p&gt;            if(!String::IsNullOrEmpty(DisplayMember))&lt;br&gt;            {&lt;br&gt;                ICustomTypeDescriptor^ customTypeDescriptor=dynamic_cast&amp;lt;ICustomTypeDescriptor^&amp;gt;(item);&lt;br&gt;                if(customTypeDescriptor!=nullptr)&lt;br&gt;                {&lt;br&gt;                    PropertyDescriptorCollection^ propertyDescriptorCollection=&lt;br&gt;                        customTypeDescriptor-&amp;gt;GetProperties();&lt;br&gt;                    if(propertyDescriptorCollection!=nullptr)&lt;br&gt;                    {&lt;br&gt;                        PropertyDescriptor^ propertyDescriptor=propertyDescriptorCollection-&amp;gt;default[DisplayMember];&lt;br&gt;                        if(propertyDescriptor!=nullptr)&lt;br&gt;                        {&lt;br&gt;                            rgelt[index] = propertyDescriptor-&amp;gt;GetValue(item)-&amp;gt;ToString();&lt;br&gt;                            useDisplayMember=true;&lt;br&gt;                        }&lt;br&gt;                    }&lt;br&gt;                }&lt;br&gt;            }  &lt;p&gt;            if(!useDisplayMember)&lt;br&gt;            {&lt;br&gt;                if(item!=nullptr)&lt;br&gt;                {&lt;br&gt;                    rgelt[index] = item-&amp;gt;ToString();&lt;br&gt;                }&lt;br&gt;            }&lt;br&gt;            this-&amp;gt;current++;&lt;br&gt;            index++;&lt;br&gt;            celt--;&lt;br&gt;        }&lt;br&gt;        if ((pceltFetched != IntPtr::Zero))&lt;br&gt;        {&lt;br&gt;            Marshal::WriteInt32(pceltFetched, index);&lt;br&gt;        }&lt;br&gt;        if ((celt != 0))&lt;br&gt;        {&lt;br&gt;            return 1;&lt;br&gt;        }&lt;br&gt;        return 0;  &lt;p&gt;    } &lt;p&gt;Here the DisplayMember property is the name of the property in the data source to be displayed. If the property specified by the value of the DataMember property does not exist, I use ToString to get a text representation of the current item in the data source. &lt;p&gt;You may want to ask, where is the filtering code? Well, that is implemented by BindingSource class.  &lt;p&gt;       System::Void FormTest::textBoxDemo_TextChanged(System::Object^  sender, System::EventArgs^  e) &lt;br&gt;    {&lt;br&gt;        static bool inThisFunction=false;&lt;br&gt;        if(!inThisFunction)&lt;br&gt;        {&lt;br&gt;            inThisFunction=true;&lt;br&gt;            if(String::IsNullOrEmpty(textBoxDemo-&amp;gt;Text))&lt;br&gt;                bindingSourceAutoComplete-&amp;gt;Filter=nullptr;&lt;br&gt;            else&lt;br&gt;            {&lt;br&gt;                System::String^ addText=textBoxDemo-&amp;gt;Text+&amp;quot;og/NextElement&amp;quot;;&lt;br&gt;                dataSetDemo-&amp;gt;Tables[0]-&amp;gt;DefaultView-&amp;gt;Sort=&amp;quot;Text&amp;quot;;&lt;br&gt;                if(dataSetDemo-&amp;gt;Tables[0]-&amp;gt;DefaultView-&amp;gt;FindRows(addText)-&amp;gt;Length==0)&lt;br&gt;                {&lt;br&gt;                    System::Data::DataRow^ row=dataSetDemo-&amp;gt;Tables[0]-&amp;gt;NewRow();&lt;br&gt;                    row-&amp;gt;default[0]=addText;&lt;br&gt;                    dataSetDemo-&amp;gt;Tables[0]-&amp;gt;Rows-&amp;gt;Add(row);&lt;br&gt;                }&lt;br&gt;                bindingSourceAutoComplete-&amp;gt;Filter=&lt;br&gt;                    String::Format(&amp;quot;{0} LIKE '{1}%'&amp;quot;&lt;br&gt;                    ,dataSetDemo-&amp;gt;Tables[0]-&amp;gt;Columns[0]-&amp;gt;Caption&lt;br&gt;                    ,textBoxDemo-&amp;gt;Text);&lt;br&gt;            }&lt;br&gt;            if(textBoxDemo-&amp;gt;SelectionStart&amp;gt;0)&lt;br&gt;            {&lt;br&gt;                autocompleteBindingSource1-&amp;gt;Reset();&lt;br&gt;                autocompleteBindingSource1-&amp;gt;Bind();&lt;br&gt;                String^ text=textBoxDemo-&amp;gt;Text;&lt;br&gt;                int selectionStart=textBoxDemo-&amp;gt;SelectionStart;&lt;br&gt;                int selectionLength=textBoxDemo-&amp;gt;SelectionLength;&lt;br&gt;                textBoxDemo-&amp;gt;SelectionStart=0;&lt;br&gt;                textBoxDemo-&amp;gt;SelectionLength=0;&lt;br&gt;                textBoxDemo-&amp;gt;SelectAll();            &lt;br&gt;                System::Windows::Forms::SendKeys::SendWait(&amp;quot;{BACKSPACE}&amp;quot;);&lt;br&gt;                textBoxDemo-&amp;gt;Text=text;&lt;br&gt;                textBoxDemo-&amp;gt;SelectionStart=selectionStart-1;&lt;br&gt;                textBoxDemo-&amp;gt;SelectionLength=selectionLength+1;&lt;br&gt;                System::Windows::Forms::SendKeys::SendWait(textBoxDemo-&amp;gt;SelectedText);&lt;br&gt;            }&lt;br&gt;            inThisFunction=false;&lt;br&gt;        }&lt;br&gt;    }&lt;p&gt;Somehow Windows caches the result. If I don't clear the text, my IEnumString implementation won't be asked again for candidate strings (pointed out by Andy Gilman). &lt;a href="http://spaces.live.com/profile.aspx?cid=1266524264199780707" title="View this person's profile"&gt;&lt;/a&gt; &lt;p&gt;The BindingSource class checks the data source to see if they support the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.componentmodel.ibindinglistview.aspx" rel=nofollow&gt;IBindingListView&lt;/a&gt;. If IBindingListView is supported, the BindingSource class delegates sorting and filtering to the data source.  In this sample, the data source of the BindingSource object is a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.data.dataset.aspx" rel=nofollow&gt;DataSet&lt;/a&gt;, and the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.bindingsource.datamember.aspx" rel=nofollow&gt;DataMember&lt;/a&gt; of BindingSource object is the name of the first table , so BindingSource creates a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.data.dataview.aspx" rel=nofollow&gt;DataView&lt;/a&gt; as its data source. The DataView class implements IBindingListView and filters its data using expressions parsed from the filter string. In reality, the data source could be a business object that implements IBindingListView and supports filtering and sorting with stored procedures. &lt;p&gt;This sample does not consider compound autocomplete object support. If you want to get your options from multiple sources, you need to use &lt;a href="http://msdn2.microsoft.com/en-us/library/ms644897.aspx" rel=nofollow&gt;IObjMgr&lt;/a&gt; to add sources to the autocomplete object. &lt;p&gt;Reference &lt;ul&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa969386.aspx" rel=nofollow&gt;Using Autocomplete&lt;/a&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/0yy0c9z8(VS.80).aspx" rel=nofollow&gt;BindingSource Component Architecture&lt;/a&gt;&lt;/ul&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+AutoComplete+with+DataSource&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!732.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!732.entry</guid><pubDate>Mon, 06 Aug 2007 00:15:02 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!732/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!732.entry#comment</wfw:comment><dcterms:modified>2007-09-21T03:57:46Z</dcterms:modified></item><item><title>Visual C++ 2008 Beta2 里面的Class Designer</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!720.entry</link><description>&lt;p&gt;&lt;a href="http://blufiles.storage.msn.com/y1pKWlrV0DnS2p7vjktWIo6Qo95bg_ABvWFxCgDSaobnoGEbr22TNOVPcfkJrc8QM251C7gbdGVzOM"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=508 alt=image src="http://blufiles.storage.msn.com/y1pKWlrV0DnS2rNBi82HjVfN_JYzrr8q7Bf5_ptaUJEcfckwFQLwnmgNaEy4JWvliEoi500K5isYfs" width=700 border=0&gt;&lt;/a&gt;  &lt;p&gt;Visual Studio 2008 Beta2中的Class Designer终于支持C++了，上面是一个MFC程序的类图，可以看到已经支持扩展MFC的宏了，可惜只能看不能重构代码。尽管Class Designer这功能相当不错，但是设计师们可能还是更习惯IBM 的&lt;a href="http://www-306.ibm.com/software/awdtools/developer/rose/visualstudio/index.html" rel=nofollow&gt;Rational Rose Developer for Visual Studio&lt;/a&gt;和UML。我用Class Designer的Ｃ＃支持的时候也就是加加注释而已，重构我更习惯用DevExpress提供的工具Refactor来做，类则用XSD.exe生成，因为Class Designer生成的属性只会扔NotImplementedException异常。 &lt;div style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px"&gt;CSDN Tags: &lt;a href="http://wz.csdn.net/tag/C++" rel=tag&gt;C++&lt;/a&gt;, &lt;a href="http://wz.csdn.net/tag/Class Designer" rel=tag&gt;Class Designer&lt;/a&gt;, &lt;a href="http://wz.csdn.net/tag/Visual Studio 2008" rel=tag&gt;Visual Studio 2008&lt;/a&gt;, &lt;a href="http://wz.csdn.net/tag/Rational Rose" rel=tag&gt;Rational Rose&lt;/a&gt;, &lt;a href="http://wz.csdn.net/tag/UML" rel=tag&gt;UML&lt;/a&gt;, &lt;a href="http://wz.csdn.net/tag/C#" rel=tag&gt;C#&lt;/a&gt;, &lt;a href="http://wz.csdn.net/tag/DevExpress" rel=tag&gt;DevExpress&lt;/a&gt;, &lt;a href="http://wz.csdn.net/tag/Refactor" rel=tag&gt;Refactor&lt;/a&gt;&lt;/div&gt; &lt;p&gt;Visual C++项目组在做&lt;a href="https://connect.microsoft.com/Survey/Survey.aspx?SurveyID=4421&amp;amp;SiteID=450" rel=nofollow&gt;下一个版本的市场调查&lt;/a&gt;，有兴趣的可以去提提要求。 &lt;p&gt;  &lt;p&gt;           &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Visual+C%2b%2b+2008+Beta2+%e9%87%8c%e9%9d%a2%e7%9a%84Class+Designer&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!720.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!720.entry</guid><pubDate>Mon, 30 Jul 2007 03:39:28 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!720/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!720.entry#comment</wfw:comment><dcterms:modified>2007-07-30T03:39:28Z</dcterms:modified></item><item><title>Handle NewWindow3 and ShowModalDialog in CHtmlView</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!711.entry</link><description>&lt;p&gt;CHTMLView does not support NewWindow3 as of MFC 9.0. It is relatively easy to add this support, given the event sink code in atlmfc\src\viewhtml.cpp &lt;p&gt;Add the following into the declaration of the derived CHtmlView class (named CHtmlViewTestView in this example) &lt;p&gt;void NewWindow3(      &lt;br&gt;        IDispatch **ppDisp,&lt;br&gt;        VARIANT_BOOL *Cancel,&lt;br&gt;        DWORD dwFlags,&lt;br&gt;        BSTR bstrUrlContext,&lt;br&gt;        BSTR bstrUrl&lt;br&gt;    );  &lt;p&gt;DECLARE_EVENTSINK_MAP()  &lt;p&gt;Add the following to the implementation file of the CHtmlViewTestView class  &lt;p&gt;#include &amp;lt;exdisp.h&amp;gt; //For IWebBrowser2* and others&lt;br&gt;#include &amp;lt;exdispid.h&amp;gt;&lt;br&gt;#include &amp;lt;Mshtml.h&amp;gt;&lt;br&gt;#include &amp;lt;Mshtmdid.h&amp;gt;&lt;br&gt;#include &amp;lt;shobjidl.h&amp;gt;  &lt;p&gt;BEGIN_EVENTSINK_MAP(CHtmlViewTestView, CHtmlView)&lt;br&gt;    ON_EVENT(CHtmlViewTestView, AFX_IDW_PANE_FIRST,DISPID_NEWWINDOW3,NewWindow3,VTS_PDISPATCH VTS_PBOOL VTS_I4 VTS_BSTR VTS_BSTR)&lt;br&gt;END_EVENTSINK_MAP()  &lt;p&gt;void CHtmlViewTestView::NewWindow3(      &lt;br&gt;    IDispatch **ppDisp,&lt;br&gt;    VARIANT_BOOL *Cancel,&lt;br&gt;    DWORD dwFlags,&lt;br&gt;    BSTR bstrUrlContext,&lt;br&gt;    BSTR bstrUrl&lt;br&gt;)&lt;br&gt;{&lt;br&gt;    CDocTemplate* pDocTemplate=GetDocument()-&amp;gt;GetDocTemplate();&lt;br&gt;    CDocument* pDocument=pDocTemplate-&amp;gt;OpenDocumentFile(NULL);&lt;br&gt;    POSITION pos= pDocument-&amp;gt;GetFirstViewPosition();&lt;br&gt;    CHtmlViewTestView* pNewView=(CHtmlViewTestView*)pDocument-&amp;gt;GetNextView(pos);&lt;br&gt;    pNewView-&amp;gt;SetRegisterAsBrowser(TRUE);&lt;br&gt;    *ppDisp=pNewView-&amp;gt;GetApplication();&lt;br&gt;}  &lt;p&gt;Handling ShowHtmlDialog in CHtmlView needs some extension the browser control site, however, the MFC implementation is not reusable. Heck, for some reason the two MFC HTML Classes, namely CHtmlView and CDHtmlDialog, are NOT reusing their own extension inside the same class library. They use two almost identical extension control sites to redirect IDocHostUIHandler methods. The one used CHtmlView, CHtmlControlSite, is not even in MFC header file, while the one used by CDHtmlDialog, CBrowserControlSite, is in afxdhtml.h, leaving some room to extend it by exposing GetInterfaceHook.  &lt;p&gt;Now back to CHtmlView. To create a control site extension, you need to override CWnd::CreateControlSite, which is added in MFC 7.0 specifically for extending the web browser control ,  but is used in MFC 8.0 for embedding .Net Windows Forms controls. &lt;p&gt;BOOL CHtmlViewTestView::CreateControlSite(COleControlContainer* pContainer, &lt;br&gt;   COleControlSite** ppSite, UINT /* nID */, REFCLSID /* clsid */)&lt;br&gt;{&lt;br&gt;    ASSERT(ppSite != NULL);&lt;br&gt;    *ppSite = new CExtendedHtmlControlSite(pContainer,this);&lt;br&gt;    return TRUE;&lt;br&gt;} &lt;p&gt;Actually, pContainer-&amp;gt;m_pWnd is this (CHtmlViewTestView), so I can emit a parameter here and cast the window pointer to CHtmlViewTestView, but this is not obvious to me when I wrote this class. &lt;p&gt;The control site extension needs to extend COleControlSite, an internal class in MFC 6.0 but is documented in MFC 7.0, again, to support class level customization of the control site. Previously, you can only replace the global control container by calling AfxEnableControlContainer.  &lt;p&gt;class CExtendedHtmlControlSite :&lt;br&gt;    public COleControlSite&lt;br&gt;{&lt;br&gt;public:&lt;br&gt;    CExtendedHtmlControlSite(COleControlContainer* pContainer,CHtmlViewTestView* pView);&lt;br&gt;    virtual ~CExtendedHtmlControlSite(void);&lt;br&gt;protected:&lt;br&gt;    CHtmlViewTestView* m_pView;&lt;br&gt;} &lt;p&gt;CExtendedHtmlControlSite::CExtendedHtmlControlSite(COleControlContainer* pContainer,CHtmlViewTestView* pView)&lt;br&gt;:COleControlSite(pContainer),m_pView(pView)&lt;br&gt;{&lt;br&gt;}  &lt;p&gt;CExtendedHtmlControlSite::~CExtendedHtmlControlSite(void)&lt;br&gt;{&lt;br&gt;}  &lt;p&gt;Here m_pView is saved to delegate INewWindowManager calls to the CHtmlViewTestView class.  &lt;p&gt;Now it is the fun part. The web browser control does not actually query the INewWindowManager interface from the control site, instead, it calls the control site's implementation of IServiceProvider::QueryService, so I need to implement IServiceProvider first, then answer the service query call with my INewWindowManager implementation.  &lt;p&gt;    BEGIN_INTERFACE_PART(ServiceProvider, IServiceProvider)&lt;br&gt;        STDMETHOD(QueryService)(REFGUID,REFIID,void**);&lt;br&gt;    END_INTERFACE_PART(ServiceProvider)  &lt;p&gt;    BEGIN_INTERFACE_PART(NewWindowManager, INewWindowManager)        &lt;br&gt;        STDMETHOD(EvaluateNewWindow)( &lt;br&gt;            LPCWSTR pszUrl,&lt;br&gt;            LPCWSTR pszName,&lt;br&gt;            LPCWSTR pszUrlContext,&lt;br&gt;            LPCWSTR pszFeatures,&lt;br&gt;            BOOL fReplace,&lt;br&gt;            DWORD dwFlags,&lt;br&gt;            DWORD dwUserActionTime);&lt;br&gt;    END_INTERFACE_PART(NewWindowManager);  &lt;p&gt;ULONG FAR EXPORT CExtendedHtmlControlSite::XServiceProvider::AddRef()&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE(CExtendedHtmlControlSite, ServiceProvider)&lt;br&gt;    return pThis-&amp;gt;ExternalAddRef();&lt;br&gt;}  &lt;p&gt;ULONG FAR EXPORT CExtendedHtmlControlSite::XServiceProvider::Release()&lt;br&gt;{                            &lt;br&gt;    METHOD_PROLOGUE(CExtendedHtmlControlSite, ServiceProvider)&lt;br&gt;    return pThis-&amp;gt;ExternalRelease();&lt;br&gt;}  &lt;p&gt;HRESULT FAR EXPORT CExtendedHtmlControlSite::XServiceProvider::QueryInterface(REFIID riid, &lt;br&gt;    void** ppvObj)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE(CExtendedHtmlControlSite, ServiceProvider)&lt;br&gt;    HRESULT hr = (HRESULT)pThis-&amp;gt;ExternalQueryInterface(&amp;amp;riid, ppvObj);&lt;br&gt;    return hr;&lt;br&gt;}&lt;br&gt;STDMETHODIMP CExtendedHtmlControlSite::XServiceProvider::QueryService(REFGUID guidService,  &lt;br&gt;    REFIID riid,&lt;br&gt;    void** ppvObject)&lt;br&gt;{&lt;br&gt;    if (riid == IID_INewWindowManager)&lt;br&gt;    {&lt;br&gt;        METHOD_PROLOGUE(CExtendedHtmlControlSite, ServiceProvider);&lt;br&gt;        HRESULT hr = (HRESULT)pThis-&amp;gt;ExternalQueryInterface(&amp;amp;riid, ppvObject);&lt;br&gt;        return hr;&lt;br&gt;    }&lt;br&gt;    else&lt;br&gt;    {&lt;br&gt;        *ppvObject = NULL;  &lt;p&gt;    }&lt;br&gt;    return E_NOINTERFACE;&lt;br&gt;}  &lt;p&gt;ULONG CExtendedHtmlControlSite::XNewWindowManager::AddRef()&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE(CExtendedHtmlControlSite, NewWindowManager);  &lt;p&gt;    return pThis-&amp;gt;ExternalAddRef();&lt;br&gt;}  &lt;p&gt;ULONG CExtendedHtmlControlSite::XNewWindowManager::Release()&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE(CExtendedHtmlControlSite, NewWindowManager);  &lt;p&gt;    return pThis-&amp;gt;ExternalRelease();&lt;br&gt;}  &lt;p&gt;HRESULT CExtendedHtmlControlSite::XNewWindowManager::QueryInterface(REFIID riid, void ** ppvObj)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE(CExtendedHtmlControlSite, NewWindowManager);  &lt;p&gt;    return pThis-&amp;gt;ExternalQueryInterface( &amp;amp;riid, ppvObj );&lt;br&gt;}  &lt;p&gt;HRESULT CExtendedHtmlControlSite::XNewWindowManager::EvaluateNewWindow(&lt;br&gt;LPCWSTR pszUrl,&lt;br&gt;LPCWSTR pszName,&lt;br&gt;LPCWSTR pszUrlContext,&lt;br&gt;LPCWSTR pszFeatures,&lt;br&gt;BOOL fReplace,&lt;br&gt;DWORD dwFlags,&lt;br&gt;DWORD dwUserActionTime&lt;br&gt;)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE(CExtendedHtmlControlSite, NewWindowManager);  &lt;p&gt;    return pThis-&amp;gt;m_pView-&amp;gt;EvaluateNewWindow(&lt;br&gt;        pszUrl,&lt;br&gt;        pszName,&lt;br&gt;        pszUrlContext,&lt;br&gt;        pszFeatures,&lt;br&gt;        fReplace,&lt;br&gt;        dwFlags,&lt;br&gt;        dwUserActionTime);&lt;br&gt;}  &lt;p&gt;Actually, I can implementation INewWindowManager in another class and return another object in QueryService, but since INewWindowManager is used exclusively for web browser customization, this INewWindowManager implementation is not going to be reusable anyway.  &lt;p&gt;Finally, to make CHtmlView's IDocHostUIHandler implementation happy, I have to redirect IDocHostUIHandler method calls to it: &lt;p&gt;DECLARE_INTERFACE_MAP()  &lt;p&gt;    BEGIN_INTERFACE_PART(DocHostUIHandler, IDocHostUIHandler)&lt;br&gt;        STDMETHOD(ShowContextMenu)(DWORD, LPPOINT, LPUNKNOWN, LPDISPATCH);&lt;br&gt;        STDMETHOD(GetHostInfo)(DOCHOSTUIINFO*);&lt;br&gt;        STDMETHOD(ShowUI)(DWORD, LPOLEINPLACEACTIVEOBJECT,&lt;br&gt;            LPOLECOMMANDTARGET, LPOLEINPLACEFRAME, LPOLEINPLACEUIWINDOW);&lt;br&gt;        STDMETHOD(HideUI)(void);&lt;br&gt;        STDMETHOD(UpdateUI)(void);&lt;br&gt;        STDMETHOD(EnableModeless)(BOOL);&lt;br&gt;        STDMETHOD(OnDocWindowActivate)(BOOL);&lt;br&gt;        STDMETHOD(OnFrameWindowActivate)(BOOL);&lt;br&gt;        STDMETHOD(ResizeBorder)(LPCRECT, LPOLEINPLACEUIWINDOW, BOOL);&lt;br&gt;        STDMETHOD(TranslateAccelerator)(LPMSG, const GUID*, DWORD);&lt;br&gt;        STDMETHOD(GetOptionKeyPath)(OLECHAR **, DWORD);&lt;br&gt;        STDMETHOD(GetDropTarget)(LPDROPTARGET, LPDROPTARGET*);&lt;br&gt;        STDMETHOD(GetExternal)(LPDISPATCH*);&lt;br&gt;        STDMETHOD(TranslateUrl)(DWORD, OLECHAR*, OLECHAR **);&lt;br&gt;        STDMETHOD(FilterDataObject)(LPDATAOBJECT , LPDATAOBJECT*);&lt;br&gt;    END_INTERFACE_PART(DocHostUIHandler)  &lt;p&gt;  &lt;p&gt;STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::GetExternal(LPDISPATCH *lppDispatch)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnGetExternal(lppDispatch);&lt;br&gt;}STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::ShowContextMenu(&lt;br&gt;    DWORD dwID, LPPOINT ppt, LPUNKNOWN pcmdtReserved, LPDISPATCH pdispReserved)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnShowContextMenu(dwID, ppt, pcmdtReserved, pdispReserved);&lt;br&gt;}STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::GetHostInfo(&lt;br&gt;    DOCHOSTUIINFO *pInfo)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnGetHostInfo(pInfo);&lt;br&gt;}STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::ShowUI(&lt;br&gt;    DWORD dwID, LPOLEINPLACEACTIVEOBJECT pActiveObject,&lt;br&gt;    LPOLECOMMANDTARGET pCommandTarget, LPOLEINPLACEFRAME pFrame,&lt;br&gt;    LPOLEINPLACEUIWINDOW pDoc)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnShowUI(dwID, pActiveObject, pCommandTarget, pFrame, pDoc);&lt;br&gt;}STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::HideUI(void)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)  &lt;p&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnHideUI();&lt;br&gt;}&lt;br&gt;STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::EnableModeless(BOOL fEnable)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnEnableModeless(fEnable);&lt;br&gt;}STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::OnDocWindowActivate(BOOL fActivate)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnDocWindowActivate(fActivate);&lt;br&gt;}STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::OnFrameWindowActivate(&lt;br&gt;    BOOL fActivate)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnFrameWindowActivate(fActivate);&lt;br&gt;}  &lt;p&gt;STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::ResizeBorder(&lt;br&gt;    LPCRECT prcBorder, LPOLEINPLACEUIWINDOW pUIWindow, BOOL fFrameWindow)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnResizeBorder(prcBorder, pUIWindow, fFrameWindow);&lt;br&gt;}&lt;br&gt;STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::TranslateAccelerator(&lt;br&gt;    LPMSG lpMsg, const GUID* pguidCmdGroup, DWORD nCmdID)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnTranslateAccelerator(lpMsg, pguidCmdGroup, nCmdID);&lt;br&gt;}&lt;br&gt;STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::GetOptionKeyPath(&lt;br&gt;    LPOLESTR* pchKey, DWORD dwReserved)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnGetOptionKeyPath(pchKey, dwReserved);&lt;br&gt;}STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::GetDropTarget(&lt;br&gt;    LPDROPTARGET pDropTarget, LPDROPTARGET* ppDropTarget)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnGetDropTarget(pDropTarget, ppDropTarget);&lt;br&gt;}  &lt;p&gt;STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::TranslateUrl(&lt;br&gt;    DWORD dwTranslate, OLECHAR* pchURLIn, OLECHAR** ppchURLOut)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnTranslateUrl(dwTranslate, pchURLIn, ppchURLOut);&lt;br&gt;}STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::FilterDataObject(&lt;br&gt;    LPDATAOBJECT pDataObject, LPDATAOBJECT* ppDataObject)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnFilterDataObject(pDataObject, ppDataObject);&lt;br&gt;}&lt;br&gt;STDMETHODIMP_(ULONG) CExtendedHtmlControlSite::XDocHostUIHandler::AddRef()&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;ExternalAddRef();&lt;br&gt;}&lt;br&gt;STDMETHODIMP_(ULONG) CExtendedHtmlControlSite::XDocHostUIHandler::Release()&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;ExternalRelease();&lt;br&gt;}  &lt;p&gt;STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::QueryInterface(&lt;br&gt;          REFIID iid, LPVOID far* ppvObj)     &lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)&lt;br&gt;    return pThis-&amp;gt;ExternalQueryInterface(&amp;amp;iid, ppvObj);&lt;br&gt;}STDMETHODIMP CExtendedHtmlControlSite::XDocHostUIHandler::UpdateUI(void)&lt;br&gt;{&lt;br&gt;    METHOD_PROLOGUE_EX_(CExtendedHtmlControlSite, DocHostUIHandler)  &lt;p&gt;    return pThis-&amp;gt;m_pView-&amp;gt;OnUpdateUI();&lt;br&gt;}  &lt;p&gt;That's it, you can handle ShowModalDialog now  &lt;p&gt;HRESULT CHtmlViewTestView::EvaluateNewWindow(&lt;br&gt;    LPCWSTR pszUrl,&lt;br&gt;    LPCWSTR pszName,&lt;br&gt;    LPCWSTR pszUrlContext,&lt;br&gt;    LPCWSTR pszFeatures,&lt;br&gt;    BOOL fReplace,&lt;br&gt;    DWORD dwFlags,&lt;br&gt;    DWORD dwUserActionTime&lt;br&gt;)&lt;br&gt;{&lt;br&gt;    CString url(pszUrl);&lt;br&gt;    if(url.MakeLower().Find(_T(&amp;quot;showdialogtest.htm&amp;quot;))!=-1)&lt;br&gt;    {&lt;br&gt;        return S_FALSE;//block the new window&lt;br&gt;    }&lt;br&gt;    return E_FAIL;//default&lt;br&gt;}  &lt;p&gt;Well, here you can add as many policies as you like , people can never be creative enough on making policies.  &lt;p&gt;This should be enough for adding your web browser customization. If you want to add more interfaces, such as IDocHostUIHandler2, IInternetSecurityManager, IDocHostShowUI, IOleCommandTarget or IAuthenticate, to of the customized control site, simply add more interface parts and answer QueryService calls if necessary.  &lt;p&gt;About the author  &lt;p&gt;Sheng Jiang has been a Microsoft MVP in Visual C++ since 2004. He is a student in Austin Community College in Austin, Texas, USA.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Handle+NewWindow3+and+ShowModalDialog+in+CHtmlView&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!711.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!711.entry</guid><pubDate>Tue, 03 Jul 2007 05:37:08 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!711/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!711.entry#comment</wfw:comment><dcterms:modified>2007-07-03T06:14:41Z</dcterms:modified></item><item><title>Skew detection and correction resources</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!710.entry</link><description>&lt;p&gt;&lt;a title="http://homepages.inf.ed.ac.uk/rbf/HIPR2/hough.htm" href="http://homepages.inf.ed.ac.uk/rbf/HIPR2/hough.htm"&gt;http://homepages.inf.ed.ac.uk/rbf/HIPR2/hough.htm&lt;/a&gt; a nice introduction of the Hough Transform &lt;p&gt;&lt;a title="http://www.leptonica.com/papers/docskew.pdf" href="http://www.leptonica.com/papers/docskew.pdf"&gt;http://www.leptonica.com/papers/docskew.pdf&lt;/a&gt; A paper discussing different skew detection methods &lt;p&gt;&lt;a href="http://durendal.org:8080/twiki/bin/view/Deskew/WebHome"&gt;http://durendal.org:8080/twiki/bin/view/Deskew/WebHome&lt;/a&gt; A research on skew about the &lt;a href="http://www.leptonica.com/index.html" rel=nofollow&gt;Leptonica library&lt;/a&gt;. &lt;p&gt;&lt;a title="http://www.codeproject.com/useritems/Deskew_an_Image.asp" href="http://www.codeproject.com/useritems/Deskew_an_Image.asp"&gt;http://www.codeproject.com/useritems/Deskew_an_Image.asp&lt;/a&gt; Hough Transform in VB.Net&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Skew+detection+and+correction+resources&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!710.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!710.entry</guid><pubDate>Fri, 01 Jun 2007 21:44:16 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!710/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!710.entry#comment</wfw:comment><dcterms:modified>2007-06-01T21:44:16Z</dcterms:modified></item><item><title>STL/CLR, Compiler and Marshaling</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!664.entry</link><description>&lt;p&gt;MSDN第9频道又采访了Visual C++类库组的项目经理&lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=284140" rel=nofollow&gt;Nikola Dudar&lt;/a&gt;和&lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=293987" rel=nofollow&gt;Sarita Bafna&lt;/a&gt;，以及质量控制组的&lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=285284" rel=nofollow&gt;Marina Polishchuk&lt;/a&gt;。&lt;a href="http://blog.joycode.com/jiangsheng/archive/2007/03/01/94082.aspx" rel=nofollow&gt;尽管Visual C++项目组已经转移了工作重点&lt;/a&gt;，但是很少人注意到这一点。或许这些采访可以帮助你了解Visual C++项目组的工作。 &lt;p&gt;为什么C++仍旧重要？ &lt;ul&gt; &lt;li&gt;非托管的应用程序有很大的代码积累，而这些程序的升级工作仍旧在进行  &lt;li&gt;性能是选择C++的重要因素。举例来说，游戏和杀毒程序更适合用非托管代码来编写。  &lt;li&gt;多平台支持。虽然.Net号称是跨平台的，但是如果要编写真正的跨平台程序，开发的时候遵循C++标准还是很有必要的。&lt;/ul&gt; &lt;p&gt;为什么C++程序员仍旧重要？ &lt;ul&gt; &lt;li&gt;C++程序员理解整个机器的运作，他们知道怎么写垃圾收集机制，甚至可以写机器代码  &lt;li&gt;C++程序员可以很容易的学会其他语言——C++已经是最难学的语言之一了  &lt;li&gt;C++程序员并不只使用一种语言。如果有必要的话，他们会选择汇编、C#或者Perl这样更适合特定任务的语言。&lt;/ul&gt; &lt;p&gt;为什么Visual C++项目组转移了工作重点？ &lt;ul&gt; &lt;li&gt;C++程序员对于转到C#没有抵触心理，所以Visual C++项目组不认为有必要尽快实现Visual C#支持的所有特性，比如LINQ和WPF设计器  &lt;li&gt;C++程序员对于让他们的非托管程序调用其他语言的托管代码比用C++来写托管代码更有兴趣  &lt;li&gt;核心模块，例如IE和Windows外壳会更加频繁地更新，而会有更多的非托管代码需要调用这些新的特性，为了这些特性，有必要在MFC中引入新的封装类来节省C++程序员的时间&lt;/ul&gt; &lt;p&gt;Orcas中Visual C++的新特性： &lt;ul&gt; &lt;li&gt;托管代码互操作库。可扩展的托管数据类型和非托管数据类型的转换支持  &lt;li&gt;STL/CLR。使得托管代码可以利用旧的STL编写的算法  &lt;li&gt;Vista支持。对Vista中新的通用控件和文件对话框等界面元素的MFC封装。  &lt;li&gt;DevExpess重构引擎——将包含DevExpess的&lt;a href="http://blog.joycode.com/jiangsheng/archive/2007/02/28/94008.aspx"&gt;Refactor!™ for C++&lt;/a&gt;。&lt;/ul&gt; &lt;p&gt;Orcas之后的考虑 &lt;ul&gt; &lt;li&gt;更新界面。有些Visual C++的代码是针对20年之前的硬件环境设计的，已经不适合现在的需要。新的&lt;a href="http://research.microsoft.com/phoenix/" rel=nofollow&gt;Phoenix&lt;/a&gt;编译引擎使得重写前台变得更加容易。  &lt;li&gt;太多现有的代码需要重构。新的&lt;a href="http://research.microsoft.com/phoenix/" rel=nofollow&gt;Phoenix&lt;/a&gt;编译引擎使得代码分析变得更加容易。  &lt;li&gt;C++标准。新的C++标准TR1可能会在Orcas下一版本开发时成为正式标准。  &lt;li&gt;多核支持。需要编写可以充分利用多CPU的代码。第一个尝试是LINQ。&lt;/ul&gt; &lt;p&gt;结论 &lt;ul&gt; &lt;li&gt;MFC和非托管代码回来了  &lt;li&gt;性能和多平台支持的重要性越来越低，托管代码仍旧具有很大的市场。&lt;/ul&gt; &lt;p&gt;Visual C++项目组的其他动作 &lt;ul&gt; &lt;li&gt;ATL Server发布到了源代码共享站点&lt;a href="http://www.codeplex.com/AtlServer" rel=nofollow&gt;CodePlex&lt;/a&gt;。这包含CAtlRegExp，在.Net和第三方类库(boost,TR1)的竞争下已经不再有必要维护一个单独的条件表达式标准了&lt;/ul&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+STL%2fCLR%2c+Compiler+and+Marshaling&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!664.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!664.entry</guid><pubDate>Wed, 11 Apr 2007 23:41:40 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!664/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!664.entry#comment</wfw:comment><dcterms:modified>2007-04-12T13:35:13Z</dcterms:modified></item><item><title>McDonald's, Yum! Alleged To Break Chinese Wage Laws</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!646.entry</link><description>&lt;p&gt;&lt;a href="http://news.sohu.com/20070330/n249073199.shtml" rel=nofollow&gt;&lt;u&gt;Source&lt;/u&gt;&lt;/a&gt; &lt;p&gt;McDonald's and Yum! Brands, the owner of KFC and Pizza Hut were the targets of an undercover investigation made by New Express Daily reporters.  &lt;p&gt;The report pointed out several violations of labor laws: &lt;ul&gt; &lt;li&gt;Minimum wage. McDonald's, KFC and Pizza Hut were paying part-time employees as much as 40 percent less than the local minimum wage for part-time employees.  &lt;li&gt;Contract. The stores refused to give the contract text to some employees.  &lt;li&gt;Part time probation. Part time probation is still in their contracts text after being outlawed for 4 years.  &lt;li&gt;Long hours. Have part time employee working full time hours (up to 10 hours a day), thus deny them full time benefits.&lt;/ul&gt; &lt;p&gt;A spokesman of KFC argued that their student workers are exempt from the local minimum wage law because they are neither full-time nor part time workers. Legal experts say there is no other alternative-time worker type exists. &lt;p&gt;Update: &lt;p&gt;Another &lt;a href="http://finance.sina.com.cn/g/20070328/06363447115.shtml" rel=nofollow&gt;report&lt;/a&gt; says the Pizza Hut contract states &amp;quot;this contract is not governed by labor law&amp;quot;, while the labor law says it covers any paid labor between business and natural person.  &lt;p&gt;The report also says the majority of McDonald's and KFC employees can not get their contract back after they signed it. Legal experts say this is to destroy the evidence.  McDonald's contract also includes the part time employees discipline, which is changed unilaterally. &lt;p&gt;Facts: &lt;p&gt;McDonald's has 670 branches and over 50,000 employees in China. &lt;p&gt;Yum! Brands has more than 1,500 branches and over 100,000 employees in China. &lt;p&gt;Local minimum wages and Pizza Hut Salary (RMB/hour) &lt;p&gt;Shanghai: Local minimum wage 6.5, Pizza Hut 5.8 &lt;p&gt;Shijiazhuang: Local minimum wage 6.6, Pizza Hut 5.4 &lt;p&gt;Shenyang: Local minimum wage 5.5, Pizza Hut 4.1 &lt;p&gt;Ian: Local minimum wage 6, Pizza Hut 5.5 &lt;p&gt;Shijiazhuang: Local minimum wage 6.6, Pizza Hut 5.4&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+McDonald's%2c+Yum!+Alleged+To+Break+Chinese+Wage+Laws&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!646.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!646.entry</guid><pubDate>Thu, 29 Mar 2007 22:10:59 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!646/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!646.entry#comment</wfw:comment><dcterms:modified>2007-04-02T01:03:28Z</dcterms:modified></item><item><title>MIcrosoft MVP again</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!552.entry</link><description>&lt;blockquote dir=ltr&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;祝贺您！我们非常高兴向您授予 2007 Microsoft® MVP 大奖！&lt;br&gt; &lt;br&gt;您为世界各地的社区做出了巨大贡献，我们通过 Microsoft MVP 大奖对您表示感谢、敬意和鼓励。作为 Microsoft“最有价值专家”(Most Valuable Professional) 奖的得主，您成为全球技术社区领导者精英群体中的一员，该群体与用户和 Microsoft 积极分享实际工作的专业技能，促进了知识的自由、客观交流。Microsoft 向所有不断努力促进社区发展、提升人们生活质量和促进行业成功的 MVP 们表示崇高的敬意。要了解有关 MVP 计划的更多信息，请访问：&lt;a href="http://www.microsoft.com/mvp"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;www.microsoft.com/mvp&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;。&lt;br&gt;&lt;br&gt;非常感谢您在过去一年中为 Visual Developer - Visual C++ 技术社区所做的杰出贡献。&lt;/div&gt;&lt;/blockquote&gt;
&lt;div dir=ltr&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+MIcrosoft+MVP+again&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><category>Microsoft</category><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!552.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!552.entry</guid><pubDate>Mon, 01 Jan 2007 17:37:02 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!552/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!552.entry#comment</wfw:comment><dcterms:modified>2007-01-01T17:37:02Z</dcterms:modified></item><item><title>Visual Studio 2005 Untrusted by IE7</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!539.entry</link><description>&lt;p&gt;Today I upgraded one of my development machine to IE7. Everything looks fine, except I have to change the &lt;a href="http://support.microsoft.com/kb/325204" rel=nofollow&gt;FileDownload event handler&lt;/a&gt; to make my code compile.
&lt;p&gt;However, suddenly I found Visual Studio 2005 is complaining:
&lt;p&gt;&lt;img src="http://p.blog.csdn.net/images/p_blog_csdn_net/jiangsheng/254230/o_VisualStudio2005Untrusted.JPG"&gt; 
&lt;p&gt;Conclusion:
&lt;ul&gt;
&lt;li&gt;Visual Studio is based on WebBrowser control (Is this news story?)
&lt;li&gt;Upgrade to IE7 may break some applications (Again, is this a news story?)&lt;/ul&gt;
&lt;p&gt;Everything else works fine so far...&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Visual+Studio+2005+Untrusted+by+IE7&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><category>Computers and Internet</category><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!539.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!539.entry</guid><pubDate>Sat, 11 Nov 2006 22:22:44 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!539/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!539.entry#comment</wfw:comment><dcterms:modified>2006-11-11T22:47:25Z</dcterms:modified></item><item><title>Error: Unable to cast COM object of type 'mshtml.HTMLDocumentClass' to interface type 'ICustomDoc'</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!533.entry</link><description>&lt;p&gt; &lt;p&gt;This operation failed because the QueryInterface call on the COM component for the interface with IID '{3050F3F0-98B5-11CF-BB82-00AA00BDCE0B}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).  &lt;p&gt;My first reaction was:&amp;quot;What the hell? HTMLDocumentClass is the managed wrapper of MSHTML, and MSHTML is supposed to support the ICustomDoc interface!&amp;quot;  &lt;p&gt;Now I started wondering why the interfaces don't work I created a sandbox project and tried to cast interface there, but it works smoothly. I played with strong name and found no luck. Finally, I found out that it is the frame document that does not support this interface.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Error%3a+Unable+to+cast+COM+object+of+type+'mshtml.HTMLDocumentClass'+to+interface+type+'ICustomDoc'&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!533.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!533.entry</guid><pubDate>Mon, 23 Oct 2006 05:30:39 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!533/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!533.entry#comment</wfw:comment><dcterms:modified>2006-10-27T05:23:54Z</dcterms:modified></item><item><title>CSDN statistics</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!513.entry</link><description>&lt;div&gt;基本信息：&lt;br&gt;UserID：7298&lt;br&gt;CSDN帐号：jiangsheng&lt;br&gt;注册时间：2000-4-29 0:09:00&lt;br&gt;最后一次登录时间：2006-10-16 21:27:00&lt;br&gt;社区昵称：蒋晟.Net[MVP]&lt;br&gt;个人简述：http://bloglines.com/public/jiangsheng&lt;br&gt;https://mvp.support.microsoft.com/profile=53E2CF19-EA8C-48B1-8941-A7AB174DA98A&lt;br&gt;http://www.codeproject.com/script/profile/whos_who.asp?vt=arts&amp;amp;id=65456&lt;br&gt;目前是：.NET技术　VC.NET 小斑竹&lt;br&gt;目前是：VC/MFC　大斑竹&lt;br&gt;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br&gt;截至目前，得分在１００分以上的大板块依次是：&lt;br&gt;Web 开发 得专家分 2143&lt;br&gt;专题开发/技术/项目 得专家分 3586&lt;br&gt;硬件/嵌入开发 得专家分 140&lt;br&gt;Windows专区 得专家分 1197&lt;br&gt;硬件使用 得专家分 115&lt;br&gt;扩充话题 得专家分 6075&lt;br&gt;其他开发语言 得专家分 2702&lt;br&gt;VC/MFC 得专家分 184291&lt;br&gt;VB 得专家分 8330&lt;br&gt;.NET技术 得专家分 17050&lt;br&gt;Delphi 得专家分 8935&lt;br&gt;Java 得专家分 1578&lt;br&gt;C++ Builder 得专家分 5252&lt;br&gt;C/C++ 得专家分 3017&lt;br&gt;MS-SQL  Server 得专家分 133&lt;br&gt;PowerBuilder 得专家分 255&lt;br&gt;Oracle 得专家分 405&lt;br&gt;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br&gt;&lt;br&gt;==================================================================&lt;br&gt;微软技术社区每月发帖量统计&lt;br&gt;2001年07月 1&lt;br&gt;2001年09月 1&lt;br&gt;2002年01月 4&lt;br&gt;2002年04月 1&lt;br&gt;2002年05月 1&lt;br&gt;2002年06月 3&lt;br&gt;2002年10月 1&lt;br&gt;2002年11月 1&lt;br&gt;2003年12月 1&lt;br&gt;2004年04月 2&lt;br&gt;2004年06月 1&lt;br&gt;2004年07月 1&lt;br&gt;2005年04月 1&lt;br&gt;2005年08月 1&lt;br&gt;2005年10月 1&lt;br&gt;2006年04月 1&lt;br&gt;微软技术社区每月回复量统计&lt;br&gt;2000年04月 3&lt;br&gt;2000年05月 4&lt;br&gt;2000年06月 15&lt;br&gt;2000年07月 4&lt;br&gt;2000年08月 27&lt;br&gt;2000年09月 13&lt;br&gt;2000年12月 1&lt;br&gt;2001年03月 7&lt;br&gt;2001年05月 3&lt;br&gt;2001年07月 4&lt;br&gt;2001年08月 1144&lt;br&gt;2001年09月 848&lt;br&gt;2001年10月 296&lt;br&gt;2001年11月 273&lt;br&gt;2001年12月 127&lt;br&gt;2002年01月 378&lt;br&gt;2002年02月 220&lt;br&gt;2002年03月 320&lt;br&gt;2002年04月 459&lt;br&gt;2002年05月 390&lt;br&gt;2002年06月 316&lt;br&gt;2002年07月 305&lt;br&gt;2002年08月 143&lt;br&gt;2002年09月 95&lt;br&gt;2002年10月 128&lt;br&gt;2002年11月 156&lt;br&gt;2002年12月 112&lt;br&gt;2003年01月 124&lt;br&gt;2003年02月 31&lt;br&gt;2003年03月 105&lt;br&gt;2003年04月 193&lt;br&gt;2003年05月 152&lt;br&gt;2003年06月 166&lt;br&gt;2003年07月 150&lt;br&gt;2003年08月 95&lt;br&gt;2003年09月 167&lt;br&gt;2003年10月 184&lt;br&gt;2003年11月 185&lt;br&gt;2003年12月 277&lt;br&gt;2004年01月 240&lt;br&gt;2004年02月 45&lt;br&gt;2004年03月 246&lt;br&gt;2004年04月 89&lt;br&gt;2004年05月 114&lt;br&gt;2004年06月 332&lt;br&gt;2004年07月 441&lt;br&gt;2004年08月 301&lt;br&gt;2004年09月 288&lt;br&gt;2004年10月 205&lt;br&gt;2004年11月 330&lt;br&gt;2004年12月 344&lt;br&gt;2005年01月 279&lt;br&gt;2005年02月 144&lt;br&gt;2005年03月 231&lt;br&gt;2005年04月 292&lt;br&gt;2005年05月 200&lt;br&gt;2005年06月 213&lt;br&gt;2005年07月 416&lt;br&gt;2005年08月 290&lt;br&gt;2005年09月 152&lt;br&gt;2005年10月 290&lt;br&gt;2005年11月 422&lt;br&gt;2005年12月 442&lt;br&gt;2006年01月 348&lt;br&gt;2006年02月 384&lt;br&gt;2006年03月 501&lt;br&gt;2006年04月 508&lt;br&gt;2006年05月 310&lt;br&gt;2006年06月 233&lt;br&gt;2006年07月 157&lt;br&gt;2006年08月 262&lt;br&gt;2006年09月 315&lt;br&gt;2006年10月 299&lt;br&gt;微软技术社区每月得专家分统计&lt;br&gt;2000年05月 40&lt;br&gt;2000年06月 180&lt;br&gt;2000年07月 30&lt;br&gt;2000年08月 165&lt;br&gt;2000年09月 126&lt;br&gt;2000年10月 50&lt;br&gt;2000年11月 80&lt;br&gt;2000年12月 30&lt;br&gt;2001年03月 6&lt;br&gt;2001年04月 20&lt;br&gt;2001年05月 20&lt;br&gt;2001年06月 20&lt;br&gt;2001年08月 3159&lt;br&gt;2001年09月 3300&lt;br&gt;2001年10月 1324&lt;br&gt;2001年11月 1727&lt;br&gt;2001年12月 1765&lt;br&gt;2002年01月 2086&lt;br&gt;2002年02月 1420&lt;br&gt;2002年03月 2445&lt;br&gt;2002年04月 4555&lt;br&gt;2002年05月 5358&lt;br&gt;2002年06月 3544&lt;br&gt;2002年07月 4576&lt;br&gt;2002年08月 3966&lt;br&gt;2002年09月 1854&lt;br&gt;2002年10月 1737&lt;br&gt;2002年11月 2203&lt;br&gt;2002年12月 2157&lt;br&gt;2003年01月 1750&lt;br&gt;2003年02月 484&lt;br&gt;2003年03月 1220&lt;br&gt;2003年04月 2357&lt;br&gt;2003年05月 2444&lt;br&gt;2003年06月 2913&lt;br&gt;2003年07月 2329&lt;br&gt;2003年08月 1634&lt;br&gt;2003年09月 3558&lt;br&gt;2003年10月 3049&lt;br&gt;2003年11月 2985&lt;br&gt;2003年12月 4367&lt;br&gt;2004年01月 2619&lt;br&gt;2004年02月 1330&lt;br&gt;2004年03月 3429&lt;br&gt;2004年04月 1839&lt;br&gt;2004年05月 763&lt;br&gt;2004年06月 3522&lt;br&gt;2004年07月 5204&lt;br&gt;2004年08月 3897&lt;br&gt;2004年09月 6338&lt;br&gt;2004年10月 2372&lt;br&gt;2004年11月 3846&lt;br&gt;2004年12月 3962&lt;br&gt;2005年01月 3350&lt;br&gt;2005年02月 2461&lt;br&gt;2005年03月 3598&lt;br&gt;2005年04月 3392&lt;br&gt;2005年05月 2427&lt;br&gt;2005年06月 2803&lt;br&gt;2005年07月 4835&lt;br&gt;2005年08月 4879&lt;br&gt;2005年09月 3277&lt;br&gt;2005年10月 2607&lt;br&gt;2005年11月 5535&lt;br&gt;2005年12月 4516&lt;br&gt;2006年01月 4265&lt;br&gt;2006年02月 5727&lt;br&gt;2006年03月 7625&lt;br&gt;2006年04月 9342&lt;br&gt;2006年05月 6179&lt;br&gt;2006年06月 5458&lt;br&gt;2006年07月 5305&lt;br&gt;2006年08月 4167&lt;br&gt;2006年09月 4704&lt;br&gt;2006年10月 2668&lt;br&gt;微软技术社区每月解决问题数统计&lt;br&gt;2000年05月 1&lt;br&gt;2000年06月 8&lt;br&gt;2000年07月 1&lt;br&gt;2000年08月 6&lt;br&gt;2000年09月 6&lt;br&gt;2001年03月 2&lt;br&gt;2001年08月 260&lt;br&gt;2001年09月 182&lt;br&gt;2001年10月 67&lt;br&gt;2001年11月 65&lt;br&gt;2001年12月 47&lt;br&gt;2002年01月 82&lt;br&gt;2002年02月 63&lt;br&gt;2002年03月 97&lt;br&gt;2002年04月 156&lt;br&gt;2002年05月 132&lt;br&gt;2002年06月 98&lt;br&gt;2002年07月 97&lt;br&gt;2002年08月 60&lt;br&gt;2002年09月 40&lt;br&gt;2002年10月 37&lt;br&gt;2002年11月 52&lt;br&gt;2002年12月 36&lt;br&gt;2003年01月 52&lt;br&gt;2003年02月 14&lt;br&gt;2003年03月 35&lt;br&gt;2003年04月 69&lt;br&gt;2003年05月 55&lt;br&gt;2003年06月 68&lt;br&gt;2003年07月 59&lt;br&gt;2003年08月 45&lt;br&gt;2003年09月 66&lt;br&gt;2003年10月 79&lt;br&gt;2003年11月 63&lt;br&gt;2003年12月 121&lt;br&gt;2004年01月 96&lt;br&gt;2004年02月 21&lt;br&gt;2004年03月 104&lt;br&gt;2004年04月 31&lt;br&gt;2004年05月 44&lt;br&gt;2004年06月 159&lt;br&gt;2004年07月 206&lt;br&gt;2004年08月 148&lt;br&gt;2004年09月 143&lt;br&gt;2004年10月 85&lt;br&gt;2004年11月 179&lt;br&gt;2004年12月 155&lt;br&gt;2005年01月 124&lt;br&gt;2005年02月 71&lt;br&gt;2005年03月 112&lt;br&gt;2005年04月 131&lt;br&gt;2005年05月 81&lt;br&gt;2005年06月 91&lt;br&gt;2005年07月 205&lt;br&gt;2005年08月 135&lt;br&gt;2005年09月 82&lt;br&gt;2005年10月 134&lt;br&gt;2005年11月 192&lt;br&gt;2005年12月 193&lt;br&gt;2006年01月 155&lt;br&gt;2006年02月 164&lt;br&gt;2006年03月 229&lt;br&gt;2006年04月 246&lt;br&gt;2006年05月 146&lt;br&gt;2006年06月 104&lt;br&gt;2006年07月 55&lt;br&gt;2006年08月 104&lt;br&gt;2006年09月 99&lt;br&gt;2006年10月 57&lt;br&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+CSDN+statistics&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><category>Computers and Internet</category><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!513.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!513.entry</guid><pubDate>Wed, 18 Oct 2006 02:37:50 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!513/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!513.entry#comment</wfw:comment><dcterms:modified>2006-10-18T02:37:50Z</dcterms:modified></item><item><title>'The Microsoft Code' by Adam Barr</title><link>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!508.entry</link><description>&lt;div&gt;===&lt;/div&gt;
&lt;div&gt;The man smirked. &amp;quot;My work here is done. Thanks to your little reboot stunt, your account has already been terminated. Within 15 minutes your cardkey will cease to work. You’ll be paying full price for Office for the rest of your life!&amp;quot; &lt;/div&gt;
&lt;p&gt;===
&lt;p&gt;:)
&lt;p&gt;full story:
&lt;div&gt;&lt;a href="http://www.proudlyserving.com/archives/2006/06/the_microsoft_c_6.html"&gt;http://www.proudlyserving.com/archives/2006/06/the_microsoft_c_6.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+'The+Microsoft+Code'+by+Adam+Barr&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><category>Entertainment</category><comments>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!508.entry#comment</comments><guid isPermaLink="true">http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!508.entry</guid><pubDate>Sat, 24 Jun 2006 02:35:45 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://jiangsheng.spaces.live.com/blog/cns!1BE894DEAF296E0A!508/comments/feed.rss</wfw:commentRss><wfw:comment>http://jiangsheng.spaces.live.com/Blog/cns!1BE894DEAF296E0A!508.entry#comment</wfw:comment><dcterms:modified>2006-06-24T02:35:45Z</dcterms:modified></item><item><title>Photo Album: Sep. 28-Oct. 2 2005 Microsoft Global MVP Summit@Seattle</title><link>http://jiangsheng.spaces.live.com/photos/cns!1BE894DEAF296E0A!200/</link><description>&lt;p&gt;Sep. 28-Oct. 2 2005 Microsoft Global MVP Summit&amp;#64;Seattle&lt;/p&gt;&lt;div&gt;&lt;table cellspacing="0" border="0"&gt;&lt;tr height="8"&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;200&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;201"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;201&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#26080;&amp;#26631;&amp;#39064;&amp;#30340;&amp;#29031;&amp;#29255;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;200&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;202"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;202&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#26080;&amp;#26631;&amp;#39064;&amp;#30340;&amp;#29031;&amp;#29255;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;200&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;203"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;203&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#26080;&amp;#26631;&amp;#39064;&amp;#30340;&amp;#29031;&amp;#29255;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;200&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;204"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;204&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#26080;&amp;#26631;&amp;#39064;&amp;#30340;&amp;#29031;&amp;#29255;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;200&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;205"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;205&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#26080;&amp;#26631;&amp;#39064;&amp;#30340;&amp;#29031;&amp;#29255;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;200&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;206"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;206&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#26080;&amp;#26631;&amp;#39064;&amp;#30340;&amp;#29031;&amp;#29255;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;200&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;207"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;207&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#26080;&amp;#26631;&amp;#39064;&amp;#30340;&amp;#29031;&amp;#29255;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;200&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;208"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;208&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#26080;&amp;#26631;&amp;#39064;&amp;#30340;&amp;#29031;&amp;#29255;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;200&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;209"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;209&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#26080;&amp;#26631;&amp;#39064;&amp;#30340;&amp;#29031;&amp;#29255;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;200&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;210"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;210&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#26080;&amp;#26631;&amp;#39064;&amp;#30340;&amp;#29031;&amp;#29255;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;200&amp;#47;"&gt;More Photos...&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Photo+Album%3a+Sep.+28-Oct.+2+2005+Microsoft+Global+MVP+Summit%40Seattle&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><guid isPermaLink="false">cns!1BE894DEAF296E0A!200</guid><pubDate>Sat, 17 Mar 2007 14:26:54 GMT</pubDate><msn:type>photoalbum</msn:type><live:type>photoalbum</live:type><live:typelabel>Photo album</live:typelabel><cf:itemRSS>http://jiangsheng.spaces.live.com/photos/cns!1BE894DEAF296E0A!200/feed.rss</cf:itemRSS><dcterms:modified>2007-03-17T14:26:54Z</dcterms:modified></item><item><title>Photo Album: Blogs</title><link>http://jiangsheng.spaces.live.com/photos/cns!1BE894DEAF296E0A!418/</link><description>&lt;p&gt;Blogs&lt;/p&gt;&lt;div&gt;&lt;table cellspacing="0" border="0"&gt;&lt;tr height="8"&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;418&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;419"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;419&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#35199;&amp;#30452;&amp;#38376;&amp;#26725;&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;418&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;505"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;505&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;mousekeyboard&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Photo+Album%3a+Blogs&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><guid isPermaLink="false">cns!1BE894DEAF296E0A!418</guid><pubDate>Fri, 01 Dec 2006 17:38:12 GMT</pubDate><msn:type>photoalbum</msn:type><live:type>photoalbum</live:type><live:typelabel>Photo album</live:typelabel><cf:itemRSS>http://jiangsheng.spaces.live.com/photos/cns!1BE894DEAF296E0A!418/feed.rss</cf:itemRSS><dcterms:modified>2006-12-01T17:38:12Z</dcterms:modified></item><item><title>Photo Album: April 25  '05 Field Trip to Texas Congress</title><link>http://jiangsheng.spaces.live.com/photos/cns!1BE894DEAF296E0A!171/</link><description>&lt;p&gt;April 25  &amp;#39;05 Field Trip to Texas Congress&lt;/p&gt;&lt;div&gt;&lt;table cellspacing="0" border="0"&gt;&lt;tr height="8"&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;171&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;172"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;172&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Untitled Photo&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;171&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;173"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;173&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Untitled Photo&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;171&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;174"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;174&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Untitled Photo&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;171&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;175"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;175&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Untitled Photo&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;171&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;176"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;176&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Untitled Photo&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;171&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;177"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;177&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Untitled Photo&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;a href="http://jiangsheng.spaces.live.com&amp;#47;photos&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;171&amp;#47;cns&amp;#33;1BE894DEAF296E0A&amp;#33;178"&gt;&lt;img src="http://storage.live.com&amp;#47;items&amp;#47;1BE894DEAF296E0A&amp;#33;178&amp;#58;thumbnail" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Untitled Photo&lt;/p&gt;&lt;/td&gt;&lt;td width="15"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Photo+Album%3a+April+25++'05+Field+Trip+to+Texas+Congress&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><guid isPermaLink="false">cns!1BE894DEAF296E0A!171</guid><pubDate>Sat, 30 Apr 2005 18:35:37 GMT</pubDate><msn:type>photoalbum</msn:type><live:type>photoalbum</live:type><live:typelabel>Photo album</live:typelabel><cf:itemRSS>http://jiangsheng.spaces.live.com/photos/cns!1BE894DEAF296E0A!171/feed.rss</cf:itemRSS><dcterms:modified>2005-04-30T18:35:37Z</dcterms:modified></item><item><title>Blog list: Blog list</title><link>http://jiangsheng.spaces.live.com/Lists/cns!1BE894DEAF296E0A!407</link><description>&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://spaces.msn.com&amp;#47;members&amp;#47;azona2005"&gt;Yanqiong Li&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://spaces.msn.com&amp;#47;members&amp;#47;bettyxiong1&amp;#47;"&gt;Beini Xiong&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://blog.joycode.com&amp;#47;jiangsheng"&gt;jiangsheng&amp;#64;joycode&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://blog.csdn.net&amp;#47;jiangsheng"&gt;jiangsheng&amp;#64;csdn&lt;/a&gt;&lt;/p&gt;&lt;p&gt;oops, it is unstable...&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://bloglines.com&amp;#47;public&amp;#47;jiangsheng"&gt;jiangsheng&amp;#39;s Feeds&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://spaces.msn.com&amp;#47;members&amp;#47;lumaca9721"&gt;&amp;#25103;&amp;#26376;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;srworld&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://spaces.msn.com&amp;#47;members&amp;#47;ladybugbibi&amp;#47;"&gt;ladybugbibi of ACC DEVW1413&amp;#47;Fall 2005&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Elsa&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://spaces.msn.com&amp;#47;members&amp;#47;sharonzhangy&amp;#47;"&gt;sharoN-Sharon&lt;/a&gt;&lt;/p&gt;&lt;p&gt;srworld&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://spaces.msn.com&amp;#47;members&amp;#47;X-Blues"&gt;&amp;#26575;&amp;#34013;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;srworld&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://spaces.msn.com&amp;#47;members&amp;#47;cqqdreamer"&gt;Tracy&lt;/a&gt;&lt;/p&gt;&lt;p&gt;normal person&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://blog.sina.com.cn&amp;#47;myblog&amp;#47;index_rss.php&amp;#63;uid&amp;#61;1495406681"&gt;jiangsheng&amp;#64;sina&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.cityzhi.com&amp;#47;blogs&amp;#47;cityzhi&amp;#47;31&amp;#47;index.shtml"&gt;Grace Zhang&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Blog+list%3a+Blog+list&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><guid isPermaLink="false">cns!1BE894DEAF296E0A!407</guid><pubDate>Thu, 09 Feb 2006 17:46:42 GMT</pubDate><msn:type>bloglist</msn:type><live:type>bloglist</live:type><live:typelabel>Blog list</live:typelabel><cf:itemRSS>http://jiangsheng.spaces.live.com/Lists/cns!1BE894DEAF296E0A!407/feed.rss</cf:itemRSS><dcterms:modified>2006-02-09T17:46:42Z</dcterms:modified></item><item><title>Custom List: Misc</title><link>http://jiangsheng.spaces.live.com/Lists/cns!1BE894DEAF296E0A!421</link><description>&lt;p&gt;Misc&lt;/p&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.dianahacker.com&amp;#47;bedhandbook"&gt;The Eletronic BedFord Handbook&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Offer eletronic English exercise&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://alicat.austincc.edu&amp;#47;screens&amp;#47;opacmenu.html"&gt;ACC Libraries Catalog&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.townsendpress.net&amp;#47;apps&amp;#47;tpexercises&amp;#47;home.php"&gt;Townsend Press Online Exercise Center&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Grammar and Usage, Reading Books, Vocabulary Books&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://webmessenger.msn.com"&gt;Msn Web Messenger&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://en.wikipedia.org&amp;#47;wiki&amp;#47;Main_Page"&gt;Wikipedia, the free encyclopedia&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.google.com"&gt;Google&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.austincc.edu&amp;#47;akochis&amp;#47;perl&amp;#47;perl.htm"&gt;ITNW 2310 PERL Scripting&lt;/a&gt;&lt;/p&gt;&lt;p&gt;T-TH Section 31679&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.csdn.net&amp;#47;List3.aspx&amp;#63;Column&amp;#61;881e8c59-6751-4559-9297-8ba6275b7680"&gt;CSDN &amp;#19987;&amp;#26639;&amp;#20316;&amp;#23478;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.brothersjudd.com&amp;#47;index.cfm&amp;#47;fuseaction&amp;#47;reviews.detail&amp;#47;book_id&amp;#47;749&amp;#47;Foundation&amp;#32;T.htm"&gt;Review of Isaac Asimov&amp;#39;s The Foundation Trilogy&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://allgames.gamesh.com&amp;#47;srw&amp;#47;bbs&amp;#47;"&gt;srworld bbs&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.seochat.com&amp;#47;seo-tools&amp;#47;pagerank-search&amp;#47;"&gt;SEO Tools - PageRank Search&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The PageRank Search tool allows you to search Google using any keyword&amp;#40;s&amp;#41; you wish. It will then return, in order of Google relevance, the sites associated with those keywords. Each result displays a graphical bar with the PageRank of that particular site&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://library2.cqpress.com&amp;#47;cqresearcher&amp;#47;"&gt;CQ researchers&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://perldoc.perl.org&amp;#47;index-functions.html"&gt;Perl functions A-Z&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.inputking.com&amp;#47;GB&amp;#47;index.php"&gt;InputKing&amp;#22312;&amp;#32447;&amp;#20013;&amp;#25991;&amp;#36755;&amp;#20837;&amp;#31995;&amp;#32479;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#31995;&amp;#32479;&amp;#19978;&amp;#38754;&amp;#27809;&amp;#20013;&amp;#25991;&amp;#36755;&amp;#20837;&amp;#27861;&amp;#30340;&amp;#35805;&amp;#21487;&amp;#20197;&amp;#30475;&amp;#30475;&amp;#36825;&amp;#20010;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://austin.craigslist.org&amp;#47;"&gt;austin classified&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://www.flickr.com&amp;#47;photos&amp;#47;jiangsheng&amp;#47;"&gt;Sheng Jiang&amp;#39;s photos &amp;#64;Yahoo flickr&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href="http://photos.yahoo.com&amp;#47;sheng_jiang"&gt;Sheng Jiang&amp;#39;s photos &amp;#64;Yahoo&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2011020917763304970&amp;page=RSS%3a+Custom+List%3a+Misc&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=jiangsheng.spaces.live.com&amp;amp;GT1=jiangsheng"&gt;</description><guid isPermaLink="false">cns!1BE894DEAF296E0A!421</guid><pubDate>Tue, 10 Jan 2006 04:33:13 GMT</pubDate><msn:type>list</msn:type><live:type>list</live:type><live:typelabel>List</live:typelabel><cf:itemRSS>http://jiangsheng.spaces.live.com/Lists/cns!1BE894DEAF296E0A!421/feed.rss</cf:itemRSS><dcterms:modified>2006-01-10T04:33:13Z</dcterms:modified></item></channel></rss>