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

bda5893f

Завершение


Как бы ни была хороша программа 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 заканчивается. Однако до сих пор речь шла только о полноэкранных приложениях. Оставшаяся часть этой главы посвящена оконным приложениям.


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