﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-牵着老婆满街逛-随笔分类-代码收藏</title><link>http://www.cppblog.com/tx7do/category/1485.html</link><description>危机感是一种强大前进的动力！&lt;/br&gt;
GMail/GTalk: yanglinbo#google.com;&lt;/br&gt;
MSN/Email: tx7do#yahoo.com.cn;&lt;/br&gt;
QQ: 3 0 3 3 9 6 9 2 0 .</description><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 09:58:47 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 09:58:47 GMT</pubDate><ttl>60</ttl><item><title>(转)连连看API版本的源代码</title><link>http://www.cppblog.com/tx7do/archive/2006/09/17/12597.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Sun, 17 Sep 2006 13:48:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/09/17/12597.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/12597.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/09/17/12597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/12597.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/12597.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#0000ff" size="6">head.h</font>
		</p>
		<p>#define M 14<br />//M为连连看牌的高+2<br />#define N 10<br />//N为连连看牌的宽+2</p>
		<p>struct point<br />{<br /> int x;<br /> int y;<br />};</p>
		<p>/*********************************************************/</p>
		<p>template &lt; typename T, int m, int n &gt; class Matrix<br />{<br />protected: <br /> T matrix[M][N];<br />public:<br /> Matrix();<br /> Matrix( char* filename );//通过文件里的数据初始化<br /> void show_matrix();//输出矩阵<br /> void set_element( int x, int y, T num );//num为元素值<br /> T get_element( int x, int y );<br />};</p>
		<p>/*********************************************************/</p>
		<p>class Linker_Matrix:public Matrix &lt; int, M, N &gt;  //连连看的牌矩阵类<br />{<br /> /* matrix[M][N]为牌矩阵；<br />  从[1][1]开始，到[M-2][N-2]有效;<br />  外围一圈为预留的配对路径;<br />  值＝0为无牌，即牌配对之后被消掉的的状态;<br />  其他值即为牌的类别，相同值的牌方可配对;  <br /> */<br />private:<br /> //time_t curtime;<br /> point p1,p2,way[ 4 ];<br />  //p1为起点，p2为终点，way[M+N]用于记录搜索到的路径<br /> int index;//路径的长度;<br /> int turn_count;//路径的转弯次数,&gt;2就搜索失败;<br /> Matrix &lt; int, M, N &gt; visited;<br />  //是否访问过矩阵类，1:访问过 0:未访问 <br />public:</p>
		<p> Linker_Matrix();<br /> Linker_Matrix( int low, int high, int num );<br />  //随机选择元素初始化，元素值的范围在low－high，<br />  //每个值有num个;<br /> Linker_Matrix( int num );<br />  //随机选择元素初始化，从1开始，每个值有num个;<br />  <br /> void show_matrix();<br /> void count( int low, int high );//统计各个值的个数，测试用;<br /> bool auto_search();//自动搜索出一对配对的牌<br /> bool find_way( point p1, point p2 );<br />  //搜索路径 true－有路径 false－无;  <br /> void auto_play();//自动完成所有的配对；<br /> void init_search();//进行搜索前的初始化 <br /> bool man_search( point p1,  point p2);<br /> bool is_matched( point p1, point p2 );<br />  //是否配对 true－配对 false－否;<br /> int  get_element( int x, int y );<br /> void get_point(point &amp;p1,point &amp;p2);<br />  //通过p1,p2提取自动搜索出的匹配两点<br /> void reShuffle();//重新洗牌;<br />};</p>
		<p>/*********************************************************/<br /></p>
		<p>
				<font color="#0000ff" size="6">head.cpp</font>
		</p>
		<p>#include "head.h"<br />#include&lt;iostream.h&gt;<br />#include&lt;fstream.h&gt;<br />#include&lt;stdlib.h&gt;<br />#include&lt;stdio.h&gt;<br />#include&lt;math.h&gt;<br />#include&lt;time.h&gt;<br />#include&lt;conio.h&gt;</p>
		<p>
		</p>
		<p>template &lt; typename T, int m, int n &gt; <br />Matrix &lt; T, m, n &gt;::Matrix()<br />{<br /> for( int i=0; i&lt;m; i++ )<br />  for( int j=0; j&lt;n; j++ )<br />   matrix[i][j] = 0;<br /> <br />}</p>
		<p>template &lt; typename T, int m, int n &gt; <br />Matrix&lt; T, m, n &gt;::Matrix( char* filename )<br />{<br /> ifstream infile(filename);<br /> <br /> for( int i=0; i&lt;M; i++ )<br />  for( int j=0; j&lt;N; j++ )<br />   infile &gt;&gt; matrix[i][j];<br />}</p>
		<p>
		</p>
		<p>template &lt; typename T, int m, int n &gt; <br />void Matrix&lt; T, m, n &gt;::show_matrix()<br />{ <br /> for( int i=0; i&lt;m; i++ )<br /> {<br />  for( int j=0; j&lt;n; j++ )<br />   cout&lt;&lt; matrix[i][j]&lt;&lt;'\t';<br />  cout&lt;&lt;endl;<br /> }<br /> cout&lt;&lt;endl;<br />}</p>
		<p>template &lt; typename T, int m, int n &gt; <br />inline void Matrix&lt; T, m, n &gt;::set_element( int x, int y, T element )<br />{<br /> matrix[x][y] = element;<br />}</p>
		<p>template &lt; typename T, int m, int n &gt; <br />T Matrix&lt; T, m, n &gt;::get_element( int x, int y )<br />{<br /> return matrix[x][y];<br />}</p>
		<p>/*********************************************************/</p>
		<p>Linker_Matrix::Linker_Matrix():Matrix&lt; int, M, N &gt;()<br />{<br /> p1.x = p1.y = 0;<br /> p2.x = p2.y = 0;<br /> index = 0;<br /> turn_count = 0;<br /> //max=0;</p>
		<p> for( int k=0; k&lt;4; k++ )<br />  way[k].x = way[k].y = 0;<br />}</p>
		<p>Linker_Matrix::Linker_Matrix( int low, int high, int num )<br /> :Matrix&lt; int, M, N &gt;()<br />{ <br /> <br /> int m,n;<br /> time_t curtime; //记录当前时间</p>
		<p> p1.x = p1.y = 0;<br /> p2.x = p2.y = 0;<br /> index = 0;</p>
		<p> time(&amp;curtime);//取得当前时间<br /> //srand(curtime);//用当前时间作种子，产生随机数</p>
		<p> for( int k=0; k&lt;4; k++ )<br />  way[k].x = way[k].y = 0;</p>
		<p> for( int i=low; i&lt;=high; i++ )<br />  for( int j=0; j&lt;num; j++ )<br />  {<br />   do<br />   {<br />    m = rand()%(M-2) + 1;<br />    n = rand()%(N-2) + 1;<br />   }<br />   while( 0==m || 0==n || 0!=matrix[m][n] );<br />   matrix[m][n]=i;<br />  }<br />}</p>
		<p>Linker_Matrix::Linker_Matrix(int num ):Matrix&lt; int, M, N &gt;()<br />{ <br /> <br /> int m,n;<br /> time_t curtime; //记录当前时间</p>
		<p> p1.x = p1.y = 0;<br /> p2.x = p2.y = 0;<br /> index = 0;</p>
		<p> time(&amp;curtime);//取得当前时间<br /> srand(curtime);//用当前时间作种子，产生随机数</p>
		<p> for( int k=0; k&lt;4; k++ )<br />  way[k].x = way[k].y = 0;</p>
		<p> for( int i=1; i&lt;=(M-2)*(N-2)/num; i++ )<br />  for( int j=0; j&lt;num; j++ )<br />  {<br />   do<br />   {<br />    m = rand()%(M-2) + 1;<br />    n = rand()%(N-2) + 1;<br />   }<br />   while( 0==m || 0==n || 0!=matrix[m][n] );<br />   matrix[m][n]=i;<br />  }<br />}</p>
		<p>void Linker_Matrix::show_matrix()<br />{<br /> <br /> for( int i=1; i&lt;M-1; i++ )<br /> {<br />  for( int j=1; j&lt;N-1; j++ )<br />   cout&lt;&lt;matrix[i][j]&lt;&lt;'\t';<br />  cout&lt;&lt;endl;<br /> }<br /> cout&lt;&lt;endl;<br />}</p>
		<p>void Linker_Matrix::count( int low, int high )<br />{<br /> int *num,k;</p>
		<p> //动态分配 <br /> num = new int[ high-low+2 ];<br /> //初始化<br /> for( k=0; k&lt;high-low+2; k++ )<br />  num[k]=0;<br /> <br /> //计数<br /> for( int i=1; i&lt;M-1; i++ )<br />  for( int j=1; j&lt;N-1; j++ )<br />   num[ matrix[i][j] ]++; <br />  <br /> //输出<br /> for( k=0; k&lt;high-low+2; k++ )<br />  cout&lt;&lt;k&lt;&lt;":"&lt;&lt;num[k]&lt;&lt;'\t';<br /> cout&lt;&lt;endl;</p>
		<p> //销毁<br /> delete[] num;<br />}</p>
		<p>inline bool Linker_Matrix::is_matched( const point p1, const point p2 )<br />{<br /> return matrix[ p1.x ][ p1.y ] == matrix[ p2.x ][ p2.y ];<br />}</p>
		<p>bool Linker_Matrix::auto_search()<br />{<br /> int i,j,m,n;<br /> //static k = 0;<br /> bool all_is_zero = true;//是否所有元素都为0 true:yes false:no</p>
		<p> for( i=1; i&lt;M-1; i++ )<br /> for( j=1; j&lt;N-1; j++ )<br /> {<br />  if( matrix[i][j]!=0 )//元素不为0时方进行配对<br />  {<br />   all_is_zero=false;<br />   p1.x = i; p1.y = j;</p>
		<p>   for( m=1; m&lt;M-1; m++ )<br />   for( n=1; n&lt;N-1; n++ )<br />   { <br />    if( i!=m || j!=n )//元素不为本身时，方进行搜索路径<br />    { <br />     //k++;<br />     p2.x=m; p2.y=n;</p>
		<p>     init_search();<br />     /*if(k==29)<br />     {<br />      init_search();<br />      show_matrix();<br />     }*/<br />     <br />     if ( is_matched( p1, p2 ) &amp;&amp; find_way( p1, p2 ) )<br />     /*逻辑式这样写的原因是只要is_matched(p1,p2)为false，<br />     逻辑式必为false，find_way(p1,p2)就不会执行；<br />     当两元素数值相同且有路径时，执行下面<br />     */<br />     { <br />       //show_matrix();<br />       //cout&lt;&lt;turn_count&lt;&lt;endl;<br />       //matrix[ p1.x ][ p1.y ] = 0;<br />       //matrix[ p2.x ][ p2.y ] = 0;<br />       //k++;<br />       //cout&lt;&lt;p1.x&lt;&lt;' '&lt;&lt;p1.y&lt;&lt;' '&lt;&lt;p2.x&lt;&lt;' '&lt;&lt;p2.y&lt;&lt;':'&lt;&lt;k&lt;&lt;endl;<br />       //show_matrix();<br />       //count(1,21);<br />       //goto jump;<br />       //找到一个就退出<br />      <br />       return true;<br />      //}<br />     }<br />     <br />    }/*<br />    if( k&gt;MAX)//搜索次数过大，强制跳出<br />        return false;*/<br />   }<br />  }<br />  //jump:  ;<br /> }</p>
		<p> if( true==all_is_zero )//元素全部为0，返回false<br />  return false;<br /> return false;//没有匹配时,返回false<br />}</p>
		<p>bool Linker_Matrix::find_way(  point p1, point p2 )<br />{<br /> /*<br /> 本方法是本程序的核心算法，<br /> 作用是以p1为起点，p2为终点进行路径的搜索；*/<br /> /*采用水平垂直扫描法,先确定两个转折点之间是否相通,再判断<br /> 转折点与相应端点间是否相通<br /> */</p>
		<p> int i,j;<br /> int px1,px2,py1,py2;<br /> int temp;<br /> bool x_across,y_across;</p>
		<p> //如果相邻<br /> if( ( p1.x+1==p2.x &amp;&amp; p1.y==p2.y )<br />  || ( p1.x==p2.x &amp;&amp; p1.y+1==p2.y )<br />  || ( p1.x-1==p2.x &amp;&amp; p1.y==p2.y )<br />  || ( p1.x==p2.x &amp;&amp; p1.y-1==p2.y ) )<br /> {<br />  //把路径记录下来<br />  //起点<br />  way[0].x=p1.x;<br />  way[0].y=p1.y;<br />  //直线转折点为0<br />  way[1].x=0;<br />  way[1].y=0;<br />  way[2].x=0;<br />  way[2].y=0;<br />  //终点<br />  way[3].x=p2.x;<br />  way[3].y=p2.y;</p>
		<p>  return true;<br /> }</p>
		<p> //直线连通<br /> //如果在水平方向上<br /> if( p1.x==p2.x )<br /> {<br />  if(p1.y&gt;p2.y)<br />  {<br />   temp=p1.y;<br />   p1.y=p2.y;<br />   p2.y=temp;<br />  }</p>
		<p>  for(j=p1.y+1; j&lt;p2.y; j++ )<br />  {<br />   if( matrix[p1.x][j]!=0)<br />   {<br />    break;<br />   }<br />  }</p>
		<p>  //如果两点之间相通<br />  if(j==p2.y &amp;&amp;  matrix[p1.x][j-1]==0 )<br />  {<br />   <br />   //把路径记录下来<br />   //起点<br />   way[0].x=p1.x;<br />   way[0].y=p1.y;<br />   //直线转折点为0<br />   way[1].x=0;<br />   way[1].y=0;<br />   way[2].x=0;<br />   way[2].y=0;<br />   //终点<br />   way[3].x=p2.x;<br />   way[3].y=p2.y;</p>
		<p>   return true;<br />  }<br /> }</p>
		<p> //如果在垂直方向上<br /> if( p1.y==p2.y )<br /> {<br />  if(p1.x&gt;p2.x)<br />  {<br />   temp=p1.x;<br />   p1.x=p2.x;<br />   p2.x=temp;<br />  }</p>
		<p>  for(i=p1.x+1; i&lt;p2.x; i++ )<br />  {<br />   if( matrix[i][p1.y]!=0)<br />   {<br />    break;<br />   }<br />  }<br />  //如果两点之间相通<br />  if(i==p2.x &amp;&amp;  matrix[i-1][p1.y]==0 )<br />  {</p>
		<p>
				<br />   //把路径记录下来<br />   //起点<br />   way[0].x=p1.x;<br />   way[0].y=p1.y;<br />   //直线转折点为0<br />   way[1].x=0;<br />   way[1].y=0;<br />   way[2].x=0;<br />   way[2].y=0;<br />   //终点<br />   way[3].x=p2.x;<br />   way[3].y=p2.y;</p>
		<p>   return true;<br />  }<br /> }</p>
		<p>
				<br /> <br /> //折线连通<br /> /*if( p1.x!=p2.x &amp;&amp; p1.y!=p2.y)<br /> {*/<br />  if(p1.y&gt;p2.y)<br />  {<br />   //两点交换<br />   temp=p1.x;<br />   p1.x=p2.x;<br />   p2.x=temp;</p>
		<p>   temp=p1.y;<br />   p1.y=p2.y;<br />   p2.y=temp;</p>
		<p>
				<br />  }</p>
		<p>
				<br /> //横向扫描<br /> for(i=0;i&lt;=M-1;i++)<br /> {  <br />  x_across=true;</p>
		<p>  //是否水平连通<br />  for(j=p1.y+1; j&lt;=p2.y-1; j++ )<br />  {<br />   if(matrix[i][j]!=0 )<br />   {<br />    x_across=false;<br />    break;<br />   }<br />  }</p>
		<p>  if(matrix[i][p1.y]!=0  )<br />  {<br />   if( i!=p1.x )<br />    x_across=false;<br />  }<br />  if(matrix[i][p2.y]!=0  )<br />  {<br />   if( i!=p2.x )<br />    x_across=false;<br />  } <br />   <br />  if(x_across)<br />  {//水平连通才执行下面<br />  /* for(j=1; j&lt;N-2; j++ )<br />   {*/<br />    //检验在垂直上是否连通</p>
		<p>   px1=px2=i;<br />   py1=p1.y;<br />   py2=p2.y;<br />   while( px1!=p1.x || px2!=p2.x )<br />   {<br />    //如果当前点不空且不为p1点,就跳出循环,从下一行开始检测<br />    if( matrix[px1][py1]!=0 &amp;&amp; (px1!=p1.x || py1!=p1.y) )<br />     break;</p>
		<p>    //如果当前点不空且不为p2点,就跳出循环,从下一行开始检测<br />    if( matrix[px2][py2]!=0 &amp;&amp; (px2!=p2.x || py2!=p2.y) )<br />     break;</p>
		<p>    //如果两点都为空<br />    //垂直向p1点靠近一格<br />    if(px1&lt;p1.x)<br />     px1++;<br />    else if(px1&gt;p1.x)<br />     px1--;<br />    //垂直向p2点靠近一格<br />    if(px2&lt;p2.x)<br />     px2++;<br />    else if(px2&gt;p2.x)<br />     px2--;<br />   }<br />     <br />   //如果能到达两个端点<br />   if(px1==p1.x &amp;&amp; py1==p1.y &amp;&amp; px2==p2.x &amp;&amp; py2==p2.y )<br />   {<br />    //起点<br />    way[0].x=p1.x;<br />    way[0].y=p1.y;<br />    //两个转折点<br />    way[1].x=i;<br />    way[1].y=p1.y;<br />    way[2].x=i;<br />    way[2].y=p2.y;<br />    //终点<br />    way[3].x=p2.x;<br />    way[3].y=p2.y; <br />    return true;<br />   }</p>
		<p>  }<br /> }</p>
		<p> if(p1.x&gt;p2.x)<br />  {<br />   //两点交换<br />   temp=p1.x;<br />   p1.x=p2.x;<br />   p2.x=temp;</p>
		<p>   temp=p1.y;<br />   p1.y=p2.y;<br />   p2.y=temp;</p>
		<p>
				<br />  }<br /> //纵向扫描<br /> for(j=0;j&lt;=N-1;j++)<br /> {  <br />  y_across=true;<br />  //是否垂直连通<br />  for(i=p1.x+1; i&lt;=p2.x-1; i++ )<br />  {<br />   if(matrix[i][j]!=0)<br />   {<br />    y_across=false;<br />    break;<br />   }<br />  }</p>
		<p>  if(matrix[p1.x][j]!=0  )<br />  {<br />   if( j!=p1.y )<br />    y_across=false;<br />  }<br />  if(matrix[p2.x][j]!=0  )<br />  {<br />   if( j!=p2.y )<br />    y_across=false;<br />  }<br />    <br />  if(y_across)<br />  {//垂直连通才执行下面<br />  /* for(j=1; j&lt;N-2; j++ )<br />   {*/<br />    //检验在水平上是否连通</p>
		<p>   py1=py2=j;<br />   px1=p1.x;<br />   px2=p2.x;<br />   while( py1!=p1.y || py2!=p2.y)<br />   {<br />    //如果当前点不空且不为p1点,就跳出循环,从下一行开始检测<br />    if( matrix[px1][py1]!=0 &amp;&amp; (px1!=p1.x || py1!=p1.y) )<br />     break;</p>
		<p>    //如果当前点不空且不为p2点,就跳出循环,从下一行开始检测<br />    if( matrix[px2][py2]!=0 &amp;&amp; (px2!=p2.x || py2!=p2.y) )<br />     break;</p>
		<p>    //如果两点都为空<br />    //水平向p1点靠近一格<br />    if(py1&lt;p1.y)<br />     py1++;<br />    else if(py1&gt;p1.y)<br />     py1--;<br />    //水平向p2点靠近一格<br />    if(py2&lt;p2.y)<br />     py2++;<br />    else if(py2&gt;p2.y)<br />     py2--;<br />   }<br />     <br />   //如果能到达两个端点<br />   if(px1==p1.x &amp;&amp; py1==p1.y &amp;&amp; px2==p2.x &amp;&amp; py2==p2.y )<br />   {<br />    //起点<br />    way[0].x=p1.x;<br />    way[0].y=p1.y;<br />    //两个转折点<br />    way[1].x=p1.x;<br />    way[1].y=j;<br />    way[2].x=p2.x;<br />    way[2].y=j;<br />    //终点<br />    way[3].x=p2.x;<br />    way[3].y=p2.y; <br />    return true;<br />   }</p>
		<p>  }<br /> }<br /> //} <br /> return false;</p>
		<p>}</p>
		<p>void Linker_Matrix::init_search()<br />{<br /> visited = Matrix&lt; int, M, N &gt;();<br /> index = 0;<br /> turn_count = 0;<br />}</p>
		<p>void Linker_Matrix::auto_play()<br />{<br />  while( auto_search() );<br />}</p>
		<p>bool Linker_Matrix::man_search(const point p1, const point p2)<br />{<br /> init_search();<br /> if( find_way( p1, p2 ) )<br /> {<br />  matrix[p1.x][p1.y]=0;<br />  matrix[p2.x][p2.y]=0;<br />  return true;<br /> }<br /> return false;<br />}</p>
		<p> int Linker_Matrix::get_element( int x, int y )<br /> {<br />  return matrix[x][y];<br /> }</p>
		<p>void Linker_Matrix::get_point(point &amp;p1,point &amp;p2)<br />{<br /> //if( auto_search() )<br /> //{<br />  p1=this-&gt;p1;<br />  p2=this-&gt;p2;<br />  //return true;<br /> //}<br /> <br /> //return false;<br />}</p>
		<p>void Linker_Matrix::reShuffle()<br />{<br /> int m,n,k;<br /> time_t curtime; //记录当前时间</p>
		<p> //p1.x = p1.y = 0;<br /> //p2.x = p2.y = 0;<br /> //index = 0;</p>
		<p> time(&amp;curtime);//取得当前时间<br /> srand(curtime);//用当前时间作种子，产生随机数</p>
		<p> //for( int k=0; k&lt;4; k++ )<br /> // way[k].x = way[k].y = 0;</p>
		<p> for( int i=1; i&lt;=(M-2); i++ )<br /> for( int j=1; j&lt;=(N-2); j++ )<br /> {<br />  if(matrix[i][j]!=0)<br />  {<br />   do<br />   {<br />    m = rand()%(M-2) + 1;<br />    n = rand()%(N-2) + 1;<br />   }<br />   while( 0==matrix[m][n] );</p>
		<p>   k=matrix[i][j];<br />   matrix[i][j]=matrix[m][n];<br />   matrix[m][n]=k;<br />  }<br /> }<br />}</p>
		<p>
		</p>
		<p>
				<font color="#0000ff" size="6">linker.cpp</font>
		</p>
		<p>#include&lt;stdlib.h&gt;<br />#include&lt;stdio.h&gt;<br />#include&lt;string.h&gt;<br />#include &lt;windows.h&gt;</p>
		<p>#include "head.h"<br />#include "resource.h"</p>
		<p>TCHAR szAppName[] = TEXT ("Linker") ;//程序名称<br />const int xsize=610,ysize=520;<br />const int TimerID=1;</p>
		<p>
				<br />LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM ) ;</p>
		<p>int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,<br />                    PSTR szCmdLine, int iCmdShow )<br />{ <br /> HWND         hwnd ;<br /> MSG          msg ;<br /> WNDCLASS     wndclass ;<br /> HACCEL hAccel ;//快捷键表</p>
		<p>
				<br /> wndclass.style         = CS_HREDRAW | CS_VREDRAW ;<br /> wndclass.lpfnWndProc   = WndProc ;<br /> wndclass.cbClsExtra    = 0 ;<br /> wndclass.cbWndExtra    = 0 ;<br /> wndclass.hInstance     = hInstance ;<br /> wndclass.hIcon         = LoadIcon (hInstance, MAKEINTRESOURCE (IDI_ICON)) ;<br /> wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;<br /> wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;<br /> wndclass.lpszMenuName  = szAppName ;<br /> wndclass.lpszClassName = szAppName ;</p>
		<p> if (!RegisterClass (&amp;wndclass))<br /> {<br />  MessageBox (NULL, TEXT ("This program requires Windows NT!"), <br />    szAppName, MB_ICONERROR) ;<br />  return 0 ;<br /> }<br />     <br /> hwnd = CreateWindow ( szAppName,  // window class name<br />                          TEXT ("连连看 V1.08.18.01"), // window caption<br />                          WS_OVERLAPPEDWINDOW &amp; <br />     ~WS_MAXIMIZEBOX &amp; ~WS_SIZEBOX,// window style<br />     //没有最大化按钮和无法改变窗口大小<br />                          CW_USEDEFAULT,  // initial x position<br />                          CW_USEDEFAULT,  // initial y position<br />                          xsize,  // initial x size<br />                          ysize,  // initial y size<br />                          NULL,    // parent window handle<br />                          NULL,    // window menu handle<br />                          hInstance,   // program instance handle<br />                          NULL ) ;   // creation parameters<br />     <br /> ShowWindow (hwnd, iCmdShow) ;<br /> UpdateWindow (hwnd) ;<br />     <br /> hAccel = LoadAccelerators (hInstance, TEXT ("MY_ACCELERATOR")) ;</p>
		<p> while(GetMessage (&amp;msg, NULL, 0, 0))<br /> {<br />  if(!TranslateAccelerator (hwnd, hAccel, &amp;msg))<br />  {<br />                  TranslateMessage (&amp;msg) ;<br />                  DispatchMessage (&amp;msg) ;<br />  }<br /> }</p>
		<p> return msg.wParam ;<br />}</p>
		<p>BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message, <br />                            WPARAM wParam, LPARAM lParam)<br />{<br />     switch (message)<br />     {<br />     case WM_INITDIALOG :<br />          return TRUE ;<br />          <br />     case WM_COMMAND :<br />          switch (LOWORD (wParam))<br />          {<br />          case IDOK :<br />          case IDCANCEL :<br />               EndDialog (hDlg, 0) ;<br />               return TRUE ;<br />          }<br />          break ;<br />     }<br />     return FALSE ;<br />}</p>
		<p>LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, <br />    WPARAM wParam, LPARAM lParam )<br />{<br /> HDC  hdc,hdcMem;<br /> //HBRUSH hBrush ;<br /> PAINTSTRUCT ps ;//绘图结构<br /> static RECT  rect,rect2 ;//矩形<br /> static HBITMAP hBitmap1,hBitmap2;//两个位图文件句柄<br /> HBITMAP hBitmap3;<br /> BITMAP  bitmap ;//位图文件<br /> static int cxBack,cyBack,cxPre,cyPre,cxStart,cyStart;<br />    //cxBack,cyBack:背景图片大小<br />    //cxPre,cyPre:牌面图片大小  <br /> int x,y,i,j,num;</p>
		<p> bool find;//是否有路径标志<br /> static bool first_started=false;//是否是刚打开程序<br /> static bool bPrompt=false;//是否提示<br /> TCHAR    szBuffer[14];<br /> static HINSTANCE hInstance ;<br /> static HMENU  hMenu ;//菜单句柄<br /> static int  iCurrentLevel = IDM_APP_LOW ;//记录游戏难度<br /> static int  iTime = 100 ;//记录游戏的剩余时间<br /> static  int  iShuffle=0,iPrompt=0;<br />  //iShuffle:重新洗牌的剩余次数,iPrompt:提示的剩余次数<br /> static int iCount=0;//统计消去的对数,用于判断是否胜利<br /> static Linker_Matrix linker ;//连连看的运算矩阵<br /> static point  pSelected[2] ;//用于记录选择的两个点<br />     <br /> switch (message)<br /> {<br /> case WM_CREATE://进行初始化；<br />  //PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;<br />  //GetClientRect(hwnd,&amp;rect);</p>
		<p>  MoveWindow(hwnd,(GetSystemMetrics(SM_CXSCREEN)-xsize)/2,(GetSystemMetrics(SM_CYSCREEN)-ysize)/2,xsize,ysize,false);<br />  //将窗口移置屏幕中间</p>
		<p>  hInstance = ((LPCREATESTRUCT) lParam)-&gt;hInstance ;<br />  hMenu = GetMenu (hwnd) ;<br />  pSelected[0].x=pSelected[0].y=0;<br />  pSelected[1].x=pSelected[1].y=0;</p>
		<p>  hBitmap1 = LoadBitmap (hInstance, TEXT ("IDB_BITMAP_BACK"));<br />  hBitmap2 = LoadBitmap (hInstance, TEXT ("IDB_BITMAP_PRE"));<br />  </p>
		<p>  GetObject (hBitmap1, sizeof (BITMAP), &amp;bitmap) ;</p>
		<p>  cxBack = bitmap.bmWidth ;<br />  cyBack = bitmap.bmHeight/7 ;<br />  GetObject (hBitmap2, sizeof (BITMAP), &amp;bitmap) ;</p>
		<p>  cxPre = bitmap.bmWidth/2 ;<br />  cyPre = bitmap.bmHeight/42 ;</p>
		<p>  //SendMessage(hwnd,WM_COMMAND,IDM_APP_START,0);<br />  first_started=true;<br />  <br />  return 0 ;</p>
		<p> case WM_TIMER:<br />  if(iTime&gt;0)<br />   iTime--;</p>
		<p>  //使字体所在区域无效化,重绘<br />  rect.left = 0;<br />  rect.right = xsize;<br />  rect.top  = 0;<br />  rect.bottom = 20;<br />  InvalidateRect (hwnd, &amp;rect, true) ;<br />  rect.left = 0;<br />  rect.right = 0;<br />  rect.top  = 0;<br />  rect.bottom = 0;</p>
		<p>  if( iTime&lt;=0 )<br />  {<br />   iCount=0;<br />   KillTimer (hwnd, TimerID) ;<br />   MessageBox (hwnd, TEXT ("时间到，你输了!!"),szAppName, MB_OK | MB_ICONQUESTION) ;<br />   </p>
		<p>   SendMessage(hwnd,WM_COMMAND,IDM_APP_START,0);</p>
		<p>   linker=Linker_Matrix();<br />   InvalidateRect (hwnd, NULL, true) ;<br />  }<br />  </p>
		<p>
				<br />  return 0;</p>
		<p>  </p>
		<p> case WM_PAINT:<br />  hdc = BeginPaint (hwnd, &amp;ps) ;<br />  <br />  //GetClientRect (hwnd, &amp;rect) ;<br />  hdcMem = CreateCompatibleDC (hdc) ;<br />   <br />  </p>
		<p>  //绘制牌面<br />  for(i=1; i&lt;=M-2; i++ )<br />   for(j=1; j&lt;=N-2; j++ )<br />   {<br />    num=linker.get_element(i,j);<br />    if( num!=0 )<br />    {<br />    x=i*(cxBack-3);<br />    y=j*(cyBack-4)-30;<br />    SelectObject (hdcMem, hBitmap1) ;<br />    BitBlt (hdc, x, y, cxBack, cyBack, hdcMem, 0, cyBack*(num%6+1), SRCCOPY) ;<br />    SelectObject (hdcMem, hBitmap2) ;<br />    BitBlt (hdc, x+1, y+6, cxPre, cyPre, hdcMem,  cxPre, cyPre*num, SRCAND) ;<br />    BitBlt (hdc, x+1, y+6, cxPre, cyPre, hdcMem,  0, cyPre*num, SRCPAINT) ;<br />   <br />    }<br />   }<br />  <br />  //当选中第一张牌时，在上面画个圈<br />  if(rect.left!=0 &amp;&amp; rect.right!=0 &amp;&amp; rect.top!=0 &amp;&amp; rect.bottom!=0 &amp;&amp; bPrompt==false)<br />  {<br />   SelectObject (hdc, GetStockObject (GRAY_BRUSH)) ;<br />   Ellipse(hdc,rect.left ,rect.top ,rect.left+10 ,rect.top+10 );<br />   rect.left=0;<br />   rect.right=0 ;<br />   rect.top=0; <br />   rect.bottom=0;</p>
		<p>  }<br />  if( first_started==false)<br />  {<br />   sprintf(szBuffer,"剩余时间: %d 秒",iTime);<br />   TextOut (hdc, 0, 0, szBuffer, strlen (szBuffer)) ;<br />   TextOut (hdc, xsize/5, 0, TEXT("每消去一对剩余时间+2秒"), strlen (TEXT("每消去一对剩余时间+3秒"))) ;<br />   sprintf(szBuffer,"剩余洗牌次数: %d 次",iShuffle);<br />   TextOut (hdc, xsize/2+10, 0, szBuffer, strlen (szBuffer)) ;<br />   sprintf(szBuffer,"剩余提示次数: %d 次",iPrompt);<br />   TextOut (hdc, xsize/4*3, 0, szBuffer, strlen (szBuffer)) ;<br />  }</p>
		<p>  if(first_started)<br />  {//第一次打开程序</p>
		<p>   /*SendMessage(hwnd,WM_COMMAND,IDM_APP_ABOUT,0);<br />   //发送 单击关于菜单 消息<br />   SendMessage(hwnd,WM_COMMAND,IDM_APP_START,0);<br />   //发送 单击开始游戏菜单 消息，询问是否开始；*/<br />   hBitmap3 = LoadBitmap (hInstance, TEXT ("IDB_BITMAP_START"));<br />   GetObject (hBitmap3, sizeof (BITMAP), &amp;bitmap) ;<br />   cxStart = bitmap.bmWidth;<br />   cyStart = bitmap.bmHeight;</p>
		<p>   SelectObject (hdcMem, hBitmap3) ;<br />   StretchBlt  (hdc, 0, 0, xsize, ysize, hdcMem, 0,0, cxStart, cyStart,MERGECOPY) ;<br />   PlaySound (TEXT ("start.wav"), NULL, SND_FILENAME | SND_ASYNC) ;<br />   //first_started=false;<br />  }<br /> <br />  if(bPrompt)<br />  {<br />   SelectObject (hdc, GetStockObject (BLACK_BRUSH)) ;<br />   Ellipse(hdc,rect.left ,rect.top ,rect.left+10 ,rect.top+10 );<br />   Ellipse(hdc,rect2.left ,rect2.top ,rect2.left+10 ,rect2.top+10 );<br />   rect.left=0;<br />   rect.right=0 ;<br />   rect.top=0; <br />   rect.bottom=0;<br />   rect2.left=0;<br />   rect2.right=0 ;<br />   rect2.top=0; <br />   rect2.bottom=0;</p>
		<p>   bPrompt=false;<br />  }</p>
		<p>  DeleteDC (hdcMem) ;<br />  EndPaint (hwnd, &amp;ps) ;</p>
		<p>
		</p>
		<p>  return 0 ;<br /> case WM_INITMENUPOPUP:</p>
		<p>  if( first_started==false )<br />  {<br />   EnableMenuItem ((HMENU) wParam, IDM_APP_RESHUFFLE,   MF_ENABLED) ;<br />   EnableMenuItem ((HMENU) wParam, IDM_APP_PROMPT,   MF_ENABLED) ;<br />  }</p>
		<p>  if(iShuffle==0)<br />   EnableMenuItem ((HMENU) wParam, IDM_APP_RESHUFFLE,  MF_GRAYED) ;<br />  if(iPrompt==0)<br />   EnableMenuItem ((HMENU) wParam, IDM_APP_PROMPT,  MF_GRAYED) ;</p>
		<p>  <br />  break;</p>
		<p> case WM_COMMAND :<br />  switch (LOWORD (wParam))<br />  {</p>
		<p>  case IDM_APP_START://单击开始游戏菜单<br />   if ( IDYES == MessageBox (hwnd, TEXT ("开始游戏吗？"),<br />    szAppName, MB_YESNO | MB_ICONQUESTION) )<br />   //弹出确认窗口，按YES开始游戏<br />   {<br />    if ( iCurrentLevel==IDM_APP_LOW )<br />    {//难度为低<br />     iTime=90;<br />     iPrompt=3;<br />     iShuffle=2;<br />     linker=Linker_Matrix(6);<br />    <br />    }</p>
		<p>    if ( iCurrentLevel==IDM_APP_MIDDLE )<br />    {//难度为中<br />     iTime=90;<br />     iPrompt=3;<br />     iShuffle=2;<br />     linker=Linker_Matrix(4);<br />     <br />    }<br />    <br />    if ( iCurrentLevel==IDM_APP_HIGH )<br />    {//难度为高<br />     iTime=60;<br />     iPrompt=3;<br />     iShuffle=1;<br />     linker=Linker_Matrix(4);<br />    <br />    }<br />   <br />    SetTimer (hwnd, TimerID, 1000, NULL) ;<br />    InvalidateRect (hwnd, NULL, TRUE) ;<br />    first_started=false;<br />    iCount=0;</p>
		<p>   }<br />   else<br />    SendMessage(hwnd,WM_CLOSE,0,0);<br />   break;</p>
		<p>  case IDM_APP_EXIT ://单击退出游戏菜单<br />   SendMessage(hwnd,WM_CLOSE,0,0);<br />   break;</p>
		<p>  case IDM_APP_ABOUT ://单击关于菜单<br />   DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc) ;<br />   break ;</p>
		<p>  case IDM_APP_LOW:<br />  case IDM_APP_MIDDLE:<br />  case IDM_APP_HIGH:<br />   //单击难度菜单<br />   CheckMenuItem (hMenu, iCurrentLevel, MF_UNCHECKED) ;<br />   iCurrentLevel = LOWORD (wParam) ;<br />   CheckMenuItem (hMenu, iCurrentLevel, MF_CHECKED) ;<br />   break;</p>
		<p>  case IDM_APP_RESHUFFLE://单击重新洗牌按钮<br />   if(iShuffle&gt;0 )<br />   { <br />    iShuffle--;<br />    linker.reShuffle();<br />   }<br />   //if(iShuffle==0)<br />    //EnableMenuItem ((HMENU) wParam, IDM_APP_RESHUFFLE,  MF_GRAYED) ;<br />   <br />   //使文字所在区域无效化,重绘<br />   /*rect.left = 0;<br />   rect.right = xsize;<br />   rect.top  = 0;<br />   rect.bottom = 20;*/<br />   InvalidateRect (hwnd, NULL , true) ;<br />   rect.left = 0;<br />   rect.right = 0;<br />   rect.top  = 0;<br />   rect.bottom = 0;<br />   break;</p>
		<p>  case IDM_APP_PROMPT:<br />   if(iPrompt&gt;0 &amp;&amp; linker.auto_search() )//提示次数&gt;0,且找到匹配<br />   {<br />    //pSelected[0].x=pSelected[0].y=0;<br />    linker.get_point(pSelected[0],pSelected[1]);<br />    iPrompt--;</p>
		<p>    //使文字所在区域无效化,重绘<br />    rect.left = 0;<br />    rect.right = xsize;<br />    rect.top  = 0;<br />    rect.bottom = 20;<br />    InvalidateRect (hwnd, &amp;rect, true) ;<br />    rect.left = 0;<br />    rect.right = 0;<br />    rect.top  = 0;<br />    rect.bottom = 0;<br />     <br />    //sprintf(szBuffer," %d %d %d %d",pSelected[0].x,pSelected[0].y,pSelected[1].x,pSelected[1].y);<br />    //MessageBox (hwnd, szBuffer,szAppName, MB_OK | MB_ICONQUESTION) ;<br />    <br />    rect.left = pSelected[0].x*(cxBack-3);<br />    rect.right = rect.left+(cxBack-3)+3;<br />    rect.top  = pSelected[0].y *(cyBack-4)-30;<br />    rect.bottom = rect.top + (cyBack-4)+4;<br />    //Ellipse(hdc,rect.left ,rect.top ,rect.right ,rect.bottom );<br />    InvalidateRect (hwnd, &amp;rect, true) ;<br />    <br />    rect2.left = pSelected[1].x *(cxBack-3);<br />    rect2.right = rect2.left+(cxBack-3)+3;<br />    rect2.top  = pSelected[1].y *(cyBack-4)-30;<br />    rect2.bottom = rect2.top + (cyBack-4)+4;<br />    //Ellipse(hdc,rect.left ,rect.top ,rect.right ,rect.bottom );<br />    InvalidateRect (hwnd, &amp;rect2, true) ;<br /> <br />    pSelected[0].x=0;<br />    pSelected[0].y=0;<br />    pSelected[1].x=0;<br />    pSelected[1].y=0;</p>
		<p>   }</p>
		<p>
		</p>
		<p>   bPrompt=true;<br />   //if(iPrompt==0)<br />    //EnableMenuItem ((HMENU) wParam, IDM_APP_PROMPT,  MF_GRAYED) ;<br />   break;<br />  }<br />  return 0 ;<br /> case WM_LBUTTONUP:<br />  //取得鼠标坐标<br />  x= LOWORD (lParam)/(cxBack-3);<br />  y= ( HIWORD (lParam)+30)/(cyBack-4);<br />  if (x&gt;=1 &amp;&amp; x&lt;=M-2 &amp;&amp; y&gt;=1 &amp;&amp; y&lt;=N-2 &amp;&amp; linker.get_element(x,y)!=0 )<br />  {<br />  /*<br />  sprintf(szBuffer,"%d",y);<br />  MessageBox (hwnd, TEXT (szBuffer),<br />    szAppName, MB_YESNO | MB_ICONQUESTION) ;*/<br />  //如果是在第一张牌按下鼠标<br />  if(pSelected[0].x==0 &amp;&amp; pSelected[0].y==0 )<br />  {<br />   //hBrush = GetStockObject (GRAY_BRUSH) ;<br />   //SelectObject (hdc, hBrush) ;<br />   <br />   //hdc = BeginPaint (hwnd, &amp;ps) ;<br />   //SelectObject (hdc, GetStockObject (BLACK_PEN)) ;</p>
		<p>   //在该牌上画圆<br />    rect.left = x *(cxBack-3);<br />    rect.right = rect.left+(cxBack-3)+3;<br />    rect.top  = y *(cyBack-4)-30;<br />    rect.bottom = rect.top + (cyBack-4)+4;<br />    //Ellipse(hdc,rect.left ,rect.top ,rect.right ,rect.bottom );<br />    InvalidateRect (hwnd, &amp;rect, true) ;<br />    //EndPaint (hwnd, &amp;ps) ;<br />   //把牌的位置记录下来<br />   pSelected[0].x=x;<br />   pSelected[0].y=y;<br />  }<br />  else <br />  { //如果是第二张牌上按鼠标</p>
		<p>   //把牌的位置记录下来<br />   pSelected[1].x=x;<br />   pSelected[1].y=y;</p>
		<p>  <br />   if( (pSelected[0].x!=pSelected[1].x ||<br />    pSelected[0].y!=pSelected[1].y) &amp;&amp;<br />    linker.is_matched(pSelected[0],pSelected[1]) )<br />   {//如果不是同一张牌并且花色一致<br />    <br />    //寻找路径<br />    find=linker.man_search(pSelected[0],pSelected[1])<br />     || linker.man_search(pSelected[1],pSelected[0]);;</p>
		<p>    if(find)<br />    {//找到</p>
		<p>     //GetClientRect (hwnd, &amp;rect) ;<br />     rect.left = pSelected[0].x *(cxBack-3);<br />     rect.right = rect.left+(cxBack-3)+3;<br />     rect.top  = pSelected[0].y *(cyBack-4)-30;<br />     rect.bottom = rect.top + (cyBack-4)+4;<br />     InvalidateRect (hwnd, &amp;rect, true) ;</p>
		<p>     rect.left = pSelected[1].x *(cxBack-3);<br />     rect.right = rect.left+(cxBack-3)+3;<br />     rect.top  = pSelected[1].y *(cyBack-4)-30;<br />     rect.bottom = rect.top + (cyBack-4)+4;<br />     InvalidateRect (hwnd, &amp;rect, true) ;</p>
		<p>     rect.left=0;<br />     rect.right=0 ;<br />     rect.top=0; <br />     rect.bottom=0;</p>
		<p>     iCount++;<br />     iTime+=2;</p>
		<p>     PlaySound (TEXT ("yes.wav"), NULL, SND_FILENAME | SND_ASYNC) ;</p>
		<p>     //InvalidateRect (hwnd, NULL, true) ;</p>
		<p>    }<br />    else<br />    {//没找到<br />    /*<br />     sprintf(szBuffer,"%d",find);<br />     MessageBox (hwnd, TEXT (szBuffer),<br />     szAppName, MB_YESNO | MB_ICONQUESTION) ;*/</p>
		<p>     rect.left = pSelected[0].x *(cxBack-3);<br />     rect.right = rect.left+(cxBack-3)+3;<br />     rect.top  = pSelected[0].y *(cyBack-4)-30;<br />     rect.bottom = rect.top + (cyBack-4)+4;<br />     InvalidateRect (hwnd, &amp;rect, true) ;</p>
		<p>     rect.left=0;<br />     rect.right=0 ;<br />     rect.top=0; <br />     rect.bottom=0;<br />     PlaySound (TEXT ("no.wav"), NULL, SND_FILENAME | SND_ASYNC) ;<br />    <br />    }<br />    pSelected[0].x=0;<br />    pSelected[0].y=0;<br />    pSelected[1].x=0;<br />    pSelected[1].y=0;</p>
		<p>    <br />   }<br />   else<br />   {//同一张牌或花色不一致</p>
		<p>    rect.left = pSelected[0].x *(cxBack-3);<br />    rect.right = rect.left+(cxBack-3)+3;<br />    rect.top  = pSelected[0].y *(cyBack-4)-30;<br />    rect.bottom = rect.top + (cyBack-4)+4;<br />    InvalidateRect (hwnd, &amp;rect, true) ;</p>
		<p>    pSelected[0].x=x;<br />    pSelected[0].y=y;<br />    pSelected[1].x=0;<br />    pSelected[1].y=0;</p>
		<p>    rect.left = pSelected[0].x *(cxBack-3);<br />    rect.right = rect.left+(cxBack-3)+3;<br />    rect.top  = pSelected[0].y *(cyBack-4)-30;<br />    rect.bottom = rect.top + (cyBack-4)+4;<br />    InvalidateRect (hwnd, &amp;rect, true) ;<br />    /*<br />    rect.left=0;<br />    rect.right=0 ;<br />    rect.top=0; <br />    rect.bottom=0;*/<br />   }<br />  </p>
		<p>  }<br />  }</p>
		<p>  if( iCount==(M-2)*(N-2)/2 )<br />  { <br />   iCount=0;<br />   KillTimer (hwnd, TimerID) ;<br />   MessageBox (hwnd, TEXT ("恭喜你，你赢了!!"),szAppName, MB_OK | MB_ICONQUESTION) ;</p>
		<p>
				<br />   SendMessage(hwnd,WM_COMMAND,IDM_APP_START,0);<br />  }<br />  return 0;<br />  </p>
		<p> case WM_CLOSE://用户关闭程序<br />  if ( IDYES == MessageBox (hwnd, TEXT ("确认关闭程序"),<br />    szAppName, MB_YESNO | MB_ICONQUESTION) )<br />  //弹出确认窗口，按YES退出程序<br />  {<br />   PlaySound (TEXT ("close.wav"), NULL, SND_FILENAME | SND_ASYNC) ;<br />   KillTimer (hwnd, TimerID) ;<br />   DestroyWindow (hwnd) ;<br />   Sleep(2000);<br />  }<br />  return 0 ;<br /> case WM_DESTROY:<br />  <br />  PostQuitMessage (0) ;<br />  return 0 ;<br /> }</p>
		<p> return DefWindowProc (hwnd, message, wParam, lParam) ;<br />}</p>
