правильное использование GetClipRgn? - PullRequest
7 голосов
/ 13 августа 2010

Я хочу написать функцию, которая должна установить область отсечения на DC, но восстановить все существующие области отсечения на DC, когда это будет сделано.

Итак, я нашел GetClipRgn это звучит как то, что я хочу, но кажется странным.Я не смог найти никаких примеров его использования, и Петцольду было нечего предложить.

Я придумал следующее:

void DrawStuff( HDC hDC )
{
    HRGN restoreRegion = CreateRectRgn( 0, 0, 0, 0 );
    if (GetClipRgn( hDC, restoreRegion ) != 1)
    {
        DeleteObject( restoreRegion );
        restoreRegion = NULL;
    }

    // 
    // Set new region, do drawing
    //

    SelectClipRgn( hDC, restoreRegion );
    if (restoreRegion != NULL)
    {
        DeleteObject( restoreRegion );
    }
}

Мне кажется странным, что мне нужно создатьрегион, чтобы получить текущий регион.

Это правильное использование?

Есть ли лучший способ добиться того же эффекта?

Ответы [ 3 ]

4 голосов
/ 12 сентября 2011

Что ж, ближайший к правильному ответу комментарий Ханса Пассанта:

Да, это странная функция. Ваш код выглядит хорошо.

4 голосов
/ 08 июля 2014

Я использую функции SaveDC и RestoreDC:

Функция SaveDC сохраняет текущее состояниезаданный контекст устройства (DC) путем копирования данных, описывающих выбранные объекты и графические режимы (такие как растровое изображение, кисть, палитра, шрифт, перо, область, режим рисования и режим отображения) в стек контекста.

Чувствуется чище.

1 голос
/ 13 августа 2010

Будет ли int SelectClipRgn( __in HDC hdc, __in HRGN hrgn); выполнять работу?

Функция SelectClipRgn выбирает регион в качестве текущей области отсечения для указанного контекста устройства.

Используется только копия выбранного региона.Сам регион может быть выбран для любого количества других контекстов устройства или может быть удален.

Функция SelectClipRgn предполагает, что координаты региона указаны в единицах устройства.

Чтобы удалитьобласть отсечения контекста устройства, укажите дескриптор области NULL.

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