MFC积累2

1。 CStringList不完全用法。


CStringList是CString链表,在MFC编程中STL之外的另一选择,用起来更加简洁.

插入数据:AddTail();AddHead()

删除数据:RemoveAll();RemoveAt();RemoveHead();RemoveTail()

取得元素个数:GetCount()

取得某个元素值:GetAt(cstringList.FindIndex(index))//index为整数

取得头尾元素:GetHead() ;GetTail(),

遍历最好用上面的方式,不要用POSITION变量,用FindIndex可以了。

初始化:

CStringList listFileName;
listFileName.RemoveAll();

添加操作:

listFileName.AddTail(szFullPathName);

遍历操作:

POSITION rPos;
rPos = listFileName.GetHeadPosition();
while (rPos != NULL)
{
   strFileName = listFileName.GetNext(rPos);
   strLog += "/r/n" + strFileName;
}


2.

 CStringList 总结




CStringList

CStringList
└CStringList
CStringList类支持CString对象的列表。所有的比较都是通过值比较来完成的,这意味着不是比较字符串的地址而是比较字符串中的字符。
CStringList的成员函数类似于类CObList 类的成员函数。由于具有这些相似性,你可以参考关于CObList的参考文件来获取CStringList成员函数的详细说明。如果在说明中看到某一函数的返回值是一个指向CObject对象的 指针,则可以用一个CString(而不是一个CString指针)来代替它。如果看到某一函数的参数是一个指向CObject的 指针,则可以用LPCTSTR来代替它。
例如,可以将
CObject*& CObList::GetHead() const;
转换为
CString& CStringList::GetHead() const;
和将
POSITION AddHead( CObject* <newElement> );
转换为
POSITION AddHead( LPCTSTR <newElement> );
CStringList与IMPLEMENT_SERIAL宏联合起来支持其元素的连续和转储。如果一个CString对象列表被用一个 重载的插入操作符或Serialize成员函数保存到一个存档中,则它的每一个元素都按顺序连续。
如果你需要 数组中个别字符串元素的转储,则应该将转储环境的深度设置为1或更大。
当一个CStringList对象被删除时,或当它的元素被删除时,则相应的CString对象被删除。
有关使用CStringList的更多信息,参见“Visual C++程序员指南”中的文章“集合”。
#include <afxcoll.h>
CStringList类成员
构造
构造一个空的CString对象列表
首/尾访问
GetHead
返回此列表(不能是空的)中头部的元素
GetTail返回此列表(不能是空的)中尾部的元素
操作
RemoveHead
从列表的头部删除元素
RemoveTail从列表的尾部删除元素
AddHead在列表的头部添加一个元素(或者是另一个列表中的所有元素),即产生一个新的头部
AddTail在列表的尾部添加一个元素(或者是另一个列表中的所有元素),即产生一个新的尾部
RemoveAll删除此列表中的所有元素
重复
GetHeadPosition
返回列表中的头部元素的位置
GetTailPosition返回列表中尾部元素的位置
GetNext获取用于重复的下一个元素
GetPrev获取用于重复的前一个元素
获取/修改
获取给定位置处的元素
SetAt设置给定位置处的元素
RemoveAt从此列表中删除由位置指定的一个元素
插入
InsertBefore
在一个给定位置之前插入一个新元素
InsertAfter在一个给定位置之后插入一个新元素
搜索
获取由字符串值指定的元素的位置
FindIndex获取由一个从零开始的索引指定的元素的位置
状态
返回此列表中的元素个数
IsEmpty测试列表是否为空(没有元素)

3.


简单封装读写INI文件的类

①建立一个控制台工程,支持MFC,命名为TestINI;

②在TestINI.cpp中添加头文件Ini.h

③在主函数中添加测试代码,如下:

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
 int nRetCode = 0;
 
 // initialize MFC and print and error on failure
 if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
 {
  // TODO: change error code to suit your needs
  cerr << _T("Fatal Error: MFC initialization failed") << endl;
  nRetCode = 1;
 }
 else
 {
  // TODO: code your application's behavior here.
  CString strHello;
  strHello.LoadString(IDS_HELLO);
  cout << (LPCTSTR)strHello << endl;

  // INI文件的全路径名
  CString m_strFileName;
  // 获取当前模块的路径
  GetModuleFileName( AfxGetInstanceHandle(), m_strFileName.GetBuffer( MAX_PATH ), MAX_PATH );
  m_strFileName.ReleaseBuffer( MAX_PATH );
  // 将获得的路径替换为设置的INI文件路径
  m_strFileName.Replace( _T( "TestINI.exe" ), _T( "1.ini" ) );
  // INI文件
  CIni iniFile;
  // 设置INI文件全路径名
  iniFile.setINIFileName(m_strFileName);
  // 设置键值
  iniFile.setKey("TRUE","AUTORUN","SYSTEM");
  iniFile.setKey("","","HELLO");
  iniFile.setKey("","WORLD","HELLO");
  iniFile.setKey("TRUE","WORLD","HELLO");
  iniFile.setKey("C:\\1.MP3","MP3","MUSIC");
  iniFile.setKey("FALSE","AUTO","LOCK");
  
  // 获得键值
  ::AfxMessageBox(iniFile.getKeyValue("AUTORUN","SYSTEM"));
  ::AfxMessageBox(iniFile.getKeyValue("MP3","MUSIC"));
  
 }
 
 return nRetCode;
}

