📄 ini2.cpp
字号:
// Ini.cpp: Implementierung der Klasse CIni.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Ini2.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
// If the IniFilename contains no path,
// the module-directory will be add to the FileName,
// to avoid storing in the windows-directory
/*static*/ void CIni::AddModulPath(CString& strFileName,BOOL bModulPath /*= TRUE*/)
{
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
_splitpath( strFileName, drive, dir, fname, ext );
if( ! drive[0] )
{
//PathCanonicalize(..) doesn't work with for all Plattforms !
CString strModule;
if( bModulPath )
{
GetModuleFileName(NULL,strModule.GetBuffer(MAX_INI_BUFFER),MAX_INI_BUFFER);
strModule.ReleaseBuffer();
}
else
{
GetCurrentDirectory(MAX_INI_BUFFER,strModule.GetBuffer(MAX_INI_BUFFER));
strModule.ReleaseBuffer();
// fix by "cpp@world-online.no"
strModule.TrimRight('\\');
strModule.TrimRight('/');
strModule += "\\";
}
strModule.ReleaseBuffer();
_splitpath( strModule, drive, dir, fname, ext );
strModule = drive;
strModule+= dir;
strModule+= strFileName;
strFileName = strModule;
}
}
/*static*/ CString CIni::GetDefaultSection()
{
return AfxGetAppName();
}
/*static*/ CString CIni::GetDefaultIniFile(BOOL bModulPath /*= TRUE*/)
{
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
CString strTemp;
CString strApplName;
GetModuleFileName(NULL,strTemp.GetBuffer(MAX_INI_BUFFER),MAX_INI_BUFFER);
strTemp.ReleaseBuffer();
_splitpath( strTemp, drive, dir, fname, ext );
strTemp = fname; //"ApplName"
strTemp += ".ini"; //"ApplName.ini"
if( bModulPath )
{
strApplName = drive;
strApplName += dir;
strApplName += strTemp;
}
else
{
GetCurrentDirectory(MAX_INI_BUFFER,strApplName.GetBuffer(MAX_INI_BUFFER));
strApplName.ReleaseBuffer();
strApplName.TrimRight('\\');
strApplName.TrimRight('/');
strApplName += "\\";
strApplName += strTemp;
}
return strApplName;
}
//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////
// Creates/Use file : "Drive:\ApplPath\ApplName.ini"
CIni::CIni(BOOL bModulPath /*= TRUE*/):
m_bModulPath(bModulPath)
{
m_strFileName = GetDefaultIniFile(m_bModulPath);
m_strSection = GetDefaultSection();
}
CIni::CIni(CIni const& Ini, BOOL bModulPath /*= TRUE*/):
m_strFileName(Ini.m_strFileName),
m_strSection(Ini.m_strSection),
m_bModulPath(Ini.m_bModulPath)
{
if(m_strFileName.IsEmpty())
m_strFileName = GetDefaultIniFile(m_bModulPath);
AddModulPath(m_strFileName,m_bModulPath);
if(m_strSection.IsEmpty())
m_strSection = GetDefaultSection();
}
CIni::CIni(CString const& strFileName, BOOL bModulPath /*= TRUE*/):
m_strFileName(strFileName),
m_bModulPath(bModulPath)
{
if(m_strFileName.IsEmpty())
m_strFileName = GetDefaultIniFile(m_bModulPath);
AddModulPath(m_strFileName,bModulPath);
m_strSection = GetDefaultSection();
}
CIni::CIni(CString const& strFileName, CString const& strSection, BOOL bModulPath /*= TRUE*/):
m_strFileName(strFileName),
m_strSection(strSection),
m_bModulPath(bModulPath)
{
if(m_strFileName.IsEmpty())
m_strFileName = GetDefaultIniFile(m_bModulPath);
AddModulPath(m_strFileName,bModulPath);
if(m_strSection.IsEmpty())
m_strSection = GetDefaultSection();
}
CIni::~CIni()
{
}
//////////////////////////////////////////////////////////////////////
// Zugriff auf Quelle/Ziel von IO-Operationen
//////////////////////////////////////////////////////////////////////
void CIni::SetFileName(CString const& strFileName)
{
m_strFileName = strFileName;
AddModulPath(m_strFileName);
}
void CIni::SetSection(CString const& strSection)
{
m_strSection = strSection;
}
CString const& CIni::GetFileName() const
{
return m_strFileName;
}
CString const& CIni::GetSection() const
{
return m_strSection;
}
//////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////
void CIni::Init( LPCSTR strFileName, LPCSTR strSection/* = NULL*/)
{
if(strSection != NULL)
m_strSection = strSection;
if(strFileName != NULL)
m_strFileName = strFileName;
}
CString CIni::GetString(CString strEntry,LPCSTR strDefault/*=NULL*/,LPCSTR strSection/* = NULL*/)
{
if(strDefault == NULL)
return CString(GetLPCSTR(strEntry,strSection,""));
else
return CString(GetLPCSTR(strEntry,strSection,strDefault));
}
double CIni::GetDouble(CString strEntry,double fDefault/* = 0.0*/,LPCSTR strSection/* = NULL*/)
{
CString strDefault;
strDefault.Format("%g",fDefault);
GetLPCSTR(strEntry,strSection,strDefault);
return atof(m_chBuffer);
}
float CIni::GetFloat(CString strEntry,float fDefault/* = 0.0*/, LPCSTR strSection/* = NULL*/)
{
CString strDefault;
strDefault.Format("%g",fDefault);
GetLPCSTR(strEntry,strSection,strDefault);
return (float)atof(m_chBuffer);
}
int CIni::GetInt(CString strEntry,int nDefault/* = 0*/,LPCSTR strSection/* = NULL*/)
{
CString strDefault;
strDefault.Format("%d",nDefault);
GetLPCSTR(strEntry,strSection,strDefault);
return atoi(m_chBuffer);
}
WORD CIni::GetWORD(CString strEntry,WORD nDefault/* = 0*/,LPCSTR strSection/* = NULL*/)
{
CString strDefault;
strDefault.Format("%u",nDefault);
GetLPCSTR(strEntry,strSection,strDefault);
return (WORD)atoi(m_chBuffer);
}
BOOL CIni::GetBool(CString strEntry,BOOL bDefault/* = FALSE*/,LPCSTR strSection/* = NULL*/)
{
CString strDefault;
strDefault.Format("%d",bDefault);
GetLPCSTR(strEntry,strSection,strDefault);
return ( atoi(m_chBuffer) != 0 );
}
CPoint CIni::GetPoint(CString strEntry, CPoint ptDefault, LPCSTR strSection)
{
CPoint ptReturn=ptDefault;
CString strDefault;
strDefault.Format("(%d,%d)",ptDefault.x, ptDefault.y);
CString strPoint = GetString(strEntry,strDefault);
sscanf(strPoint,"(%d,%d)", &ptReturn.x, &ptReturn.y);
return ptReturn;
}
CRect CIni::GetRect(CString strEntry, CRect rectDefault, LPCSTR strSection)
{
CRect rectReturn=rectDefault;
CString strDefault;
//old version :strDefault.Format("(%d,%d,%d,%d)",rectDefault.top,rectDefault.left,rectDefault.bottom,rectDefault.right);
strDefault.Format("%d,%d,%d,%d",rectDefault.left,rectDefault.top,rectDefault.right,rectDefault.bottom);
CString strRect = GetString(strEntry,strDefault);
int nRead = 0;
//new Version found
if( 4==sscanf(strRect,"%d,%d,%d,%d",&rectDefault.left,&rectDefault.top,&rectDefault.right,&rectDefault.bottom))
return rectReturn;
//old Version found
sscanf(strRect,"(%d,%d,%d,%d)", &rectReturn.top,&rectReturn.left,&rectReturn.bottom,&rectReturn.right);
return rectReturn;
}
COLORREF CIni::GetColRef(CString strEntry, COLORREF crDefault, LPCSTR strSection)
{
int temp[3]={ GetRValue(crDefault),
GetGValue(crDefault),
GetBValue(crDefault)};
CString strDefault;
strDefault.Format("RGB(%hd,%hd,%hd)",temp[0],temp[1],temp[2]);
CString strColRef = GetString(strEntry,strDefault);
sscanf(strColRef,"RGB(%d,%d,%d)", temp, temp+1, temp+2);
return RGB(temp[0],temp[1],temp[2]);
}
void CIni::WriteString(CString strEntry,CString str, LPCSTR strSection/* = NULL*/)
{
if(strSection != NULL)
m_strSection = strSection;
WritePrivateProfileString(m_strSection,strEntry,str,m_strFileName);
}
void CIni::WriteDouble(CString strEntry,double f, LPCSTR strSection/*= NULL*/)
{
if(strSection != NULL)
m_strSection = strSection;
CString strBuffer;
strBuffer.Format("%g",f);
WritePrivateProfileString(m_strSection,strEntry,strBuffer,m_strFileName);
}
void CIni::WriteFloat(CString strEntry,float f, LPCSTR strSection/* = NULL*/)
{
if(strSection != NULL)
m_strSection = strSection;
CString strBuffer;
strBuffer.Format("%g",f);
WritePrivateProfileString(m_strSection,strEntry,strBuffer,m_strFileName);
}
void CIni::WriteInt(CString strEntry,int n, LPCSTR strSection/* = NULL*/)
{
if(strSection != NULL)
m_strSection = strSection;
CString strBuffer;
strBuffer.Format("%d",n);
WritePrivateProfileString(m_strSection,strEntry,strBuffer,m_strFileName);
}
void CIni::WriteWORD(CString strEntry,WORD n, LPCSTR strSection/* = NULL*/)
{
if(strSection != NULL)
m_strSection = strSection;
CString strBuffer;
strBuffer.Format("%u",n);
WritePrivateProfileString(m_strSection,strEntry,strBuffer,m_strFileName);
}
void CIni::WriteBool(CString strEntry,BOOL b, LPCSTR strSection/* = NULL*/)
{
if(strSection != NULL)
m_strSection = strSection;
CString strBuffer;
strBuffer.Format("%d",b);
WritePrivateProfileString(m_strSection, strEntry, strBuffer, m_strFileName);
}
void CIni::WritePoint(CString strEntry,CPoint pt, LPCSTR strSection)
{
if(strSection != NULL)
m_strSection = strSection;
CString strBuffer;
strBuffer.Format("(%d,%d)",pt.x,pt.y);
Write(m_strFileName,m_strSection,strEntry,strBuffer);
}
void CIni::WriteRect(CString strEntry,CRect rect, LPCSTR strSection)
{
if(strSection != NULL)
m_strSection = strSection;
CString strBuffer;
strBuffer.Format("(%d,%d,%d,%d)",rect.top,rect.left,rect.bottom,rect.right);
Write(m_strFileName,m_strSection,strEntry,strBuffer);
}
void CIni::WriteColRef(CString strEntry,COLORREF cr, LPCSTR strSection)
{
if(strSection != NULL)
m_strSection = strSection;
CString strBuffer;
strBuffer.Format("RGB(%d,%d,%d)",GetRValue(cr), GetGValue(cr), GetBValue(cr));
Write(m_strFileName,m_strSection,strEntry,strBuffer);
}
char* CIni::GetLPCSTR(CString strEntry, LPCSTR strSection, LPCSTR strDefault)
{
// evtl Section neu setzen
if(strSection != NULL)
m_strSection = strSection;
CString temp;
if(strDefault == NULL)
temp = Read(m_strFileName,m_strSection,strEntry,CString());
else
temp = Read(m_strFileName,m_strSection,strEntry,strDefault);
return (char*)memcpy(m_chBuffer,(LPCTSTR)temp,temp.GetLength()+1);// '+1' damit die Null am Ende mit kopiert wird
}
void CIni::SerGetString( BOOL bGet,CString & str,CString strEntry,LPCSTR strSection,LPCSTR strDefault)
{
if(bGet)
str = GetString(strEntry,strDefault/*=NULL*/,strSection/* = NULL*/);
else
WriteString(strEntry,str, strSection/* = NULL*/);
}
void CIni::SerGetDouble( BOOL bGet,double& f, CString strEntry,LPCSTR strSection/* = NULL*/,double fDefault/* = 0.0*/)
{
if(bGet)
f = GetDouble(strEntry,fDefault/*=NULL*/,strSection/* = NULL*/);
else
WriteDouble(strEntry,f, strSection/* = NULL*/);
}
void CIni::SerGetFloat( BOOL bGet,float & f, CString strEntry, LPCSTR strSection/* = NULL*/,float fDefault/* = 0.0*/)
{
if(bGet)
f = GetFloat(strEntry,fDefault/*=NULL*/,strSection/* = NULL*/);
else
WriteFloat(strEntry,f, strSection/* = NULL*/);
}
void CIni::SerGetInt( BOOL bGet,int & n, CString strEntry,LPCSTR strSection/* = NULL*/,int nDefault/* = 0*/)
{
if(bGet)
n = GetInt(strEntry,nDefault/*=NULL*/,strSection/* = NULL*/);
else
WriteInt(strEntry,n, strSection/* = NULL*/);
}
void CIni::SerGetDWORD( BOOL bGet,DWORD & n, CString strEntry,LPCSTR strSection/* = NULL*/,DWORD nDefault/* = 0*/)
{
if(bGet)
n = (DWORD)GetInt(strEntry,nDefault/*=NULL*/,strSection/* = NULL*/);
else
WriteInt(strEntry,n, strSection/* = NULL*/);
}
void CIni::SerGetBool( BOOL bGet,BOOL & b, CString strEntry,LPCSTR strSection/* = NULL*/,BOOL bDefault/* = FALSE*/)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -