Итак, в прошлом шаге мы с Вами считали данные из ресурсов. Как же 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; }