Прежде чем рассказывать о функциях этого класса напомню, что указатель на него можно получить из любого места программы воспользовавшись функцией AfxGetApp():
CWinApp* pApp=AfxGetApp();Итак, в этом классе есть функция WriteProfileString() эта функция запишет информацию в ini файл ассоциированный с приложением Имя_приложения.INI, вот смотрите код:
// Test.cpp : Defines the entry point for the application. // #include "stdafx.h" #include "afxwin.h" class CMyApp: public CWinApp { public: virtual BOOL InitInstance(); }; BOOL CMyApp::InitInstance() { WriteProfileString("Setion 1","Section Intem","Probe"); return TRUE; } CMyApp theApp;Запустите его на выполнение. В результате в каталоге Windows появится файл с именем Test.INI примерно такого содержания.
[Setion 1] Section Intem=ProbeПолное описание функции вот оно.
BOOL WriteProfileString ( LPCTSTR lpszSection, // секция LPCTSTR lpszEntry, // ключ LPCTSTR lpszValue // значение );Откуда MFC знает в какой именно INI файл нужно писать ??? Конечно MFC пользуется стандартной функцией Win 32 API, а в неё необходимо передавать имя файла. По этому поводу есть глобальная переменная m_pszProfileName, в которой и хранится имя этой переменной. Попробуйте такой код.
BOOL CMyApp::InitInstance() { WriteProfileString("Setion 1","Section Intem","Probe"); AfxMessageBox(m_pszProfileName); return TRUE; }Вопрос следующий: откуда берется эта переменная ? Где-то в грубине кода MFC скрыта такая строка
lstrcat(szExeName, _T(".INI"))Давайте посмотрим, что это такое.
BOOL CMyApp::InitInstance() { WriteProfileString("Setion 1","Section Intem","Probe"); AfxMessageBox(m_pszProfileName); AfxMessageBox(m_pszExeName); return TRUE; }Это имя нашего запускного файла. А его откуда взяли ??? Вот примерно такой код
TCHAR szBuff[_MAX_PATH]; VERIFY(::GetModuleFileName(m_hInstance, szBuff, _MAX_PATH)); LPTSTR lpszExt = _tcsrchr(szBuff, '.'); ASSERT(lpszExt != NULL); ASSERT(*lpszExt == '.'); *lpszExt = 0; // no suffix TCHAR szExeName[_MAX_PATH]; TCHAR szTitle[256]; // get the exe title from the full path name [no extension] VERIFY(AfxGetFileName(szBuff, szExeName, _MAX_PATH) == 0);При желании можете и сами написать типа
BOOL CMyApp::InitInstance() { WriteProfileString("Setion 1","Section Intem","Probe"); AfxMessageBox(m_pszProfileName); AfxMessageBox(m_pszExeName); TCHAR szBuff[_MAX_PATH]; VERIFY(::GetModuleFileName(m_hInstance, szBuff, _MAX_PATH)); AfxMessageBox(szBuff); return TRUE; }
Функция GetModuleFileName возврашает путь и имя запускного файла.