2009-02-12 10 views
3

Je crée HPEN en utilisant la méthode WinAPI GDI:WinAPI - comment dessiner une ligne pointillée?

HPEN hPen = CreatePen(PS_DOT, 1, color);

dessiner ensuite la ligne en utilisant les méthodes MoveToEx et LineTo.

En fait, la ligne tracée est en pointillés. 3 pixels vides, 3 pixels avec une ligne en pointillés. Pourquoi le style PS_DOT ne dessine pas de pointillés?

Comment dessiner une ligne pointillée en utilisant WinAPI?

Répondre

0

Je n'ai pas essayé, mais il pourrait être utile de vérifier les résultats de

HPEN hPen = CreatePen(PS_DOT, 0, color);

Une largeur de plume de zéro provoque GDI pour faire toujours la plume d'un pixel de large, quel que soit l'échelle associée avec le contexte de l'appareil. Cela peut être suffisant pour obtenir les points que vous voulez.

+0

:(Le même résultat - ligne pointillée (3x3) – user22814

+0

Drat, j'espérais que ce serait une solution rapide.Je suppose que vous devrez aller avec SAMills réponse, dans ce cas. – DavidK

1

J'ai aussi eu ce problème dans le passé. J'ai eu recours à LineDDA et à un processus de rappel. Il se peut que ce ne soit pas l'algorithme de dessin le plus efficace, mais vous maîtrisez désormais également l'espacement des points. Je suis allé avec cette approche parce qu'il y avait d'autres styles de stylo non-natifs que j'utilisais pour le rendu de ligne qui utilisait un motif binaire. J'ai ensuite marché le bit et utilisé setpixel pour les bits 'on'. Cela a bien fonctionné et a augmenté les lignes de style utiles.

5

Voici une solution merveilleuse par MaxHacher que je l'ai trouvé sur CodeProject
(http://www.codeproject.com/KB/GDI/DOTTED_PEN.aspx)

LOGBRUSH LogBrush;
LogBrush.lbColor = color;
LogBrush.lbStyle = PS_SOLID;
HPEN hPen = ExtCreatePen(PS_COSMETIC | PS_ALTERNATE, 1, &LogBrush, 0, NULL);

Il fonctionne bien!

Questions connexes