Developers often need to store configuration files for use with their plugin applications. There is a standard location defined for these files. This allows a 3ds Max user to have all their configuration files stored together and not spread around different hard-to-find locations.
The standard location is the PlugCFG
directory off the 3ds Max root directory. This location may be changed by a user using the Files > Configure Paths menu command. The developer should retrieve the location of this directory using the GetDir
(APP_PLUGCFG_DIR
) method of the BitmapManager
class or the Interface
class.
The following samples code from \MAXSDK\SAMPLES\RETIRED\WSD\WSD.CPP demonstrates one approach a developer may use to read and write configuration files:
#defineWSDCONFIGNAME_T("wsd.ini")
#defineWSDSECTION _T(" Default State")
#defineWSDHOSTKEY _T("Hostname")
#defineWSDSYSKEY _T("System")
#defineWSDDEFAULT _T("accom")
#defineWSDDEFSYS _T("ntsc")
// GetCfgFilename()
voidBitmapIO_WSD::GetCfgFilename( TCHAR *filename )
{
_tcscpy( filename, TheManager->GetDir(APP_PLUGCFG_DIR));
intlen = _tcslen(filename);
if (len)
{
if(_tcscmp(&filename[len-1,_T("\\")))
_tcscat(filename,_T("\\"));
}
_tcscat(filename,WSDCONFIGNAME);
}
GetPrivateProfileString
function retrieves a string from the specified section in an initialization file. This function is part of the Windows API. See the Windows API on-line help for more details.// ReadCfg()
intBitmapIO_WSD::ReadCfg()
{
TCHARfilename[MAX_PATH;
TCHARsystem[64;
GetCfgFilename(filename);
intres = GetPrivateProfileString(
WSDSECTION,
WSDHOSTKEY,
WSDDEFAULT,
hostname,
MAX_PATH,
filename);
if (res)
{
GetPrivateProfileString(
WSDSECTION,
WSDSYSKEY,
WSDDEFSYS,
system,
64,
filename);
}
else
{
_tcscpy(system,WSDDEFSYS);
}
if (!_tcscmp(system,WSDDEFSYS))
{
ntsc = TRUE;
height = 486;
}
else
{
ntsc = FALSE;
height = 576;
}
return (res);
}
WritePrivateProfileString
function copies a string into the specified section of the specified initialization file. This function is part of the Windows API. See Windows API on-line help for more details.// WriteCfg()
voidBitmapIO_WSD::WriteCfg()
{
TCHARfilename[MAX_PATH;
TCHARsystem[64;
if (ntsc)
_tcscpy(system,WSDDEFSYS);
else
_tcscpy(system,_T("pal"));
GetCfgFilename(filename);
WritePrivateProfileString(WSDSECTION,WSDHOSTKEY,hostname,filenam);
WritePrivateProfileString(WSDSECTION,WSDSYSKEY,system,filename);
}