지원되지 않는 Win32 GDI PENS 모드 사용 문제?
문제
MSDN 선적 서류 비치 GDI 펜에 대한 다음 두 가지 사실에 대해 (다소) 분명합니다.
화장품 펜 (createpen 또는 extcreatepen w/ ps_cosmetic을 통해 생성)은 1이어야합니다. 단위 넓은 (음, <= 1이지만 거기에 가지 마십시오).
기하학적 (ps_geometric w/ ps_geometric w/ ps_geometric) 펜은 고체 (ps_solid 만, ps_dash 등) 펜이어야합니다. 그러나 그들은 더 뚱뚱한 선을 그릴 수 있습니다.이것은 위에 놓은 링크에 9 배 제한 (멍청한 제한)으로 명확하게 문서화되어 있습니다. 내 코드의 내 방어 (나쁜) 의견과 (깨진) 논리로 인해 다른 방법으로 믿게되었습니다. 다른 Googled 기사는 Windows 9X 만 동의해야합니다.
왜이 규칙을 검증 하고이 펜으로 GDI를 행복하게 끌어들일 수 있습니까?
나는 지방 (예를 들어 너비 = 10)을 만들 수 있습니다. 그리고 점선 기하학적 펜. 도대체, 나는 지방, 점선 기하학적 펜을 만들 수 있습니다!
이 펜은 잘 작동하는 것 같습니다 대개. 내가 본 유일한 문제는 매우 큰 점수의 점을 통과 할 때 폴리 라인입니다. 선을 매우 느리게 만듭니다. 그러나 폴리 라인은 일반적으로 큰 배열로 이상하게 작용하고 있습니다. 나쁜 펜. (내 다른 폴리 라인 문제는 또 다른 질문 일 수 있습니다 ...)
넓은 화장품 펜을 사용하는 것이 안전합니까? 아니면 패턴이있는 넓은 기하학적?
해결책
일반적으로 문서화 된 API를 준수해야합니다. 그렇지 않으면 OS 버전 특정 동작에 의존 할 위험이 있습니다.
그만큼 ExtCreatePen
당신이 설명하는 제한 (예 : no PS_DASH
~와 함께 PS_GEOMETRIC
)는 Winnt가 아닌 Win9X에만 적용되므로 NT/2000/XP에서 "지방, 점선 기하학적 펜"은 문제가되지 않아야합니다. 또한 주목하십시오 Polyline
Win9X에는 몇 가지 제한이 있습니다.
점선을 원한다면 사용하는 것이 좋습니다 PS_USERSTYLE
기본값에 의존하기보다는 대시와 간격의 길이를 제어하도록 PS_DASH
당신을 준다.