Problemas com o uso modos Win32 GDI canetas não suportados?
Pergunta
O MSDN documentação é (um pouco ) claro sobre os dois fatos seguintes sobre GDI canetas:
-
A Cosmetic caneta (criar via CreatePen ou ExtCreatePen w / PS_COSMETIC) deve ser 1 unidade de largura (bem, <= 1, mas não vamos ir lá).
-
A geométrica (ExtCreatePen w / PS_GEOMETRIC) caneta deve sólido (PS_SOLID apenas, sem PS_DASH, etc). Eles podem, no entanto, desenhar linhas mais gordos.Isto é claramente documentada no link eu colocar acima apenas como uma restrição 9x (eu sou mudo). Para minha defesa (mau) comentários e (quebrado) lógica no meu código levou-me a acreditar no contrário. Alguns outros artigos pesquisei deve ter sido escrito concidering somente para Windows 9x.
Por que eu posso voilate estas regras e ter GDI feliz desenhar com essas penas?
I pode criar gordura (largura = 10, por exemplo) canetas cosméticos
Estas canetas parecem funcionar bem geralmente . O único problema que eu vi é no Polyline quando eu passar muito grandes conjuntos de pontos - ele processa as linhas muito lentamente. No entanto, Polyline está agindo estranhamente com grandes matrizes em geral - é justs age de forma diferente com os ruins canetas. (Meus outros problemas polilinha pode ser outra pergunta ...)
É sempre seguro para usar canetas de largura cosméticos ou largas geométrico com padrões?
Solução
Em geral, você deve aderir à API documentado, caso contrário corre o risco de depender de comportamento versão específica OS.
As restrições ExtCreatePen
você descreve (por exemplo, não PS_DASH
com PS_GEOMETRIC
) só se aplicam a Win9x, não WinNT, assim por diante NT XP seu / 2000 / "gordura, tracejada caneta geométrica" ??não deve ser um problema. Observe também que Polyline
tem algumas limitações em Win9x.
Se você quiser linhas tracejadas, eu sugiro usar PS_USERSTYLE
para que você controlar os comprimentos dos traços e lacunas, em vez de confiar em qualquer PS_DASH
padrão lhe dá.