В документации MSDN (в некоторой степени) четко изложены следующие два факта о ручках GDI:
Косметическое перо (созданное с помощью CreatePen или ExtCreatePen с PS_COSMETIC) должно иметь ширину 1 (ну, <= 1, но давайте не будем там). </p>
Геометрическое (ExtCreatePen w / PS_GEOMETRIC) перо должно быть сплошным (только PS_SOLID, без PS_DASH и т. Д.). Однако они могут рисовать жирные линии. Это ясно задокументировано в ссылке, которую я поставил выше, только как ограничение 9x (я тупой). К моей защите (плохие) комментарии и (сломанная) логика в моем коде заставили меня поверить в обратное. Некоторые другие статьи с гуглом должны быть написаны, учитывая только Windows 9x.
Почему я могу нарушить эти правила и сделать так, чтобы GDI счастливо рисовал этими ручками?
Я могу создать жирные (например, ширину = 10) косметические ручки и пунктирные геометрические ручки. Черт возьми, я могу создать жирную, пунктирную геометрическую ручку!
Эти ручки работают нормально , обычно . Единственная проблема, с которой я столкнулся, - в Polyline, когда я пропускаю очень большие массивы точек - он очень медленно отрисовывает линии. Тем не менее, Polyline ведет себя странно с большими массивами в целом - он работает по-разному с bad ручками. (другие мои проблемы с полилинией могут быть другим вопросом ...)
Всегда ли безопасно использовать широкие косметические ручки или широкие геометрические с узорами?