Pergunta

O MSDN documentação é (um pouco ) claro sobre os dois fatos seguintes sobre GDI canetas:

  1. 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á).

  2. 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 e fortes canetas geométricos tracejadas. Heck, eu posso criar uma gordura, tracejada caneta geométrica!

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?

Foi útil?

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á.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top