<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feeds.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feeds.feedsky.com/csdn.net/zhuweisky" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feeds.feedsky.com/csdn.net/zhuweisky" type="application/rss+xml"></fs:self_link><lastBuildDate>Sun, 15 Aug 2010 10:05:00 GMT</lastBuildDate><title>zhuweisky的专栏</title><description>C++/C# ,企业级服务器开发</description><link>http://blog.csdn.net/blogrss.aspx?username=zhuweisky</link><item><title>极速通信框架 ESFramework.Rapid</title><link>http://blog.csdn.net/zhuweisky/archive/2010/08/15/5813969.aspx</link><description>&lt;br /&gt;　ESFramework/ESPlatform 4.0非常强大，目标为百万级的用户同时在线，因为强大，所以使用也较为复杂，配置也较多。但是如果我们的应用只是一个中小型的通信应用（同时在线5000人以下），直接使用ESFramework 4.0就有点显得杀鸡用牛刀了。基于ESFramework/ESPlatform 4.0，我提供了一个极速通信框架ESFramework.Rapid，来解决类似中小型的通信应用，以最简洁的方式来使用ESFramework。&lt;br /&gt;　　使用ESFramework.Rapid来构建你的通信程序，你只需要了解两个引擎（服务端引擎和客户端引擎）的接口就可以了，接口的定义相当简单，上手容易。废话不多说，先来看看这两个接口。&lt;br /&gt;客户端引擎接口：    /// &lt;br /&gt;    /// IClientEngine ESFramework.Rapid客户端引擎接口。&lt;br /&gt;    /// &lt;br /&gt;    public interface IClientEngine :IDisposable&lt;br /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/403004984/zhuweisky/csdn.net/s.gif?r=http://blog.csdn.net/zhuweisky/archive/2010/08/15/5813969.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/zhuweisky/403004984/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/zhuweisky/403004984/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sun, 15 Aug 2010 18:05:00 +0800</pubDate><author>sky</author><guid isPermaLink="false">http://blog.csdn.net/zhuweisky/archive/2010/08/15/5813969.aspx</guid><dc:creator>sky</dc:creator><fs:srclink>http://blog.csdn.net/zhuweisky/archive/2010/08/15/5813969.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/zhuweisky/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/zhuweisky/~1066946/403004984/1066946</fs:itemid></item><item><title>ESFramwork 4.0 概述</title><link>http://blog.csdn.net/zhuweisky/archive/2010/08/12/5808263.aspx</link><description>　从06年第一次发布ESFramwork的相关介绍以来，已经走过了4个年头，ESFramwork也从0.1版本成长到4.0。ESFramwork 4.0 已经不再是一个简单的通信框架，而是形成了一个解决巨大量（百万级）用户同时在线的高性能的通信体系和完整的解决方案。　　　　ESFramwork的层级结构如下所示：　　你的通信应用程序可以基于图中的任何一层来构建，但是选择的层次越高，框架帮你做的事情也就越多，你的开发也就越高效和快速。我们来粗略地看看每一层。一．ESFramework　　ESFramework 作为通信框架的核心，定义了消息处理的骨架流程，提供了多种通信引擎实现，相对单纯而稳定。在4年前，这个核心基本已经形成，我们再回顾一下消息处理的骨架流程：　　在ESFramework解决方案中，我们非常方便的将一个独立的通信应用程序迁移到ESPlatform体系中，以应对日益增长的用户数量。这只要修&lt;img src=&quot;http://www1.feedsky.com/t1/403004708/zhuweisky/csdn.net/s.gif?r=http://blog.csdn.net/zhuweisky/archive/2010/08/12/5808263.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/zhuweisky/403004708/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/zhuweisky/403004708/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 12 Aug 2010 15:02:00 +0800</pubDate><author>sky</author><guid isPermaLink="false">http://blog.csdn.net/zhuweisky/archive/2010/08/12/5808263.aspx</guid><dc:creator>sky</dc:creator><fs:srclink>http://blog.csdn.net/zhuweisky/archive/2010/08/12/5808263.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/zhuweisky/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/zhuweisky/~1066946/403004708/1066946</fs:itemid></item><item><title>Form或UserControl接收不到KeyDown等事件？</title><link>http://blog.csdn.net/zhuweisky/archive/2010/07/10/5726300.aspx</link><description>&lt;br /&gt;　　当Form包含自定义控件，或UserControl存在嵌套时，外层的对象就会接收不到KeyDown等事件了，但是，我们可以通过override基类的ProcessDialogKey方法来达到同样的效果，比如：        protected override bool ProcessDialogKey(Keys keyData)&lt;br /&gt;        {&lt;br /&gt;            #region PageDown&lt;br /&gt;            if (keyData == Keys.PageDown)&lt;br /&gt;            {                &lt;br /&gt;            }&lt;br /&gt;            #endregion&lt;br /&gt;            return true;&lt;br /&gt;        }   &lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/403004709/zhuweisky/csdn.net/s.gif?r=http://blog.csdn.net/zhuweisky/archive/2010/07/10/5726300.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/zhuweisky/403004709/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/zhuweisky/403004709/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sat, 10 Jul 2010 15:07:00 +0800</pubDate><author>sky</author><guid isPermaLink="false">http://blog.csdn.net/zhuweisky/archive/2010/07/10/5726300.aspx</guid><dc:creator>sky</dc:creator><fs:srclink>http://blog.csdn.net/zhuweisky/archive/2010/07/10/5726300.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/zhuweisky/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/zhuweisky/~1066946/403004709/1066946</fs:itemid></item><item><title>ESBasic 可复用的.NET类库（24） －－ 层级结构缓存IHiberarchyCache</title><link>http://blog.csdn.net/zhuweisky/archive/2010/06/30/5705827.aspx</link><description>&lt;br /&gt;1.缘起：&lt;br /&gt;    从IMultiTree到IAgileMultiTree，一切进展得都不错。但是，还有改进的地方。多叉树的一个优点在于，根据指定的节点能够非常迅速地找到其所有的子节点。但是缺点在于，根据节点值的ID定位到目标节点不够快，因为需要对所有的节点进行遍历操作。当节点非常多、层次非常深时，这种定位操作可能会严重的影响效率。&lt;br /&gt;    我设计了层级结构缓存ESBasic.ObjectManagement.Cache.IHiberarchyCache来加速这种根据节点值ID定位节点的访问。所谓“层级结构”，就是类似我们在IMultiTree章节缘起中介绍的那个多叉树式的组织结构。&lt;br /&gt;使用IHiberarchyCache可以使两种操作都足够快：一是根据ID找到目标对象，另一种是根据ID找到其所有下级对象。&lt;br /&gt;      IHiberarchyCache融合了IAgileMultiTree和Dictionary两种对象容器的优势，以达到对层级结构的高效缓存。&lt;br /&gt;　　层级结构缓存的形象示意图如下：&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/403004710/zhuweisky/csdn.net/s.gif?r=http://blog.csdn.net/zhuweisky/archive/2010/06/30/5705827.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/zhuweisky/403004710/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/zhuweisky/403004710/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 30 Jun 2010 10:04:00 +0800</pubDate><author>sky</author><guid isPermaLink="false">http://blog.csdn.net/zhuweisky/archive/2010/06/30/5705827.aspx</guid><dc:creator>sky</dc:creator><fs:srclink>http://blog.csdn.net/zhuweisky/archive/2010/06/30/5705827.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/zhuweisky/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/zhuweisky/~1066946/403004710/1066946</fs:itemid></item><item><title>关于重复绑定TCP端口的疑惑？</title><link>http://blog.csdn.net/zhuweisky/archive/2010/05/26/5626883.aspx</link><description>&lt;br /&gt;　　如果我使用TcpListener绑定本地的7000端口，并启动监听。然后，再使用TcpClient绑定本地7000端口，此时需要开启TcpClient的地址重用设置： TcpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);&lt;br /&gt;　　如果使用该TcpClient向其它的服务器请求建立TCP连接，则有时可以建立成功，有时又抛出System.Net.Sockets.SocketException异常 -- “由于连接方在一段时间后没有正确答复或连接的主机没有反应，连接尝试失败。”&lt;br /&gt;　　正在摸索中.......&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/403004711/zhuweisky/csdn.net/s.gif?r=http://blog.csdn.net/zhuweisky/archive/2010/05/26/5626883.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/zhuweisky/403004711/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/zhuweisky/403004711/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 26 May 2010 11:06:00 +0800</pubDate><author>sky</author><guid isPermaLink="false">http://blog.csdn.net/zhuweisky/archive/2010/05/26/5626883.aspx</guid><dc:creator>sky</dc:creator><fs:srclink>http://blog.csdn.net/zhuweisky/archive/2010/05/26/5626883.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/zhuweisky/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/zhuweisky/~1066946/403004711/1066946</fs:itemid></item><item><title>ESBasic 可复用的.NET类库（23） －－ 灵巧多叉树 IAgileMultiTree</title><link>http://blog.csdn.net/zhuweisky/archive/2010/05/12/5584691.aspx</link><description>&lt;br /&gt;1.缘起：&lt;br /&gt;    我们还是以多叉树IMultiTree章节介绍的那个例子来继续讲解。假设，在系统运行的过程中，集团又成立了分公司D及其下属的一些单位，这些资料已经被存入了数据库中，但是这些信息在我们当前正在运行的MultiTree实例中并不存在，如果此时向MultiTree实例请求与D分公司相关的信息，那么将一无所获。除非，你手动地将D分公司及其下属单位的节点值添加到MultiTree实例中。这是一个比较麻烦的动作。&lt;br /&gt;    试着设想一下这样一种情况，当我们要请求的节点在当前MultiTree实例中并不存在时，多叉树能自动地加载目标节点到MultiTree实例中，而且，如果需要的话，它会自动加载当前MultiTree实例中不存在的而目标节点又需要的其所有直接和间接的上级节点。比如，我们要向当前MultiTree实例请求D分公司下的部门M下的K小组，那么MultiTree会首先自动加载D分公司节点，再自动加载M部门节点，再自动加载K小组节点，然后返回K小组节点。&lt;br /&gt;   我设计了ESBasic.ObjectManagement.Trees.IAg&lt;img src=&quot;http://www1.feedsky.com/t1/403004712/zhuweisky/csdn.net/s.gif?r=http://blog.csdn.net/zhuweisky/archive/2010/05/12/5584691.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/zhuweisky/403004712/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/zhuweisky/403004712/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 12 May 2010 09:04:00 +0800</pubDate><author>sky</author><guid isPermaLink="false">http://blog.csdn.net/zhuweisky/archive/2010/05/12/5584691.aspx</guid><dc:creator>sky</dc:creator><fs:srclink>http://blog.csdn.net/zhuweisky/archive/2010/05/12/5584691.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/zhuweisky/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/zhuweisky/~1066946/403004712/1066946</fs:itemid></item><item><title>.NET做的画图板，试用一下！</title><link>http://blog.csdn.net/zhuweisky/archive/2010/04/30/5547807.aspx</link><description>&lt;br /&gt;用.NET实现的电子白板，支持以下功能：&lt;br /&gt;1.支持的形状&lt;br /&gt;（1）线段、箭头线、双箭头线&lt;br /&gt;（2）水平肘型连接符、垂直肘型连接符&lt;br /&gt;（3）矩形、三角形、椭圆（圆）&lt;br /&gt;（4）文本&lt;br /&gt;（5）自由曲线&lt;br /&gt;（6）插入位图&lt;br /&gt;&lt;br /&gt;2.功能&lt;br /&gt;（1）水平对齐、垂直对齐&lt;br /&gt;（2）复制对象&lt;br /&gt;（3）拖拉以改变形状、修改对象属性（线条粗细、颜色、填充色、字体、虚实线）&lt;br /&gt;（4）层叠设置&lt;br /&gt;（5）缩放&lt;br /&gt;（6）一个项目中可以包含多页、新增页、删除页&lt;br /&gt;（5）打印预览、打印 （横向、纵向）&lt;br /&gt;（6）保存为位图&lt;br /&gt;（7）将项目保存为*.pf文件&lt;br /&gt;&lt;br /&gt;下面是截图：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　　试用下载点击这里。&lt;br /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/403004713/zhuweisky/csdn.net/s.gif?r=http://blog.csdn.net/zhuweisky/archive/2010/04/30/5547807.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/zhuweisky/403004713/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/zhuweisky/403004713/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 30 Apr 2010 09:03:00 +0800</pubDate><author>sky</author><guid isPermaLink="false">http://blog.csdn.net/zhuweisky/archive/2010/04/30/5547807.aspx</guid><dc:creator>sky</dc:creator><fs:srclink>http://blog.csdn.net/zhuweisky/archive/2010/04/30/5547807.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/zhuweisky/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/zhuweisky/~1066946/403004713/1066946</fs:itemid></item><item><title>ESBasic 可复用的.NET类库（22） －－ 多叉树 IMultiTree</title><link>http://blog.csdn.net/zhuweisky/archive/2010/04/18/5501623.aspx</link><description>&lt;br /&gt;1.缘起：&lt;br /&gt;    假设我们要描述一个集团公司的组织结构，这个集团公司的体系分为如下几层：集团、公司、子公司、部门、小组。即一个集团由多个公司构成，每个公司又有几个子公司构成，每个子公司拥有多个部门，每个部门又内分为几个小组。&lt;br /&gt;    很明显，这种体系结构就是一个多叉树。我设计了ESBasic.ObjectManagement.Trees.Multiple.IMultiTree来抽象多叉树，其提供了很多简便的方法让我们对多叉树进行节点查询和操作。&lt;br /&gt;多叉树的形象示意图如下：&lt;br /&gt;&lt;br /&gt;　　从上图中我们看到，集团是根节点，其深度索引为0。任何一个父节点下都有0~N（N&gt;0）个子节点。并且每往下一层级，节点的深度索引就增加1。&lt;br /&gt;    还有一个很重要的概念我要先介绍一下：节点路径（Path），我又称之为序列码（Sequence Code）。所谓节点路径是指从根节点到目标节点的完整路径。比如：“集团，公司A，子公司2，部门4，小组5”就是一个节点路径，根据这个路径我们可以非常迅速地定位到示例图中名为“小组5”的节点。示例路径中使用&lt;img src=&quot;http://www1.feedsky.com/t1/403004714/zhuweisky/csdn.net/s.gif?r=http://blog.csdn.net/zhuweisky/archive/2010/04/18/5501623.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/zhuweisky/403004714/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/zhuweisky/403004714/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sun, 18 Apr 2010 15:30:00 +0800</pubDate><author>sky</author><guid isPermaLink="false">http://blog.csdn.net/zhuweisky/archive/2010/04/18/5501623.aspx</guid><dc:creator>sky</dc:creator><fs:srclink>http://blog.csdn.net/zhuweisky/archive/2010/04/18/5501623.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/zhuweisky/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/zhuweisky/~1066946/403004714/1066946</fs:itemid></item><item><title>【Emit基础】如何发射foreach代码？</title><link>http://blog.csdn.net/zhuweisky/archive/2010/04/02/5501625.aspx</link><description>&lt;br /&gt;　　对于集合的遍历，使用foreach是非常方便的，但是Emit动态生成foreach的代码就要复杂很多。它涉及到以下几个方面：&lt;br /&gt;（1）IEnumerable 是所有可枚举类型的基础接口。&lt;br /&gt;（2）IEnumerator，通过IEnumerable 接口的GetEnumerator方法可以获取枚举器IEnumerator，而对集合元素的遍历正是由IEnumerator的MoveNext方法完成的。&lt;br /&gt;（3）遍历完成以后，需要调用IEnumerator的Dispose方法释放它。&lt;br /&gt;（4）为了IEnumerator被正常释放，还需要使用try....finally块包含相应的代码。&lt;br /&gt;&lt;br /&gt;下面我们来举个例子，比如对于如下的C#代码：    public interface ICompute&lt;br /&gt;    {&lt;br /&gt;        void Add(int a, int b);       &lt;br /&gt;    }&lt;br /&gt;    public class Compute : IComput&lt;img src=&quot;http://www1.feedsky.com/t1/403004715/zhuweisky/csdn.net/s.gif?r=http://blog.csdn.net/zhuweisky/archive/2010/04/02/5501625.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/zhuweisky/403004715/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/zhuweisky/403004715/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 02 Apr 2010 11:30:00 +0800</pubDate><author>sky</author><guid isPermaLink="false">http://blog.csdn.net/zhuweisky/archive/2010/04/02/5501625.aspx</guid><dc:creator>sky</dc:creator><fs:srclink>http://blog.csdn.net/zhuweisky/archive/2010/04/02/5501625.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/zhuweisky/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/zhuweisky/~1066946/403004715/1066946</fs:itemid></item><item><title>GDI+编程经验：滚动条、缩放、绘制闪烁</title><link>http://blog.csdn.net/zhuweisky/archive/2010/03/26/5501627.aspx</link><description>&lt;br /&gt;　　我们在使用GDI+实现类似画图板这样的系统时，经常需要支持平移、滚动条、缩放等功能、解决绘制时的闪烁，对于缺乏GDI+开发经验的朋友，经常会在这些问题上纠缠一段或长或短的时间。在这里，我将自己的经验小结一下，给后来的朋友作个参考。&lt;br /&gt;&lt;br /&gt;1.如何解决绘制闪烁？&lt;br /&gt;（1）所有的绘制动作都应该Paint事件中完成。&lt;br /&gt;　　比如，即使我们要拖动一个View object，通常在MouseMove事件中处理拖动行为，但是不要在MouseMove事件中调用Graphics.Draw方法，而是应该采用Command模式，将要绘制的动作封装为一个对象，传递到下一次的Paint事件中再绘制。&lt;br /&gt;（2）设置双缓冲。&lt;br /&gt;　　通常我们会选择在某个控件的表面进行绘制，那么在初始化时，可以通过执行下面的代码来启用双缓冲：this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, t&lt;img src=&quot;http://www1.feedsky.com/t1/403004716/zhuweisky/csdn.net/s.gif?r=http://blog.csdn.net/zhuweisky/archive/2010/03/26/5501627.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/csdn.net/zhuweisky/403004716/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/csdn.net/zhuweisky/403004716/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 26 Mar 2010 15:30:00 +0800</pubDate><author>sky</author><guid isPermaLink="false">http://blog.csdn.net/zhuweisky/archive/2010/03/26/5501627.aspx</guid><dc:creator>sky</dc:creator><fs:srclink>http://blog.csdn.net/zhuweisky/archive/2010/03/26/5501627.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/zhuweisky/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/zhuweisky/~1066946/403004716/1066946</fs:itemid></item></channel></rss>
