Графика для Windows средствами DirectDraw

Завершение


Как бы ни была хороша программа Bounce, рано или поздно вам захочется убрать ее с экрана. Нажатие клавиши Escape завершает работу программы. Это происходит в обработчике OnKeyDown():


void bounceWin::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { if (nChar==VK_ESCAPE) PostMessage( WM_CLOSE ); DirectDrawWin::OnKeyDown(nChar, nRepCnt, nFlags); }


Приложение завершает работу, отправляя сообщение WM_CLOSE. В нашем приложении на это сообщение реагирует и класс окна, и класс приложения. Класс окна отвечает сообщением WM_DESTROY, для которого в DirectDrawWin предусмотрен обработчик OnDestroy(). Класс DirectDrawWin в данном обработчике освобождает объекты DirectDraw и всю память, занимаемую приложением. Функция OnDestroy() выглядит так:


void DirectDrawWin::OnDestroy() { if (primsurf) primsurf->Release(), primsurf=0;

if (palette) palette->Release(), palette=0;

if (ddraw2) ddraw2->Release(), ddraw2=0;

for (int i=0;i<totaldrivers;i++) { if (driver[i].guid) delete [] driver[i].guid; free( driver[i].desc ); free( driver[i].name ); } }


Каждый из указателей на интерфейсы DirectDraw сначала освобождается, а затем обнуляется. Затем мы освобождаем память, занятую информацией о драйверах DirectDraw.

Класс приложения обрабатывает завершение в функции ExitInstance(), в которой удаляется класс окна:


int DirectDrawApp::ExitInstance() { delete ddwin;

return CWinApp::ExitInstance(); }


На этом наше знакомство с программой Bounce заканчивается. Однако до сих пор речь шла только о полноэкранных приложениях. Оставшаяся часть этой главы посвящена оконным приложениям.



Содержание раздела