Jackie Lloyd Ответов: 2

Как нарисовать толстую линию с помощью cpen, которая имеет прямые края на концах?


Привет,
Я пытаюсь провести толстую линию с CPen. Проблема в том, что концы закруглены. Линии похожи на сосиски! Есть ли способ сделать конец прямым, чтобы он имел прямые углы и эффективно выглядел как прямоугольник?

Что я уже пробовал:

Вот мой код:

// CDC* m_CDC;
CPen* pen = new CPen;
int colour = RGB(0, 255, 0);
pen->CreatePen(PS_SOLID, 100000, (COLORREF)colour);
m_CDC->SelectObject(pen);

2 Ответов

Рейтинг:
2

Jackie Lloyd

Спасибо, Рик, я сделал почти то, что ты сказал, но ты определенно направил меня в правильном направлении. Я не мог использовать ExtCreatePen, так как он возвращает HPEN, а мне нужен CPen. (Я пытался найти способ обращения, но потерпел неудачу, может быть, он есть?). Поэтому я использовал другую версию CreatePen:

LOGBRUSH lbrush;
lbrush.lbColor = colour;
lbrush.lbStyle = BS_SOLID;
pen->CreatePen(PS_SOLID | PS_GEOMETRIC | PS_ENDCAP_SQUARE, 500000, &lbrush);
m_CDC->SelectObject(pen);


Однако я понятия не имею, почему следующее не сгладило концы:
pen->CreatePen(PS_SOLID | PS_GEOMETRIC | PS_ENDCAP_FLAT, 500000, (COLORREF)colour);
m_CDC->SelectObject(pen);


Рейтинг:
16

Rick York

Вы пробовали ExtCreatePen с установленным флагом PS_ENDCAP_FLAT? Есть несколько других флагов для этой функции, которые могут быть полезны. Я рекомендую прочитать документы для этого.


Jackie Lloyd

Прежде чем я увидел ваше сообщение, я просто попробовал CreatePen(PS_SOLID | PS_ENDCAP_FLAT, ... что не имело никакого значения. Я попробую ExtCreatePen(), спасибо.