| INIファイルを使った情報の保存 |
m_iData1 = 20;
m_sString1 = "mojiretsu";
……
// INIファイルに情報を保存する
CWinApp* pApp = AfxGetApp();
pApp->WriteProfileInt("ProgramData", "IntData1", m_iData1);
pApp->WriteProfileString("ProgramData", "String1", m_sString1);
上記のようにした場合、INIファイルの内容は以下のようになる。
[ProgramData] IntData=20 String1=mojiretsuもちろん、保存した情報を取り出すこともできる。方法は以下のとおり。
// INIファイルから情報を取り込む
CWinApp* pApp = AfxGetApp();
m_iData = pApp->GetProfileInt("ProgramData", "IntData1", 0);
m_sString1 = pApp->GetProfileString("ProgramData", "String1", NULL);
この場合、GetProfileInt及びGetProfileStringの3番目の引数には、
情報の読み込みに失敗した場合のデフォルト値として与えられる値を指定することができる。
BOOL CMyApp::InitInstance()
{
AfxEnableControlContainer();
// 標準的な初期化処理
// もしこれらの機能を使用せず、実行ファイルのサイズを小さくしたけ
// れば以下の特定の初期化ルーチンの中から不必要なものを削除して
// ください。
#ifdef _AFXDLL
Enable3dControls(); // 共有 DLL 内で MFC を使う場合はここをコールしてください。
#else
Enable3dControlsStatic(); // MFC と静的にリンクする場合はここをコールしてください。
#endif
// INIファイルのパス名を変更する
if( m_pszProfileName ) {
delete ((void*)m_pszProfileName);
m_pszProfileName = new char[MAX_PATH];
if( !m_pszProfileName ) {
AfxMessageBox("メモリ不足エラーです。");
return FALSE;
}
::GetCurrentDirectory(MAX_PATH, (LPTSTR)m_pszProfileName);
strcat((LPTSTR)m_pszProfileName, "\\UKLITTLECLOCK.INI");
}
……
}
CWinAppクラスのm_pszProfileNameメンバ変数には、INIファイルへのパス名が設定されている。
要するにこれを変更してやればよいのだが、単純に値を代入するのではなく、上記のように一旦メモリを解放し、
ヒープ上にメモリを確保してそこへ値を代入しなければならない。 int CMyApp::ExitInstance()
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
if( m_pszProfileName ) {
delete ((void*)m_pszProfileName);
m_pszProfileName = NULL; // これを忘れずに!!
}
return CWinApp::ExitInstance();
}
SetRegistryKey("My Software\\Applications");
この場合、レジストリの次の位置へ情報が格納される。
実際に情報を格納したり取り出したりする方法は、INIファイルの場合と全く同じである。
詳細については、上記のINIファイルの項を参照のこと。