效果图:
主要技术点是找到要显示的最大页索引和最小页索引。这里用的是查找法,即从当前索引pageIndex开始,分别向前和向后找,一直找个够showPages个或不能再找下去。代码:        //找出要显示的最大索引和最小索引    
         int maxIndex=pageIndex;    
         int minIndex=pageIndex;    
         showPages--;                //去掉当前页    
         bool noOper;    
         while (showPages > 0)    
         {    
             noOper = true;    
             if (maxIndex + 1 < pageCount && showPages > 0)  //向前找一页    
             {    
                 maxIndex++;    
                 showPages--;    
                 noOper = false;    
             }    
             if (minIndex - 1 >= 0 && showPages > 0)    //向后找一页    
             {    
                 minIndex--;    
                 showPages--;    
                 noOper = false;    
             }    
             if (noOper)                        //没有查找,说明showPages>总页数    
                 break;    
         }    
就时间复杂度来说,最好的时候是O(n/2),最坏的时候是O(n-1);
我总感觉能有数学的方法来找出最大和最小页索引,请高手指点。这有点像求1到100的和,有人用for循环从1加到100,而聪明的人用等差公式,一下子就出来。
有源码,下载地址:http://download.csdn.net/source/2557429