取自:http://www.viksoe.dk/code/all_mfc.htm,里面有各种MFC常用的类
// Ini.h: interface for the CIni class. // // Written by Bjarke Viksoe (bjarke@viksoe.dk) // Copyright (c) 2000. // // This code may be used in compiled form in any way you desire. This // file may be redistributed by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name is included. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability if it causes any damage to you or your // computer whatsoever. It‘s free, so don‘t hassle me about it. // // Beware of bugs. //////////////////////////////////////////////////////////////////////// #if !defined(AFX_INI_H__2478E9E2_E904_11D1_93C1_241C08C10000__INCLUDED_) #define AFX_INI_H__2478E9E2_E904_11D1_93C1_241C08C10000__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // // INI file class // // Author: // Bjarke Viks鴈 // Description: // Implements helper functions to access // an .INI configuration file using // conventional CString operations // // Ini-file wrapper class class CIni : public CObject { public: CIni(); CIni( LPCTSTR IniFilename ); virtual ~CIni(); // Methods public: // Sets the current Ini-file to use. RETCODE SetIniFilename(LPCTSTR IniFilename); // // Reads an integer from the ini-file. UINT GetInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault=0); // Reads a boolean value from the ini-file. BOOL GetBoolean(LPCTSTR lpszSection, LPCTSTR lpszEntry, BOOL bDefault=FALSE); // Reads a string from the ini-file. CString GetString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszDefault=NULL); // Reads a binaryt lump of data from the ini-file. BOOL GetBinary(LPCTSTR lpszSection, LPCTSTR lpszEntry, BYTE** ppData, UINT* pBytes); // // Writes an integer to the ini-file. BOOL WriteInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nValue); // Writes a boolean value to the ini-file. BOOL WriteBoolean(LPCTSTR lpszSection, LPCTSTR lpszEntry, BOOL bValue); // Writes a string to the ini-file. BOOL WriteString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue); // Writes a binary lump of data to the ini-file. BOOL WriteBinary(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPBYTE pData, UINT nBytes); // Writes an ‘expand string‘ to the ini-file. BOOL WriteExpandString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue); // // Removes an item from the current ini-file. BOOL DeleteKey(LPCTSTR lpszSection, LPCTSTR lpszEntry); // Removes a complete section from the ini-file. BOOL DeleteSection(LPCTSTR lpszSection); // Variables protected: CString m_IniFilename; // The current ini-file used. }; #endif // !defined(AFX_INI_H__2478E9E2_E904_11D1_93C1_241C08C10000__INCLUDED_)
Ini.cpp
// Ini.cpp: implementation of the CIni class. // Author: Bjarke Viks鴈 // // Description: // Thin wrapper around the Win32 Windows Profile (Ini-file configuration) // interface. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "Ini.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CIni::CIni() { m_IniFilename.Empty(); } CIni::CIni(LPCTSTR IniFilename) { SetIniFilename( IniFilename ); } CIni::~CIni() { // Flush .ini file // (This should perhaps not be here. We risk to slow // down the system and this would be done at a more appropriate // time by the OS scheduler anyway) ::WritePrivateProfileString( NULL, NULL, NULL, m_IniFilename ); } ////////////////////////////////////////////////////////////////////// // Methods ////////////////////////////////////////////////////////////////////// #define MAX_INI_BUFFER 300 // Defines the maximum number of chars we can // read from the ini file RETCODE CIni::SetIniFilename(LPCTSTR IniFilename) { ASSERT(AfxIsValidString(IniFilename)); m_IniFilename = IniFilename; if( m_IniFilename.IsEmpty() ) return RET_INVALIDARGS; return RET_OK; }; UINT CIni::GetInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault) { ASSERT(AfxIsValidString(lpszSection)); ASSERT(AfxIsValidString(lpszEntry)); if( m_IniFilename.IsEmpty() ) return 0; // error CString sDefault; sDefault.Format( _T("%d"), nDefault ); CString s = GetString( lpszSection, lpszEntry, sDefault ); return _ttol( s ); }; CString CIni::GetString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszDefault) { ASSERT(AfxIsValidString(lpszSection)); ASSERT(AfxIsValidString(lpszEntry)); if( m_IniFilename.IsEmpty() ) return CString(); CString s; long ret = ::GetPrivateProfileString( lpszSection, lpszEntry, lpszDefault, s.GetBuffer( MAX_INI_BUFFER ), MAX_INI_BUFFER, m_IniFilename ); s.ReleaseBuffer(); if( ret==0 ) return CString(lpszDefault); return s; }; BOOL CIni::GetBoolean(LPCTSTR lpszSection, LPCTSTR lpszEntry, BOOL bDefault) { CString s = GetString(lpszSection,lpszEntry); if( s.IsEmpty() ) return bDefault; TCHAR c = _totupper( s[0] ); switch( c ) { case _T(‘Y‘): // YES case _T(‘1‘): // 1 (binary) case _T(‘O‘): // OK return TRUE; default: return FALSE; }; }; BOOL CIni::GetBinary(LPCTSTR lpszSection, LPCTSTR lpszEntry, BYTE** ppData, UINT* pBytes) { ASSERT(AfxIsValidString(lpszSection)); ASSERT(AfxIsValidString(lpszEntry)); return FALSE; }; BOOL CIni::WriteInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nValue) { ASSERT(AfxIsValidString(lpszSection)); ASSERT(AfxIsValidString(lpszEntry)); CString s; s.Format( _T("%d"), nValue ); return WriteString( lpszSection, lpszEntry, s ); }; BOOL CIni::WriteBoolean(LPCTSTR lpszSection, LPCTSTR lpszEntry, BOOL bValue) { CString s; bValue ? s=_T("Y") : s=_T("N"); return WriteString( lpszSection, lpszEntry, s ); }; BOOL CIni::WriteString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue) { ASSERT(AfxIsValidString(lpszSection)); ASSERT(AfxIsValidString(lpszEntry)); if( m_IniFilename.IsEmpty() ) return RET_NOTINITIALIZED; return ::WritePrivateProfileString( lpszSection, lpszEntry, lpszValue, m_IniFilename ); }; BOOL CIni::WriteBinary(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPBYTE pData, UINT nBytes) { ASSERT(AfxIsValidString(lpszSection)); ASSERT(AfxIsValidString(lpszEntry)); return FALSE; }; BOOL CIni::WriteExpandString(LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue) { ASSERT(AfxIsValidString(lpszSection)); ASSERT(AfxIsValidString(lpszEntry)); return FALSE; }; BOOL CIni::DeleteKey(LPCTSTR lpszSection, LPCTSTR lpszEntry) { ASSERT(AfxIsValidString(lpszSection)); ASSERT(AfxIsValidString(lpszEntry)); if( m_IniFilename.IsEmpty() ) return RET_NOTINITIALIZED; return ::WritePrivateProfileString( lpszSection, lpszEntry, NULL, m_IniFilename ); }; BOOL CIni::DeleteSection(LPCTSTR lpszSection) { ASSERT(AfxIsValidString(lpszSection)); if( m_IniFilename.IsEmpty() ) return RET_NOTINITIALIZED; return ::WritePrivateProfileString( lpszSection, NULL, NULL, m_IniFilename ); };
原文:http://www.cnblogs.com/kernel0815/p/3619006.html