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

Сайт управляется системой uCoz