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

Итак, в прошлом шаге мы с Вами считали данные из ресурсов. Как же MFC их находит. Создаем кнопку и код к ней.

void CTestAppDlg::OnButton5() 
{
HINSTANCE hInst;
hInst = AfxGetResourceHandle();
	if (hInst !=0)
	{
		if (FindResource(hInst,MAKEINTRESOURCE(IDC_CURSOR1),
			 RT_GROUP_CURSOR)!=NULL) 
		{
			AfxMessageBox("Yes");
		};
	};
};
Есть функция AfxGetResourceHandle(), которая возвращает указатель на ресурсы. Дальше используется функция FindResource() для поиска нужного ресурса. Для этого передается указатель на ресурсы, строка имени ресурса, если у нас строка числовая, то необходимо применить макрос MAKEINTRESOURCE, который переведет числовое значение в строковое. Кроме того необходимо указать группу ресурсов.

При запуске приложения MFC помещает в переменную afxCurrentResourceHandle указатель на ресурсы. Хотите посмотреть интересный ход. Вот измененый код кнопки.

void CTestAppDlg::OnButton5() 
{
HINSTANCE hInst;
........
afxCurrentResourceHandle=NULL;
}
После нажатия на кнопку всякое ображение к функциям использующим ресурсы приведет к аварийной остановке программы. Это круто !!! Мне кажется, что данная переменная должна быть защищена от изменения, так как неосторожное обращение с ней может привести к катастрофе приложения. Интересно это тоже так задумано ???? :-))) Сама переменная спрятана за макроподстановкой.
#define afxCurrentResourceHandle    AfxGetModuleState()->m_hCurrentResourceHandle
Поэтому код можно поменять на следующий. Эффект тот же.
void CTestAppDlg::OnButton5() 
{
........
//afxCurrentResourceHandle=NULL;
AfxGetModuleState()->m_hCurrentResourceHandle=NULL;
}

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