📄 gsconfig.cpp
字号:
// Config.cpp: implementation of the CConfig class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Gslib_internal.h"
#include "GsConfig.h"
char strTempBuffer[1000];
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CConfig::CConfig()
{
strcpy(m_szIniName, "");
}
CConfig::CConfig(char const *szfile)
{
assert(NULL!=szfile);
strcpy(m_szIniName, szfile);
}
CConfig::~CConfig()
{
}
void CConfig::SetINIFile(char const *szfile)
{
strcpy(m_szIniName, szfile);
}
//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
DWORD CConfig::GetHex( LPCSTR strSection, LPCSTR szName, LPCSTR szDefault )
{
TCHAR szBuffer[MAX_PATH];
DWORD dwResult = 0;
GetPrivateProfileString( strSection, szName, szDefault,
szBuffer, sizeof(szBuffer), m_szIniName );
if( _stscanf( szBuffer, TEXT("0x%x"), &dwResult ) != 1 )
{
dwResult = 0;
}
return dwResult;
}
//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
float CConfig::GetFloat( LPCSTR strSection, LPCSTR szName, LPCSTR szDefault )
{
TCHAR szBuffer[MAX_PATH];
GetPrivateProfileString( strSection, szName, szDefault,
szBuffer, sizeof(szBuffer), m_szIniName );
return (float)_tcstod(szBuffer,TEXT('\0'));
}
//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
long CConfig::GetLong( LPCSTR strSection, LPCSTR szName, LPCSTR szDefault )
{
TCHAR szBuffer[MAX_PATH];
GetPrivateProfileString( strSection, szName, szDefault,
szBuffer, sizeof(szBuffer), m_szIniName );
return _tcstol(szBuffer,TEXT('\0'),10);
}
GPOINT CConfig::GetPoint( LPCSTR szSection, LPCSTR szName, LPCSTR szDefault )
{
TCHAR szBuffer[MAX_PATH];
GetPrivateProfileString( szSection, szName, szDefault,
szBuffer, sizeof(szBuffer), m_szIniName );
TCHAR * sz = szBuffer;
GPOINT pt(0,0);
pt.x = _tcstol(sz,&sz,10);
if(*(sz+1)!=0)
pt.y = _tcstol(sz+1,&sz,10);
// return GPOINT(_tcstol(sz,&sz,10), _tcstol(sz+1,&sz,10));
return pt;
}
GRECT CConfig::GetRect( LPCSTR szSection, LPCSTR szName, LPCSTR szDefault )
{
TCHAR szBuffer[MAX_PATH];
GetPrivateProfileString( szSection, szName, szDefault,
szBuffer, sizeof(szBuffer), m_szIniName );
TCHAR * sz = szBuffer;
GRECT rc(0,0,0,0);
rc.left = _tcstol(sz,&sz,10);
if(*(sz+1)!=0)
rc.top = _tcstol(sz+1,&sz,10);
if(*(sz+1)!=0)
rc.right = _tcstol(sz+1,&sz,10);
if(*(sz+1)!=0)
rc.bottom = _tcstol(sz+1,&sz,10);
return rc;
}
GVECTOR CConfig::GetVector( LPCSTR szSection, LPCSTR szName, LPCSTR szDefault )
{
TCHAR szBuffer[MAX_PATH];
GetPrivateProfileString( szSection, szName, szDefault,
szBuffer, sizeof(szBuffer), m_szIniName );
TCHAR * sz = szBuffer;
GVECTOR vt(0,0,0);
// GRECT rc(0,0,0,0);
vt.x = (float)_tcstod(szBuffer,&sz);
if(*(sz+1)!=0)
vt.y = (float)_tcstod(sz+1,&sz);
if(*(sz+1)!=0)
vt.z = (float)_tcstod(sz+1,&sz);
return vt;
}
//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
void CConfig::GetString( LPTSTR szValue, UINT nChar, LPCSTR strSection, LPCSTR szName, LPCSTR szDefault )
{
GetPrivateProfileString( strSection, szName, szDefault,
szValue, nChar, m_szIniName );
}
//KEY CConfig::GetString( LPCSTR strSection, LPCSTR szName, LPCSTR szDefault )
//{
// char str[1000];
// GetPrivateProfileString( strSection, szName, szDefault,
// str, 1000, m_szIniName );
// return KEY(str);
//}
const char* CConfig::GetString( LPCSTR strSection, LPCSTR szName, LPCSTR szDefault )
{
// char str[1000];
GetPrivateProfileString( strSection, szName, szDefault,
strTempBuffer, 1000, m_szIniName );
return strTempBuffer;
}
BOOL CConfig::WriteFloat( float value, LPCSTR szSection, LPCSTR szName )
{
TCHAR szBuffer[MAX_PATH];
sprintf(szBuffer, "%f", value);
return WritePrivateProfileString( szSection, szName, szBuffer, m_szIniName );
}
BOOL CConfig::WriteLong( LONG value, LPCSTR szSection, LPCSTR szName )
{
TCHAR szBuffer[MAX_PATH];
sprintf(szBuffer, "%d", value);
return WritePrivateProfileString( szSection, szName, szBuffer, m_szIniName );
}
BOOL CConfig::WritePoint( GPOINT value, LPCSTR szSection, LPCSTR szName )
{
TCHAR szBuffer[MAX_PATH];
sprintf(szBuffer, "%d,%d", value.x, value.y);
return WritePrivateProfileString( szSection, szName, szBuffer, m_szIniName );
}
BOOL CConfig::WriteRect( GRECT value, LPCSTR szSection, LPCSTR szName )
{
TCHAR szBuffer[MAX_PATH];
sprintf(szBuffer, "%d,%d,%d,%d", value.left, value.top, value.right, value.bottom);
return WritePrivateProfileString( szSection, szName, szBuffer, m_szIniName );
}
BOOL CConfig::WriteVector( GVECTOR vector, LPCSTR szSection, LPCSTR szName )
{
TCHAR szBuffer[MAX_PATH];
sprintf(szBuffer, "%f,%f,%f", vector.x, vector.y, vector.z);
return WritePrivateProfileString( szSection, szName, szBuffer, m_szIniName );
}
BOOL CConfig::WriteString( const LPCSTR szValue, LPCSTR szSection, LPCSTR szName )
{
return WritePrivateProfileString( szSection, szName, szValue, m_szIniName );
}
BOOL CConfig::WriteHex( DWORD value, LPCSTR szSection, LPCSTR szName )
{
TCHAR szBuffer[MAX_PATH];
sprintf(szBuffer, "%x", value);
return WritePrivateProfileString( szSection, szName, szBuffer, m_szIniName );
}
UINT CConfig::GetBinary(LPCSTR lpszSection, LPCSTR lpszEntry,
LPBYTE pData, UINT nBytes)
{
assert(lpszSection != NULL);
assert(lpszEntry != NULL);
assert(pData != NULL);
assert(nBytes != 0);
TCHAR* str = new TCHAR[nBytes*2+1];
strcpy(str, "");
int i;
// UINT nPart = nBytes*2/1024 + 1; // 1k every part
// TCHAR szGet[1025];
// TCHAR subKey[256];
// for(i=0; i<nPart; i++)
// {
// sprintf(subKey,"%s@@@%d", lpszEntry, i);
// GetString(szGet, 1025, lpszSection, subKey, NULL);
// //szGet[1024]=0;
// strcat(str, szGet);
// }
GetString((LPTSTR)str, nBytes*2+1, lpszSection, lpszEntry, NULL);
int nLen = strlen(str);
if (nLen==0)
{
SAFE_DELETE_ARRAY(str);
return 0;
}
assert(nLen%2 == 0);
for (i=0;i<nLen;i+=2)
{
(pData)[i/2] = (BYTE)
(((str[i+1] - 'A') << 4) + (str[i] - 'A'));
}
SAFE_DELETE_ARRAY(str);
return nLen/2;
}
BOOL CConfig::WriteBinary(LPCSTR lpszSection, LPCSTR lpszEntry,
LPBYTE pData, UINT nBytes)
{
assert(lpszSection != NULL);
// convert to string and write out
LPTSTR lpsz = new TCHAR[nBytes*2+1];
for (UINT i = 0; i < nBytes; i++)
{
lpsz[i*2] = (TCHAR)((pData[i] & 0x0F) + 'A'); //low nibble
lpsz[i*2+1] = (TCHAR)(((pData[i] >> 4) & 0x0F) + 'A'); //high nibble
}
lpsz[i*2] = 0;
BOOL bResult = true;
// UINT nPart = nBytes*2/1024 + 1; // 1k every part
// TCHAR szOut[1025];
// TCHAR subKey[256];
// for(i=0; i<nPart; i++)
// {
// int a = (i==nPart-1)? (nBytes*2)%1024 : 1024;
// strncpy(szOut,lpsz + i*1024, a);
// szOut[a]=0;
// sprintf(subKey,"%s@@@%d", lpszEntry, i);
// if(false==WriteString(szOut, lpszSection, subKey))
// bResult=false;
// }
bResult = WriteString(lpsz, lpszSection, lpszEntry);
delete[] lpsz;
return bResult;
}
BOOL CConfig::GetBOOL( LPCSTR szSection, LPCSTR szName, LPCSTR szDefault )
{
TCHAR szGet[10];
GetPrivateProfileString( szSection, szName, szDefault,
szGet, 10, m_szIniName );
_strlwr(szGet);
if("true"==std::string(szGet))
return TRUE;
return FALSE;
}
BOOL CConfig::WriteBOOL( BOOL bValue, LPCSTR szSection, LPCSTR szName )
{
return WritePrivateProfileString( szSection, szName, bValue ? "true" : "false", m_szIniName );
}
VOID CConfig::GetFont( GSFONT &font, LPCSTR szSection, LPCSTR szName, LPCSTR szDefault )
{
TCHAR szBuffer[MAX_PATH];
GetPrivateProfileString( szSection, szName, szDefault,
szBuffer, sizeof(szBuffer), m_szIniName );
TCHAR * sz = szBuffer;
strcpy(font.strFont, szBuffer);
sz = strchr(font.strFont, ',');
if(sz)
{
sz[0] = 0;
sz[1] = 0;
}
sz = szBuffer + strlen(font.strFont) + 1;
font.size = _tcstol(sz,&sz,10);
if(*(sz+1)!=0)
font.charset = _tcstol(sz+1,&sz,10);
if(*(sz+1)!=0)
font.Italic = _tcstol(sz+1,&sz,10);
if(*(sz+1)!=0)
font.Underline = _tcstol(sz+1,&sz,10);
if(*(sz+1)!=0)
font.StrikeOut = _tcstol(sz+1,&sz,10);
}
BOOL CConfig::WriteFont( GSFONT font, LPCSTR szSection, LPCSTR szName )
{
TCHAR szBuffer[MAX_PATH];
sprintf(szBuffer, "%s,%d,%d,%d,%d,%d", font.strFont, font.size, font.charset, font.Italic, font.Underline, font.StrikeOut);
return WritePrivateProfileString( szSection, szName, szBuffer, m_szIniName );
}
D3DCOLOR CConfig::GetColor( LPCSTR szSection, LPCSTR szName, LPCSTR szDefault )
{
TCHAR szBuffer[MAX_PATH];
GetPrivateProfileString( szSection, szName, szDefault,
szBuffer, sizeof(szBuffer), m_szIniName );
TCHAR * sz = szBuffer;
int r,g,b,a;
a = _tcstol(sz,&sz,10);
if(*(sz+1)!=0)
r = _tcstol(sz+1,&sz,10);
if(*(sz+1)!=0)
g = _tcstol(sz+1,&sz,10);
if(*(sz+1)!=0)
b = _tcstol(sz+1,&sz,10);
return RGBA_MAKE(r, g, b, a);
}
BOOL CConfig::WriteColor( D3DCOLOR color, LPCSTR szSection, LPCSTR szName )
{
TCHAR szBuffer[MAX_PATH];
sprintf(szBuffer, "%d,%d,%d,%d", RGBA_GETALPHA(color), RGBA_GETRED(color), RGBA_GETGREEN(color), RGBA_GETBLUE(color));
return WritePrivateProfileString( szSection, szName, szBuffer, m_szIniName );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -