MFC / GDI CRgn CreateEllipticRgn коротких два пикселя? - PullRequest
0 голосов
/ 29 марта 2020

Если я сделаю CRgn::CreateEllipticRgn(0, 0, 120, 120);, то результат заканчивается двумя пикселями справа и снизу. Это почему? Я подумал, может быть, потому, что область находится внутри контура, а не на контуре, но в этом случае это должна быть граница в 1 пиксель вокруг всего круга, а не 2 в правой и нижней части. Есть идеи?

TIA !!

1 Ответ

1 голос
/ 01 апреля 2020

Используйте картинку, чтобы объяснить проблему:

    //RECT
    hPen = CreatePen(PS_SOLID, 1, RGB(255, 100, 0));
    SelectObject(hdc, hPen);
    Rectangle(hdc, 10, 10, 130, 130);
    //Ellipse
    hBrush = CreateSolidBrush(RGB(255, 0, 0));
    HRGN hTemp = CreateEllipticRgn(10, 10, 130, 130);
    FrameRgn(hdc, hTemp, hBrush, 1, 1);

enter image description here

С Функция прямоугольника , это указывает:

Нарисованный прямоугольник исключает нижний и правый края.

Если используется перо PS_NULL, размеры прямоугольника будут на 1 пиксель меньше по высоте и на 1 пиксель меньше по ширине .

Начиная с CreateEllipticRgn , он указывает:

Ограничительный прямоугольник определяет размер, форму и ориентацию области: Длинные стороны прямоугольника определяют длину большой оси эллипса; короткие стороны определяют длину малой оси эллипса; , а центр прямоугольника определяет пересечение большой и малой осей.

Из результатов теста длина и ширина эллипс исключает нижний и правый края.

...