zl程序教程

您现在的位置是:首页 >  其它

当前栏目

VC CIni

vc
2023-09-27 14:27:55 时间
None.gif #pragma  once  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif#include   " afxTempl.h "   
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif class   CIni  
None.gif
None.gif
None.gif
ExpandedBlockStart.gif {  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif private :  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     CString  m_strFileName;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif public :  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     CIni(CString  strFileName):m_strFileName(strFileName)  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif      {  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif     }   
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif public :  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif      // 一般性操作:   
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif     BOOL  SetFileName(LPCTSTR  lpFileName);     // 设置文件名   
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif     CString  GetFileName( void );   // 获得文件名   
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif     BOOL  SetValue(LPCTSTR  lpSection,  LPCTSTR  lpKey,  LPCTSTR  lpValue, bool   bCreate = true );   // 设置键值,bCreate是指段名及键名未存在时,是否创建。   
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif     CString  GetValue(LPCTSTR  lpSection,  LPCTSTR  lpKey);   // 得到键值.   
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif     BOOL  DelSection(LPCTSTR  strSection);     // 删除段名   
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif     BOOL  DelKey(LPCTSTR  lpSection,  LPCTSTR  lpKey);     // 删除键名   
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif public :  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif      // 高级操作:   
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif      int   GetSections(CStringArray     arrSection);     // 枚举出全部的段名   
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif      int   GetKeyValues(CStringArray     arrKey,CStringArray     arrValue,LPCTSTR  lpSection);     // 枚举出一段内的全部键名及值   
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif     BOOL  DelAllSections();  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif} ;  
None.gif
None.gif
//文件  2:  
None.gif#include  "StdAfx.h"  
None.gif
None.gif
None.gif
None.gif#include  "ini.h"  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif#define  MAX_ALLSECTIONS  2048    //全部的段名  
None.gif
None.gif
None.gif
None.gif#define  MAX_SECTION  260    //一个段名长度  
None.gif
None.gif
None.gif
None.gif#define  MAX_ALLKEYS  6000    //全部的键名  
None.gif
None.gif
None.gif
None.gif#define  MAX_KEY  260    //一个键名长度  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gifBOOL  CIni::SetFileName(LPCTSTR  lpFileName)  
None.gif
None.gif
None.gif
ExpandedBlockStart.gif{  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     CFile  file;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     CFileStatus  status;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     if(!file.GetStatus(lpFileName,status))  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         return  TRUE;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     m_strFileName=lpFileName;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     return  FALSE;  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gifCString  CIni::GetFileName(void)  
None.gif
None.gif
None.gif
ExpandedBlockStart.gif{  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     return  m_strFileName;  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gifBOOL  CIni::SetValue(LPCTSTR  lpSection,  LPCTSTR  lpKey,  LPCTSTR  lpValue,bool  bCreate)  
None.gif
None.gif
None.gif
ExpandedBlockStart.gif{  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     TCHAR  lpTemp[MAX_PATH]  ={0};  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     //以下if语句表示如果设置bCreate为false时,当没有这个键名时则返回TRUE(表示出错)  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     //!* *none-value* !*  这是个垃圾字符没有特别意义,这样乱写是防止凑巧相同。  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     if  (!bCreate)  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     {  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         GetPrivateProfileString(lpSection,lpKey,"!* *none-value* !*",lpTemp,MAX_PATH,m_strFileName);  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         if(strcmp(lpTemp,"!* *none-value* !*")==0)  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif              return  TRUE;  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif     }  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     if(WritePrivateProfileString(lpSection,lpKey,lpValue,m_strFileName))  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         return  FALSE;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     else  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         return  GetLastError();  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gifCString  CIni::GetValue(LPCTSTR  lpSection,  LPCTSTR  lpKey)  
None.gif
None.gif
None.gif
ExpandedBlockStart.gif{  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     DWORD  dValue;  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     TCHAR  lpValue[MAX_PATH]  ={0};  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     dValue=GetPrivateProfileString(lpSection,lpKey,"",lpValue,MAX_PATH,m_strFileName);  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     return  lpValue;  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gifBOOL  CIni::DelSection(LPCTSTR  lpSection)  
None.gif
None.gif
None.gif
ExpandedBlockStart.gif{  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     if(WritePrivateProfileString(lpSection,NULL,NULL,m_strFileName))  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         return  FALSE;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     else  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         return  GetLastError();  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gifBOOL  CIni::DelKey(LPCTSTR  lpSection,  LPCTSTR  lpKey)  
None.gif
None.gif
None.gif
ExpandedBlockStart.gif{  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     if(WritePrivateProfileString(lpSection,lpKey,NULL,m_strFileName))  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         return  FALSE;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     else  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         return  GetLastError();  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gifint  CIni::GetSections(CStringArray   arrSection)  
None.gif
None.gif
None.gif
ExpandedBlockStart.gif{  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     /*  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     本函数基础:  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     GetPrivateProfileSectionNames  -  从  ini  文件中获得  Section  的名称  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     如果  ini  中有两个  Section:  [sec1]  和  [sec2],则返回的是  sec1,0,sec2,0,0  ,当你不知道      
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     ini  中有哪些  section  的时候可以用这个  api  来获取名称    
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif     */  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     int  i;      
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     int  iPos=0;      
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     int  iMaxCount;  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     TCHAR  chSectionNames[MAX_ALLSECTIONS]={0};  //总的提出来的字符串  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     TCHAR  chSection[MAX_SECTION]={0};  //存放一个段名。  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     GetPrivateProfileSectionNames(chSectionNames,MAX_ALLSECTIONS,m_strFileName);  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     //以下循环,截断到两个连续的0  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     for(i=0;i MAX_ALLSECTIONS;i++)  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     {  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         if  (chSectionNames[i]==0)  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif              if  (chSectionNames[i]==chSectionNames[i+1])  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif                   break;  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif     }  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     iMaxCount=i+1;  //要多一个0号元素。即找出全部字符串的结束部分。  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     arrSection.RemoveAll();//清空原数组  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     for(i=0;i iMaxCount;i++)  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     {  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         chSection[iPos++]=chSectionNames[i];  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         if(chSectionNames[i]==0)  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif         {        
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif              arrSection.Add(chSection);  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif              memset(chSection,0,MAX_SECTION);  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif              iPos=0;  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif         }  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif     }  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     return  (int)arrSection.GetSize();  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gifint  CIni::GetKeyValues(CStringArray   arrKey,CStringArray   arrValue,  LPCTSTR  lpSection)  
None.gif
None.gif
None.gif
ExpandedBlockStart.gif{  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     /*  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     本函数基础:  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     GetPrivateProfileSection-  从  ini  文件中获得一个Section的全部键名及值名  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     如果ini中有一个段,其下有  "段1=值1"  "段2=值2",则返回的是  段1=值1,0,段2=值2,0,0  ,当你不知道      
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     获得一个段中的所有键及值可以用这个。    
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif     */  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     int  i;      
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     int  iPos=0;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     CString  strKeyValue;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     int  iMaxCount;  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     TCHAR  chKeyNames[MAX_ALLKEYS]={0};  //总的提出来的字符串  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     TCHAR  chKey[MAX_KEY]={0};  //提出来的一个键名  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     GetPrivateProfileSection(lpSection,chKeyNames,MAX_ALLKEYS,m_strFileName);  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     for(i=0;i MAX_ALLKEYS;i++)  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     {  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         if  (chKeyNames[i]==0)  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif              if  (chKeyNames[i]==chKeyNames[i+1])  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif                   break;  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif     }  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     iMaxCount=i+1;  //要多一个0号元素。即找出全部字符串的结束部分。  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     arrKey.RemoveAll();//清空原数组  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     arrValue.RemoveAll();  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     for(i=0;i iMaxCount;i++)  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     {  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         chKey[iPos++]=chKeyNames[i];  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         if(chKeyNames[i]==0)  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif         {  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif              strKeyValue=chKey;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif              arrKey.Add(strKeyValue.Left(strKeyValue.Find("=")));  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif              arrValue.Add(strKeyValue.Mid(strKeyValue.Find("=")+1));  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif              memset(chKey,0,MAX_KEY);  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif              iPos=0;  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif         }  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif     }  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     return  (int)arrKey.GetSize();  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gifBOOL  CIni::DelAllSections()  
None.gif
None.gif
None.gif
ExpandedBlockStart.gif{  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     int  nSection;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     CStringArray  arrSection;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     nSection=GetSections(arrSection);  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     for(int  i=0;i nSection;i++)  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif     {  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif         if(DelSection(arrSection[i]))  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif              return  GetLastError();  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif     }  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif     return  FALSE;  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif使用方法:  
None.gif
None.gif
None.gif
None.gifCIni  ini("c:\\a.ini");  
None.gif
None.gif
None.gif
None.gifint  n;  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
ExpandedBlockStart.gif/*获得值  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifTRACE("%s",ini.GetValue("段1","键1"));  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif*/  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
ExpandedBlockStart.gif/*添加值  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifini.SetValue("自定义段","键1","值");  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifini.SetValue("自定义段2","键1","值",false);  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif*/  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
ExpandedBlockStart.gif/*枚举全部段名  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifCStringArray  arrSection;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifn=ini.GetSections(arrSection);  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.giffor(int  i=0;i i++)  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifTRACE("%s\n",arrSection[i]);  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif*/  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
ExpandedBlockStart.gif/*枚举全部键名及值  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifCStringArray  arrKey,arrValue;  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifn=ini.GetKeyValues(arrKey,arrValue,"段1");  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.giffor(int  i=0;i i++)  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifTRACE("键:%s\n值:%s\n",arrKey[i],arrValue[i]);  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif*/  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
ExpandedBlockStart.gif/*删除键值  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifini.DelKey("段1","键1");  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif*/  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
ExpandedBlockStart.gif/*删除段  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifini.DelSection("段1");  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif*/  
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
ExpandedBlockStart.gif/*删除全部  
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gifini.DelAllSections();  
InBlock.gif
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif*/  
None.gif
[分享]总结:VC小知识!-1 说明: 获得notepad.exe的路径正规上来说用GetWindowsDirectory函数得到, 如果是调用 win95下的画笔,应该用访问注册表的方法获得其路径,要作成一个比较考究的程序,考虑应该全面点.
1. 安装cmake: https://cmake.org/files/v3.6/cmake-3.6.0-win64-x64.msi 2. 下载libwebsocket源码: git clone https://github.