| 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 | < Назад | Оглавление | Далее > |