Почему изображение исчезает? - PullRequest
2 голосов
/ 06 мая 2011

у меня есть следующий код ...

    case WM_PAINT:
    {
        hdc = BeginPaint(hwnd,&paintSt);
        temphdc = hdc;
        GetClientRect(hwnd,&aRect);
        if(hBitmap!=NULL)
        {               
            HDC memDC = CreateCompatibleDC(hdc);
            if(memDC!=NULL)
            {
                BITMAP bmp;
                GetObject(hBitmap,sizeof(bmp),&bmp);
                SelectObject(memDC,hBitmap);
                SetStretchBltMode(hdc,HALFTONE);
                StretchBlt(hdc,0,0,aRect.right,aRect.bottom,
                           memDC,0,0,bmp.bmWidth,bmp.bmHeight,
                           SRCCOPY);
                DeleteObject(&bmp);
                ReleaseDC(hwnd,memDC);
            }

        }           
        // the code for painting 
        EndPaint(hwnd,&paintSt);
    }
    break;

hBitmap - это глобальная переменная, которая назначается в некотором месте в коде .... Изображение отображается, но исчезает при каждом сворачивании окна....

Может кто-нибудь объяснить это?

заранее спасибо,

Ответы [ 2 ]

4 голосов
/ 06 мая 2011

Ваш код очистки неверен, у вас плохо работают утечки.Должен быть легко виден в TaskMgr.exe, вкладка Процессы.Просмотр + Выбор столбцов и отметьте объекты GDI.Этот код перестает работать, когда количество дескрипторов объекта GDI достигает 10000.Да, это может произойти, когда вы измените размер окна, так как будет много запросов на рисование.

Не удаляйте BITMAP, это просто как структура.Восстановите старый растровый дескриптор, который вы вернули из SelectObject () перед удалением memDC.Не используйте ReleaseDC, DeleteDC требуется.Обратите внимание на возвращаемое значение этих функций, они сообщают вам, когда вы запутались, но это не сработает, если вы никогда не проверяете с помощью assert.

Программирование GDI болезненно с этими явными правилами очистки.Рассмотрим библиотеку классов, чтобы позаботиться о такой тяжелой работе, они никогда не ошибаются.

1 голос
/ 06 мая 2011

Я полагаю, что hBitmap каким-то образом меняется на ноль при минимизации.Размещение кода, в котором вы назначаете и ссылаетесь на hBitmap, поможет определить проблему, которую я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...