<img src ="http://www.cppblog.com/tx7do/aggbug/12597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-09-17 21:48 <a href="http://www.cppblog.com/tx7do/archive/2006/09/17/12597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STL二维数组</title><link>http://www.cppblog.com/tx7do/archive/2006/09/12/12384.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Tue, 12 Sep 2006 12:02:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/09/12/12384.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/12384.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/09/12/12384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/12384.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/12384.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">#include </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">vector</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">using</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">namespace</span>
				<span style="COLOR: #000000"> std;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />template </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> T</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> C2DVector<br /><img id="Codehighlighter1_75_1361_Open_Image" onclick="this.style.display='none'; Codehighlighter1_75_1361_Open_Text.style.display='none'; Codehighlighter1_75_1361_Closed_Image.style.display='inline'; Codehighlighter1_75_1361_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_75_1361_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_75_1361_Closed_Text.style.display='none'; Codehighlighter1_75_1361_Open_Image.style.display='inline'; Codehighlighter1_75_1361_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_75_1361_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_75_1361_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000">:<br /><img id="Codehighlighter1_124_126_Open_Image" onclick="this.style.display='none'; Codehighlighter1_124_126_Open_Text.style.display='none'; Codehighlighter1_124_126_Closed_Image.style.display='inline'; Codehighlighter1_124_126_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_124_126_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_124_126_Closed_Text.style.display='none'; Codehighlighter1_124_126_Open_Image.style.display='inline'; Codehighlighter1_124_126_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   C2DVector():m_dimRow(</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">), m_dimCol(</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">)</span>
						<span id="Codehighlighter1_124_126_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_124_126_Open_Text">
								<span style="COLOR: #000000">{;}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_161_345_Open_Image" onclick="this.style.display='none'; Codehighlighter1_161_345_Open_Text.style.display='none'; Codehighlighter1_161_345_Closed_Image.style.display='inline'; Codehighlighter1_161_345_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_161_345_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_161_345_Closed_Text.style.display='none'; Codehighlighter1_161_345_Open_Image.style.display='inline'; Codehighlighter1_161_345_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   C2DVector(</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> nRow, </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> nCol) </span>
						<span id="Codehighlighter1_161_345_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_161_345_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      m_dimRow </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> nRow;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      m_dimCol </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> nCol;<br /><img id="Codehighlighter1_243_340_Open_Image" onclick="this.style.display='none'; Codehighlighter1_243_340_Open_Text.style.display='none'; Codehighlighter1_243_340_Closed_Image.style.display='inline'; Codehighlighter1_243_340_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_243_340_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_243_340_Closed_Text.style.display='none'; Codehighlighter1_243_340_Open_Image.style.display='inline'; Codehighlighter1_243_340_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />      </span>
								<span style="COLOR: #0000ff">for</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> i</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">; i </span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000"> nRow; i</span>
								<span style="COLOR: #000000">++</span>
								<span style="COLOR: #000000">)</span>
								<span id="Codehighlighter1_243_340_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.cppblog.com/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_243_340_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />         vector</span>
										<span style="COLOR: #000000">&lt;</span>
										<span style="COLOR: #000000">T</span>
										<span style="COLOR: #000000">&gt;</span>
										<span style="COLOR: #000000"> x(nCol);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />         </span>
										<span style="COLOR: #0000ff">int</span>
										<span style="COLOR: #000000"> y </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> x.size();<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />         m_2DVector.push_back(x);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />      }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_422_577_Open_Image" onclick="this.style.display='none'; Codehighlighter1_422_577_Open_Text.style.display='none'; Codehighlighter1_422_577_Closed_Image.style.display='inline'; Codehighlighter1_422_577_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_422_577_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_422_577_Closed_Text.style.display='none'; Codehighlighter1_422_577_Open_Image.style.display='inline'; Codehighlighter1_422_577_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> SetAt(</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> nRow, </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> nCol, </span>
						<span style="COLOR: #0000ff">const</span>
						<span style="COLOR: #000000"> T</span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000"> value) </span>
						<span style="COLOR: #0000ff">throw</span>
						<span style="COLOR: #000000">(std::out_of_range) </span>
						<span id="Codehighlighter1_422_577_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_422_577_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000">(nRow </span>
								<span style="COLOR: #000000">&gt;=</span>
								<span style="COLOR: #000000"> m_dimRow </span>
								<span style="COLOR: #000000">||</span>
								<span style="COLOR: #000000"> nCol </span>
								<span style="COLOR: #000000">&gt;=</span>
								<span style="COLOR: #000000"> m_dimCol)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />         </span>
								<span style="COLOR: #0000ff">throw</span>
								<span style="COLOR: #000000"> out_of_range(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">Array out of bound</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      </span>
								<span style="COLOR: #0000ff">else</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />         m_2DVector[nRow][nCol] </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> value;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_610_764_Open_Image" onclick="this.style.display='none'; Codehighlighter1_610_764_Open_Text.style.display='none'; Codehighlighter1_610_764_Closed_Image.style.display='inline'; Codehighlighter1_610_764_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_610_764_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_610_764_Closed_Text.style.display='none'; Codehighlighter1_610_764_Open_Image.style.display='inline'; Codehighlighter1_610_764_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   T GetAt(</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> nRow, </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> nCol) </span>
						<span id="Codehighlighter1_610_764_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_610_764_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000">(nRow </span>
								<span style="COLOR: #000000">&gt;=</span>
								<span style="COLOR: #000000"> m_dimRow </span>
								<span style="COLOR: #000000">||</span>
								<span style="COLOR: #000000"> nCol </span>
								<span style="COLOR: #000000">&gt;=</span>
								<span style="COLOR: #000000"> m_dimCol)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />         </span>
								<span style="COLOR: #0000ff">throw</span>
								<span style="COLOR: #000000"> out_of_range(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">Array out of bound</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      </span>
								<span style="COLOR: #0000ff">else</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />         </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> m_2DVector[nRow][nCol];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_795_1005_Open_Image" onclick="this.style.display='none'; Codehighlighter1_795_1005_Open_Text.style.display='none'; Codehighlighter1_795_1005_Closed_Image.style.display='inline'; Codehighlighter1_795_1005_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_795_1005_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_795_1005_Closed_Text.style.display='none'; Codehighlighter1_795_1005_Open_Image.style.display='inline'; Codehighlighter1_795_1005_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> GrowRow(</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> newSize) </span>
						<span id="Codehighlighter1_795_1005_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_795_1005_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (newSize </span>
								<span style="COLOR: #000000">&lt;=</span>
								<span style="COLOR: #000000"> m_dimRow)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />         </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      m_dimRow </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> newSize;<br /><img id="Codehighlighter1_924_1000_Open_Image" onclick="this.style.display='none'; Codehighlighter1_924_1000_Open_Text.style.display='none'; Codehighlighter1_924_1000_Closed_Image.style.display='inline'; Codehighlighter1_924_1000_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_924_1000_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_924_1000_Closed_Text.style.display='none'; Codehighlighter1_924_1000_Open_Image.style.display='inline'; Codehighlighter1_924_1000_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />      </span>
								<span style="COLOR: #0000ff">for</span>
								<span style="COLOR: #000000">(</span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> i </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000"> ; i </span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000"> newSize </span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000"> m_dimCol; i</span>
								<span style="COLOR: #000000">++</span>
								<span style="COLOR: #000000">)   </span>
								<span id="Codehighlighter1_924_1000_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.cppblog.com/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_924_1000_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />         vector</span>
										<span style="COLOR: #000000">&lt;</span>
										<span style="COLOR: #0000ff">int</span>
										<span style="COLOR: #000000">&gt;</span>
										<span style="COLOR: #000000"> x(m_dimRow);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />         m_2DVector.push_back(x);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />      }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_1036_1192_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1036_1192_Open_Text.style.display='none'; Codehighlighter1_1036_1192_Closed_Image.style.display='inline'; Codehighlighter1_1036_1192_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_1036_1192_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1036_1192_Closed_Text.style.display='none'; Codehighlighter1_1036_1192_Open_Image.style.display='inline'; Codehighlighter1_1036_1192_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> GrowCol(</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> newSize) </span>
						<span id="Codehighlighter1_1036_1192_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_1036_1192_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000">(newSize </span>
								<span style="COLOR: #000000">&lt;=</span>
								<span style="COLOR: #000000"> m_dimCol)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />         </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      m_dimCol </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> newSize;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      </span>
								<span style="COLOR: #0000ff">for</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> i</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">; i </span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000">m_dimRow; i</span>
								<span style="COLOR: #000000">++</span>
								<span style="COLOR: #000000">)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />         m_2DVector[i].resize(newSize);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_1229_1262_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1229_1262_Open_Text.style.display='none'; Codehighlighter1_1229_1262_Closed_Image.style.display='inline'; Codehighlighter1_1229_1262_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_1229_1262_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1229_1262_Closed_Text.style.display='none'; Codehighlighter1_1229_1262_Open_Image.style.display='inline'; Codehighlighter1_1229_1262_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   vector</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">T</span>
						<span style="COLOR: #000000">&gt;&amp;</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">operator</span>
						<span style="COLOR: #000000">[](</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> x)    </span>
						<span id="Codehighlighter1_1229_1262_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_1229_1262_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />      </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> m_2DVector[x];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000">:<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />   vector</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000"> vector </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">T</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000"> m_2DVector;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />   unsigned </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> m_dimRow;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />   unsigned </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> m_dimCol;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
