Сообщить трехмерному окну об изменении
void CMainFrame::OnActivateApp(BOOL bActive, HTASK hTask) {
CFrameWnd::OnActivateApp(bActive, hTask) ;
// Сообщить трехмерному окну об изменении состояния m_wnd3d.SendMessage(WM_ACTIVATEAPP, (WPARAM)bActive, (LPARAM)hTask) ;
}
void CMainFrame::OnPaletteChanged(CWnd* pFocusWnd) {
// Сообщить трехмерному окну об изменении палитры m_wnd3d.SendMessage(WM_PALETTECHANGED, pFocusWnd ?
(WPARAM)pFocusWnd->GetSafeHwnd() : 0);
\
void CMainFrame::OnMove(int
x, int y) {
CFrameWnd::OnMove(x, y) ;
// Сообщить трехмерному окну о перемещении обрамленного
окна
m_wnd3d.SendMessage(WM_MOVE,
О,
MAKELPARAM(0, 0)) ;
Как видите, для нормальной работы DirectSD необходимо лишь, чтобы ваше приложение посылало сообщения трехмерному окну, которое берет на себя частные аспекты взаимодействия с механизмом визуализации.
42 'ЭДГ Глава 2. Расставляем декорации
Меню File
Остается лишь предусмотреть обработку команд меню File ¦ New и File ¦ Open. Ранее мы уже построили функцию для удаления текущего и создания нового макета, поэтому команда File ¦ New реализуется тривиально (воспользуйтесь ClassWizard для добавления идентификатора объекта ID_FILE_NEW):
void CMainFrame::OnFileNew()
{
NewScene ();
}
Команда File ¦ Open обрабатывается двумя следующими функциями:
BOOL CMainFrame::OpenFile(const char* pszPath) {
// Попытаться открыть файл с фигурой
C3dShape sh;
const char* pszFile = sh.Load(pszPath);
if (!pszFile) return FALSE;
// Создать новый макет NewScene ();
ASSERT(m pScene);
// Присоединить новую фигуру к макету m pScene->AddChild(&sh);
sh.SetRotation(l, 1, 1, 0.02);
// Включить имя в список последних открывавшихся файлов AfxGetApp()->AddToRecentFileList(pszFile) ;
return TRUE;
}
void CMainFrame::OnFileOpen() f
OpenFile(NULL) ;
}
Теперь давайте посмотрим, как работает функция OpenFile. Сначала мы создаем новый объект C3dShape и вызываем его функцию Load. Эта функция либо пытается открыть файл, либо, при отсутствии заданного имени файла, выводит окно диалога, в котором пользователю предлагается выбрать файл. В том случае, если файл имеет правильный формат, код класса C3dShape открывает его и создает трехмерный объект на основании данных из файла. Понятно, правда? Далее мы присоединяем новый объект к макету и приводим его во вращение, чтобы увидеть макет во всей красе. Имя файла заносится в список последних открывавшихся файлов, что облегчает его повторное открытие в будущем (вспомните, что функция OpenFile также вызывается в функции
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий