2008-10-30 11 views
1

Le MSDN documentation est (légèrement) clair sur les deux faits suivants sur stylos GDI:Problèmes avec l'utilisation de modes Win32 GDI Pens non pris en charge?

  1. Un stylo cosmétique (créer via CreatePen ou ExtCreatePen w/PS_COSMETIC) doit être 1 unité large (bien, < = 1, mais n'allons pas là-bas).

  2. Un plume géométrique (ExtCreatePen w/PS_GEOMETRIC) doit être solide (PS_SOLID uniquement, pas PS_DASH, etc.). Ils peuvent, cependant, dessiner des lignes plus épaisses. Ceci est clairement documenté dans le lien que j'ai mis ci-dessus comme étant seulement une restriction 9x (je suis stupide). Pour ma défense (mauvais) commentaires et logique (cassée) dans mon code m'a conduit à croire le contraire. Certains autres articles googled doivent avoir été écrits en ne se concentrant que sur Windows 9x.

Pourquoi puis-je voilate ces règles et ont GDI dessiner heureux avec ces stylos?

je peux créer graisse (largeur = 10, par exemple) stylos cosmétiques et pointillés stylos géométriques. Zut, je peux créer un gros stylo géométrique en pointillés! Ces stylos semblent fonctionner correctement habituellement. Le seul problème que j'ai vu est dans Polyline quand je passe de très grands réseaux de points - il rend les lignes très lentement. Cependant, Polyline agit étrangement avec de grands tableaux en général - il agit différemment avec les mauvais stylos. (mes autres problèmes de polyligne peuvent être une autre question ...)

Est-il toujours sûr d'utiliser des stylos cosmétiques larges ou des motifs géométriques larges?

Répondre

1

En général, vous devez respecter l'API documentée, sinon vous risquez de vous fier au comportement spécifique à la version du système d'exploitation.

Les ExtCreatePen restrictions que vous décrivez (par exemple, pas PS_DASH avec PS_GEOMETRIC) Valable uniquement pour Win9x, non WinNT, etc. NT/2000/XP votre « gras, stylo en pointillés géométrique » ne devrait pas être un problème. Notez également que Polyline a certaines limitations sur Win9x. Si vous voulez des lignes pointillées, je suggérerais d'utiliser PS_USERSTYLE pour que vous contrôliez la longueur des tirets et des espaces vides, plutôt que de vous fier à ce que vous propose PS_DASH par défaut.

+0

Bien que je sache que je devrais suivre les docs, le code publié ne suit déjà pas les règles. J'espérais savoir pourquoi cela fonctionnait - ou ne fonctionnerait pas (à quelle vitesse le correctif doit-il être publié). Cependant, en soulignant l'erreur géométrique de ma part est assez bon pour moi d'accepter cela! – Aardvark

+0

Mes problèmes de polyligne seront une autre question - je peux briser les fenêtres avec l'appel en passant de grandes baies même sur les versions modernes de Windows (Vista) ... – Aardvark

+0

@Aardvark - Je crains de ne pouvoir vous donner plus de détails, Je ne faisais que passer par ce que les docs disent. – ChrisN