Шаг 123 - Дальше CWinApp

Прежде чем рассказывать о функциях этого класса напомню, что указатель на него можно получить из любого места программы воспользовавшись функцией 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 возврашает путь и имя запускного файла.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.