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