<img src ="http://www.cppblog.com/tx7do/aggbug/12384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-09-12 20:02 <a href="http://www.cppblog.com/tx7do/archive/2006/09/12/12384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>调试工具</title><link>http://www.cppblog.com/tx7do/archive/2006/07/03/9304.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 03 Jul 2006 04:52:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/07/03/9304.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/9304.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/07/03/9304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/9304.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/9304.html</trackback:ping><description><![CDATA[
		<font face="Webdings" color="#0066cc">2</font>
		<a href="http://www.vckbase.com/tools/debug/BChecker6.01.zip">
				<font face="宋体" color="#003333" size="2">BoundsChecker V6.01(for Visual C++ 6.0)</font>
		</a>
		<br />
		<font size="2">
				<font face="宋体">
						<span class="small">BoundsChecker for Visual C++ 6.0是针对开发出高质量的32位Visual C++ 6.0应用程序的最为全面的错误检测工具。BoundsChecker 能自动指出静态，堆栈内存错误和资源泄漏问题。与一般的内存检测工具不同，BoundsChecker 能够校验最新的 Windows APIs，包括 ActiveX, DirectX, OLE/COM, ODBC等等。BoundsChecker能够指出所有与 Windows 平台兼容性相关的问题。通过使用 BoundsChecker，你甚至可以在离开Visual C++ 6.0开发环境的情况下也能发现和修复绝大多数的错误。 <br /><br />大小:11011K </span>
						<br />
						<br />
				</font>
		</font>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
										<font face="宋体" size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font color="#0066cc">
				</font>
				<font face="Webdings" color="#0066cc">2</font>
				<a href="http://www.vckbase.com/tools/debug/umdhtools.exe">
						<font face="宋体" color="#003333" size="2">UMDH</font>
				</a>
				<br />
				<font size="2">
						<font face="宋体">
								<span class="small">微软发布的跟踪内存溢出的工具集UMDH (user-mode dump heap 的缩写). <br />大小:444K </span>
								<br />
								<br />
						</font>
				</font>
		</p>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
										<font face="宋体" size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font color="#0066cc">
				</font>
				<font face="Webdings" color="#0066cc">2</font>
				<a href="http://www.vckbase.com/tools/debug/siw325w98.zip">
						<font face="宋体" color="#006633" size="2">Soft-Ice for Win95/98 V3.25</font>
				</a>
				<br />
				<font size="2">
						<font face="宋体">
								<span class="small">Numega公司出品的著名调试工具3.25版本 For Win95/98<br />大小:3158K </span>
								<br />
								<br />
						</font>
				</font>
		</p>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
										<font face="宋体" size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font face="Webdings" color="#0066cc">2</font>
		<a href="http://www.vckbase.com/tools/debug/siw325wnt.zip">
				<font face="宋体" color="#006633" size="2">Soft-Ice for Win95/98 V4.01</font>
		</a>
		<br />
		<font size="2">
				<font face="宋体">
						<span class="small">Numega公司出品的著名调试工具3.25版本 For Win95/98<br />大小:5636K </span>
						<br />
						<br />
				</font>
		</font>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
										<font face="宋体" size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font face="Webdings" color="#0066cc">2</font>
				<a href="http://www.vckbase.com/tools/debug/siw325wnt.zip">
						<font face="宋体" color="#006633" size="2">Soft-Ice for WinNT V3.25</font>
				</a>
				<br />
				<font size="2">
						<font face="宋体">
								<span class="small">Numega公司出品的著名调试工具3.25版本 For WinNT<br />大小:3158K</span>
								<br />
								<br />
						</font>
				</font>
		</p>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
										<font face="宋体" size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font face="Webdings" color="#0066cc">2</font>
				<a href="http://www.vckbase.com/tools/debug/sc603.zip">
						<font face="宋体" color="#003333" size="2">SmartChecker V6.03</font>
				</a>
				<br />
				<font size="2">
						<font face="宋体">
								<span class="small">Numega公司出品的另一款超强调试工具<br />序列号：5102-3133F7-7D<br />大小:8959K <br /></span>
								<br />
						</font>
				</font>
		</p>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
										<font face="宋体" size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font face="Webdings" color="#0066cc">2</font>
				<a href="http://www.vckbase.com/tools/debug/dllshow.zip">
						<font face="宋体" color="#003333" size="2">DllShow</font>
				</a>
				<br />
				<font size="2">
						<font face="宋体">
								<span class="small">显示可执行文件调用的所有DLL信息的工具<br />大小：134K</span>
								<br />
								<br />
						</font>
				</font>
		</p>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
										<font face="宋体" size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font face="Webdings" color="#0066cc">2</font>
				<a href="http://www.vckbase.com/tools/debug/filemon.zip">
						<font face="宋体" color="#006633" size="2">File Monitor 2.0</font>
				</a>
				<br />
				<font size="2">
						<font face="宋体">
								<span class="small">文件进程查看器<br />大小:73K </span>
								<br />
								<br />
						</font>
				</font>
		</p>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
										<font face="宋体" size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font face="Webdings" color="#0066cc">2</font>
				<a href="http://www.vckbase.com/tools/debug/depend.zip">
						<font face="宋体" color="#003333" size="2">DLL Depend</font>
				</a>
				<br />
				<font size="2">
						<font face="宋体">
								<span class="small">DLL或EXE文件的输入/输出函数查看器<br />大小: 14K</span>
								<br />
								<br />
						</font>
				</font>
		</p>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
										<font face="宋体" size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font face="Webdings" color="#0066cc">2</font>
				<a href="http://www.vckbase.com/tools/debug/TR252.zip">
						<font face="宋体" color="#006633" size="2">TR for DOS V2.52</font>
				</a>
				<br />
				<font face="宋体" color="#000000" size="2">
						<span class="small">DOS下的程序调试工具</span>
				</font>
				<span class="small">
						<br />
				</span>
				<br />
		</p>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
										<font face="宋体" size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font face="Webdings" color="#0066cc">2</font>
				<a href="http://www.vckbase.com/tools/debug/TRW075.zip">
						<font face="宋体" color="#006633" size="2">TRW V0.75</font>
				</a>
				<br />
				<font size="2">
						<font face="宋体">
								<font class="small" color="#000000">Windows下的程序调试工具</font>
								<br />
								<br />
						</font>
				</font>
		</p>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
										<font face="宋体" size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font face="Webdings" color="#0066cc">2</font>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">
						<a href="http://www.vckbase.com/other/tools/othertools/disassem.zip">
								<font color="#006633">disassem</font>
						</a>
				</span>
				<br />
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">
						<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">一个小巧的win32反汇编程序</span>
						<br />大小：93.6K</span>
				<br />
				<br />
		</p>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font face="Webdings" color="#0066cc">2</font>
				<a href="http://www.vckbase.com/tools/debug/sourcer.zip">
						<font face="宋体" color="#006633" size="2">Sourcer V6.51</font>
				</a>
				<br />
				<font size="2">
						<font face="宋体">
								<span class="small">一个不错的反汇编工具.<br />序列号：SR322449-TAWE<br />大小:273K </span>
								<br />
								<br />
						</font>
				</font>
		</p>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
										<font face="宋体" size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font face="Webdings" color="#0066cc">2</font>
				<a href="http://www.vckbase.com/tools/debug/trw2000.zip">
						<font face="宋体" color="#006633" size="2">Tr for Win9x V2000</font>
				</a>
				<br />
				<font size="2">
						<font face="宋体">
								<span class="small">功能强大的国产调试工具<br />大小:202K</span>
								<br />
								<br />
						</font>
				</font>
		</p>
		<table height="1" cellspacing="0" cellpadding="0" width="100%" background="/image/dotline.gif" border="0">
				<tbody>
						<tr>
								<td>
										<font face="宋体" size="2">
										</font>
								</td>
						</tr>
				</tbody>
		</table>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr align="middle">
								<td class="eng">Copyright © 1997-2001 vckbase.com All Rights Reserved.</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cppblog.com/tx7do/aggbug/9304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-07-03 12:52 <a href="http://www.cppblog.com/tx7do/archive/2006/07/03/9304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用C语言实现常见的三种中文内码转换</title><link>http://www.cppblog.com/tx7do/archive/2006/06/22/8835.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 22 Jun 2006 06:55:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/06/22/8835.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/8835.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/06/22/8835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/8835.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/8835.html</trackback:ping><description><![CDATA[
		<p>常见的中文内码一般有GB2312(简体中文)，GBK和台湾那边用的BIG5(繁体中文)，有时候看一些台湾编程论坛里的资料，都是乱码，如果在IE中浏览，则要求安装繁体字库的支持。网上也有很多中文内码的转换工具，但是在自己的程序中集成这些功能岂不是更好。Windows中提供了MultiByteToWideChar和WideCharToMultiByte两兄弟函数，足可以搞定这些功能了。 </p>
		<p>以下四个函数分别实现：<br />大五码转GBK码/GBK转大五码<br />GB2312码转GBK码/GBK码转GB2312码</p>
		<p>于是有人要问了，为什么没有GB2312转BIG5和BIG5转GB2312呢，我们有GBK，可以做一下中转啊。可以将GB2312转成GBK，再将GBK转成BIG5，反之亦然。如果你嫌麻烦，可以自己写一个GB2BIG5/BIG52GB。</p>
		<p>
				<br />//---------------------------------------------------------------------------</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 大五码转GBK码：<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> い地チ㎝瓣 --&gt; 中華人民共和國</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> __fastcall BIG52GBK(</span>
				<span style="COLOR: #0000ff">char</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">szBuf)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_77_446_Open_Image" onclick="this.style.display='none'; Codehighlighter1_77_446_Open_Text.style.display='none'; Codehighlighter1_77_446_Closed_Image.style.display='inline'; Codehighlighter1_77_446_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_77_446_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_77_446_Closed_Text.style.display='none'; Codehighlighter1_77_446_Open_Image.style.display='inline'; Codehighlighter1_77_446_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_77_446_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_77_446_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #000000">!</span>
						<span style="COLOR: #000000">strcmp(szBuf, </span>
						<span style="COLOR: #000000">""</span>
						<span style="COLOR: #000000">))<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> nStrLen </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> strlen(szBuf);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　wchar_t </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">pws </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> wchar_t[nStrLen </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">try</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_195_408_Open_Image" onclick="this.style.display='none'; Codehighlighter1_195_408_Open_Text.style.display='none'; Codehighlighter1_195_408_Closed_Image.style.display='inline'; Codehighlighter1_195_408_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_195_408_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_195_408_Closed_Text.style.display='none'; Codehighlighter1_195_408_Open_Image.style.display='inline'; Codehighlighter1_195_408_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />　</span>
						<span id="Codehighlighter1_195_408_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_195_408_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> nReturn </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> MultiByteToWideChar(</span>
								<span style="COLOR: #000000">950</span>
								<span style="COLOR: #000000">, </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">, szBuf, nStrLen, pws, nStrLen </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />BOOL bValue </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">false</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />nReturn </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> WideCharToMultiByte(</span>
								<span style="COLOR: #000000">936</span>
								<span style="COLOR: #000000">, </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">, pws, nReturn, szBuf, nStrLen </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">, </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">?</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">, </span>
								<span style="COLOR: #000000">&amp;</span>
								<span style="COLOR: #000000">bValue);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />szBuf[nReturn] </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />　}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　__finally<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_424_443_Open_Image" onclick="this.style.display='none'; Codehighlighter1_424_443_Open_Text.style.display='none'; Codehighlighter1_424_443_Closed_Image.style.display='inline'; Codehighlighter1_424_443_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_424_443_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_424_443_Closed_Text.style.display='none'; Codehighlighter1_424_443_Open_Image.style.display='inline'; Codehighlighter1_424_443_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />　</span>
						<span id="Codehighlighter1_424_443_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_424_443_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />delete[] pws;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />　}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p> </p>
		<p>//---------------------------------------------------------------------------</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> GBK转大五码<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 中華人民共和國 --&gt; い地チ㎝瓣</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> __fastcall GBK2BIG5(</span>
				<span style="COLOR: #0000ff">char</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">szBuf)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_75_421_Open_Image" onclick="this.style.display='none'; Codehighlighter1_75_421_Open_Text.style.display='none'; Codehighlighter1_75_421_Closed_Image.style.display='inline'; Codehighlighter1_75_421_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_75_421_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_75_421_Closed_Text.style.display='none'; Codehighlighter1_75_421_Open_Image.style.display='inline'; Codehighlighter1_75_421_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_75_421_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_75_421_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #000000">!</span>
						<span style="COLOR: #000000">strcmp(szBuf, </span>
						<span style="COLOR: #000000">""</span>
						<span style="COLOR: #000000">))<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> ;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> nStrLen </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> strlen(szBuf);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　wchar_t </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">pws </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> wchar_t[nStrLen </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">try</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_194_383_Open_Image" onclick="this.style.display='none'; Codehighlighter1_194_383_Open_Text.style.display='none'; Codehighlighter1_194_383_Closed_Image.style.display='inline'; Codehighlighter1_194_383_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_194_383_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_194_383_Closed_Text.style.display='none'; Codehighlighter1_194_383_Open_Image.style.display='inline'; Codehighlighter1_194_383_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />　</span>
						<span id="Codehighlighter1_194_383_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_194_383_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />MultiByteToWideChar(</span>
								<span style="COLOR: #000000">936</span>
								<span style="COLOR: #000000">, </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">, szBuf, nStrLen, pws, nStrLen </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />BOOL bValue </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">false</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />WideCharToMultiByte(</span>
								<span style="COLOR: #000000">950</span>
								<span style="COLOR: #000000">, </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">, pws, nStrLen, szBuf, nStrLen </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">, </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">?</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">, </span>
								<span style="COLOR: #000000">&amp;</span>
								<span style="COLOR: #000000">bValue);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />szBuf[nStrLen] </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />　}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　__finally<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_399_418_Open_Image" onclick="this.style.display='none'; Codehighlighter1_399_418_Open_Text.style.display='none'; Codehighlighter1_399_418_Closed_Image.style.display='inline'; Codehighlighter1_399_418_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_399_418_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_399_418_Closed_Text.style.display='none'; Codehighlighter1_399_418_Open_Image.style.display='inline'; Codehighlighter1_399_418_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />　</span>
						<span id="Codehighlighter1_399_418_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_399_418_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />delete[] pws;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />　}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p> </p>
		<p>//----------------------------------------------------------------------------</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> GB2312码转GBK码<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 中华人民共和国 --&gt; 中華人民共和國</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> __fastcall GB2GBK(</span>
				<span style="COLOR: #0000ff">char</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">szBuf)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_78_653_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_653_Open_Text.style.display='none'; Codehighlighter1_78_653_Closed_Image.style.display='inline'; Codehighlighter1_78_653_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_78_653_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_78_653_Closed_Text.style.display='none'; Codehighlighter1_78_653_Open_Image.style.display='inline'; Codehighlighter1_78_653_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_78_653_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_78_653_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #000000">!</span>
						<span style="COLOR: #000000">strcmp(szBuf, </span>
						<span style="COLOR: #000000">""</span>
						<span style="COLOR: #000000">))<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> nStrLen </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> strlen(szBuf);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　WORD wLCID </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_PRC);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> nReturn </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> LCMapString(wLCID, LCMAP_TRADITIONAL_CHINESE, szBuf, nStrLen, NULL, </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #000000">!</span>
						<span style="COLOR: #000000">nReturn)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">pcBuf </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000">[nReturn </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">try</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_401_613_Open_Image" onclick="this.style.display='none'; Codehighlighter1_401_613_Open_Text.style.display='none'; Codehighlighter1_401_613_Closed_Image.style.display='inline'; Codehighlighter1_401_613_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_401_613_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_401_613_Closed_Text.style.display='none'; Codehighlighter1_401_613_Open_Image.style.display='inline'; Codehighlighter1_401_613_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />　</span>
						<span id="Codehighlighter1_401_613_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_401_613_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />wLCID </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_PRC);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />LCMapString(wLCID, LCMAP_TRADITIONAL_CHINESE, szBuf, nReturn, pcBuf, nReturn </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />strncpy(szBuf, pcBuf, nReturn);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />　}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　__finally<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_629_650_Open_Image" onclick="this.style.display='none'; Codehighlighter1_629_650_Open_Text.style.display='none'; Codehighlighter1_629_650_Closed_Image.style.display='inline'; Codehighlighter1_629_650_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_629_650_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_629_650_Closed_Text.style.display='none'; Codehighlighter1_629_650_Open_Image.style.display='inline'; Codehighlighter1_629_650_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />　</span>
						<span id="Codehighlighter1_629_650_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_629_650_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />delete[] pcBuf;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />　}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p> </p>
		<p>//---------------------------------------------------------------------------</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> GBK码转GB2312码<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 中華人民共和國 --&gt; 中华人民共和国</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> __fastcall GBK2GB(</span>
				<span style="COLOR: #0000ff">char</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">szBuf)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_78_653_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_653_Open_Text.style.display='none'; Codehighlighter1_78_653_Closed_Image.style.display='inline'; Codehighlighter1_78_653_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_78_653_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_78_653_Closed_Text.style.display='none'; Codehighlighter1_78_653_Open_Image.style.display='inline'; Codehighlighter1_78_653_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_78_653_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_78_653_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #000000">!</span>
						<span style="COLOR: #000000">strcmp(szBuf, </span>
						<span style="COLOR: #000000">""</span>
						<span style="COLOR: #000000">))<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> nStrLen </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> strlen(szBuf);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　WORD wLCID </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_BIG5);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> nReturn </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> LCMapString(wLCID, LCMAP_SIMPLIFIED_CHINESE, szBuf, nStrLen, NULL, </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #000000">!</span>
						<span style="COLOR: #000000">nReturn)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">pcBuf </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">new</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000">[nReturn </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">try</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_401_613_Open_Image" onclick="this.style.display='none'; Codehighlighter1_401_613_Open_Text.style.display='none'; Codehighlighter1_401_613_Closed_Image.style.display='inline'; Codehighlighter1_401_613_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_401_613_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_401_613_Closed_Text.style.display='none'; Codehighlighter1_401_613_Open_Image.style.display='inline'; Codehighlighter1_401_613_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />　</span>
						<span id="Codehighlighter1_401_613_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_401_613_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />wLCID </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_BIG5);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />LCMapString(wLCID, LCMAP_SIMPLIFIED_CHINESE, szBuf, nReturn, pcBuf, nReturn </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />strncpy(szBuf, pcBuf, nReturn);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />　}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　__finally<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_629_650_Open_Image" onclick="this.style.display='none'; Codehighlighter1_629_650_Open_Text.style.display='none'; Codehighlighter1_629_650_Closed_Image.style.display='inline'; Codehighlighter1_629_650_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_629_650_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_629_650_Closed_Text.style.display='none'; Codehighlighter1_629_650_Open_Image.style.display='inline'; Codehighlighter1_629_650_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />　</span>
						<span id="Codehighlighter1_629_650_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_629_650_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />delete []pcBuf;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />　}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p> </p>
		<p>//---------------------------------------------------------------------------</p>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 测试代码</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> __fastcall TForm1::Button1Click(TObject </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">Sender)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_64_322_Open_Image" onclick="this.style.display='none'; Codehighlighter1_64_322_Open_Text.style.display='none'; Codehighlighter1_64_322_Closed_Image.style.display='inline'; Codehighlighter1_64_322_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_64_322_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_64_322_Closed_Text.style.display='none'; Codehighlighter1_64_322_Open_Image.style.display='inline'; Codehighlighter1_64_322_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_64_322_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_64_322_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #0000ff">char</span>
						<span style="COLOR: #000000"> szBuf[</span>
						<span style="COLOR: #000000">255</span>
						<span style="COLOR: #000000">];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />　</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 从GB2312转到GBK</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/Outlining