附录:

  • Ini.h
  • Ini.cpp

// Ini.h

#include <afxcoll.h>

class CIni
{
public:
 // 设定INI文件的名字,要完全路径名
 void setINIFileName(CString strINIFile);
 // 获取段类所有数据 
 CStringList* getSectionData(CString strSection);
 // 所有段名
 CStringList* getSectionNames();
 // 判断段名是否已经存在
 BOOL sectionExists(CString strSection);
 // 设置键值
 long setKey(CString strValue, CString strKey, CString strSection);
 // 获得键值
 CString getKeyValue(CString strKey,CString strSection);
 // 构造函数
 CIni()
 {
  m_sectionList = new CStringList();
  m_sectionDataList = new CStringList();
 }
 // 带文件名参数的构造函数
 CIni(CString strFile)
 {
  m_strFileName = strFile;
  m_sectionList = new CStringList();
  m_sectionDataList = new CStringList();
 }
 // 析构清空链表释放
 ~CIni()
 {
  delete m_sectionList;
  delete m_sectionDataList;
 }
private:
 CStringList *m_sectionDataList;
 CStringList *m_sectionList;
 CString m_strSection;
 long m_lRetValue;
 CString m_strFileName;
};

// Ini.cpp

#include "stdafx.h"
#include "INI.h"
#include <afxcoll.h>

CString CIni::getKeyValue(CString strKey,CString strSection)
{
 char ac_Result[255];
 
 m_lRetValue = GetPrivateProfileString((LPCTSTR)strSection,(LPCTSTR)strKey,
  "",ac_Result, 255, (LPCTSTR)m_strFileName); 

 CString strResult(ac_Result);
 return strResult;
}

long CIni::setKey(CString strValue, CString strKey, CString strSection)
{
 m_lRetValue = WritePrivateProfileString (strSection, strKey,
                             strValue, m_strFileName);

 return m_lRetValue;
}

BOOL CIni::sectionExists(CString strSection)
{
 char ac_Result[100]; 
 CString csAux;
 
 m_lRetValue = GetPrivateProfileString((LPCTSTR)strSection,NULL,
  "",ac_Result, 90, (LPCTSTR)m_strFileName);

 return (m_lRetValue > 0);
}


CStringList* CIni::getSectionNames()
{
 char ac_Result[2000];
 m_sectionList->RemoveAll();
 
 m_lRetValue = GetPrivateProfileSectionNames(ac_Result,2000,(LPCTSTR)m_strFileName);
 
 CString strSectionName;
 for(int i=0; i<m_lRetValue; i++)
 {
  if(ac_Result[i] != '\0') {
   strSectionName = strSectionName + ac_Result[i];
  } else {
   if(strSectionName != "") {
    m_sectionList->InsertAfter(m_sectionList->GetTailPosition(),strSectionName);
   }
   strSectionName = "";
  }
 }

 return m_sectionList;
}

 
CStringList* CIni::getSectionData(CString strSection) 
{
 char ac_Result[2000];
 m_sectionDataList->RemoveAll();
 m_lRetValue = GetPrivateProfileSection((LPCTSTR)strSection, ac_Result, 2000, (LPCTSTR)m_strFileName);

 CString strSectionData;
 for(int i=0; i<m_lRetValue; i++)
 {
  if(ac_Result[i] != '\0') {
   strSectionData = strSectionData + ac_Result[i];
  } else {
   if(strSectionData != "") {
    m_sectionDataList->InsertAfter(m_sectionDataList->GetTailPosition(),strSectionData);
   }
   strSectionData = "";
  }
 }

 return m_sectionDataList;
}

void CIni::setINIFileName(CString strINIFile)
{
 m_strFileName = strINIFile;
}

//



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值