Настройка размеров окна
На моем компьютере установлено разрешение экрана 1280х 1024. Microsoft Windows обладает одной скверной привычкой — по умолчанию она создает громадное окно лишь потому, что у меня установлено большое разрешение экрана. При работе с приложениями, для которых такое большое окно не требуется, я обычно устанавливаю исходный размер окна, включая пару лишних строк в CMainFrame::PreCreateWindow. В приведенном ниже фрагменте задается начальный размер окна 300х350 пикселей:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {
// Задать исходный размер окна
cs.cx = 300;
cs.су = 350;
return CFrameWnd::PreCreateWindow(cs);
ЧЁЙЙ-Й*
Модификация главного окна "тЩЦ: 39
Функция NewScene
Настало время поближе познакомиться с функцией NewScene, о которой было сказано выше:
BOOL CMainFraitie : : NewScene ()
{
// Удалить макет, если он существует if (m pScene) {
m_wnd3d.SetScene(NULL) ;
delete m_pScene;
m_pScene = NULL;
}
// Создать исходный макет m_pScene = new CSdScene;
if (!m_pScene->Create()) return FALSE;
// Установить источники света C3dDirLight dl;
dl.Create(0.8, 0.8, 0.8);
m_pScene->AddChild(&dl) ;
dl.SetPosition(-2, 2, -5);
dl.SetDirectionfl, -1, 1);
m_pScene->SetAmbientLight(0.4, 0.4, 0.4);
m wnd3d.SetScene(m pScene);
return TRUE;
t
Мы включим функцию NewScene в файл MamFrm.cpp. Она удаляет существующий макет и создает новый, со стандартным расположением источников света. Затем макет присоединяется к сцене, которая является частью трехмерного окна. Экспериментируя с трехмерными объектами, я хочу быть уверенным в том, что они уничтожаются и создаются без всяких проблем. Данная функция позволяет удалить все созданные ранее объекты и заново начать работу со макетом (она принесла большую пользу, когда мой малолетний сын схватил джойстик и загнал все объекты куда-то за пределы экрана).
Пересчет размеров трехмерного окна
Так как AppWizard создал панель инструментов и строку состояния, занимающие место в клиентной области окна, нам необходимо иметь возможность заново вычислить размеры трехмерного окна в том случае, если пользователь перемещает или убирает панель инструментов или же скрывает строку состояния. Воспользуйтесь ClassWizard и создайте функцию CMainFrame::RecalcLayout, которая переопределяет функцию CFrameWnd::RecalcLayout: