return S_0K:
}

По сообщениям WMSIZE и WM_M0VE, поступающим при изменении размеров окна или его перемещении, необходимо вызвать функцию OnMoveO, которая изменит

Настройка кадрирования область просмотра. Первый раз эти сообщения приходят при создании окна, то есть раньше, чем происходит инициализация DirectX. Поэтому область просмотра корректируется только тогда, когда указатель Device не равен NULL. Код функции OnMove() приведен в листинге 23.8.

Листинг 23.8

void OnMove(HWND hWnd.UINT message.WPARAM wParam.LPARAM lParam) {
int e;
GetClientRect(hWnd.&WindowVP):

if(Device) //Если NULL - библиотека еще не инициализирована, if (Lens) {

VP.Width - WindowVP.right; //Задали область просмотра по VP.Height - WindowVP.bottom; //текущим размерам окна, e - Device->SetViewport(&VP): //Изменили область просмотра. }

else
{

VP.Width - Tl.right; //Задали область просмотра по размерам VP.Height - Tl.bottom; //максимизированного окна. VP.X - VP.Y - 0;

Device->SetViewport(&VP);..Изменили область просмотра. С1ientToScreen(hWnd.(POINT *)&WindowVP); //Определили координаты угла окна на экране. WindowVP.left - WindowVP.left - Tl.left; //Определили координаты if(WindowVP.top<0) WindowVP.top - 0; //прообраза окна на WindowVP.top- - WindowVP.top - Tl.top: //невидимой странице. WindowVP.right+ - WindowVP.left; // Структура WindowVP будет задавать WindowVP.bottom* - WindowVP.top; // участок страницы, копируемый } // в видеопамять.

}

При смене режима надо изменить размеры рабочей области вызовом той же функции OnMoveO и обеспечить обновление изображения функцией InvalidateRectO. Код соответствующей функции приведен в листинге 23.9.

Листинг 23.9

void SwitchMode( HWND hWnd. UINT message. WPARAM wParam. LPARAM lParam) {
if(Lens) {
Lens - FALSE;
VP.Width - Tl.right;
VP.Height - Tl.bottom;
VP.X - VP.Y - 0:
Device->SetViewport(&VP);

SetWindowText(hWnd." Шторка");

}
else
{

SetWindowText(hWnd." Линза"):

Lens - TRUE;
}

продолжение &

Применение библиотеки DirectX

Листинг 23.9 (продолжение)


⇐ Предыдущая| |Следующая ⇒