Domanda

La MSDN documentazione è (in qualche modo ) chiarire i seguenti due fatti sulle penne GDI:

  1. Una penna cosmetica (creata tramite CreatePen o ExtCreatePen con PS_COSMETIC) deve essere larga 1 unità (beh, < = 1, ma non andiamo lì).

  2. Una penna geometrica (ExtCreatePen w / PS_GEOMETRIC) deve essere solida (solo PS_SOLID, no PS_DASH, ecc.). Possono, tuttavia, tracciare linee più grasse. Questo è chiaramente documentato nel link che ho messo sopra come solo una restrizione 9x (sono stupido). A mia difesa, i commenti (cattivi) e la logica (rotta) nel mio codice mi hanno portato a credere diversamente. Alcuni altri articoli su Google devono essere stati scritti con il supporto solo di Windows 9x.

Perché posso annullare queste regole e fare in modo che GDI disegni con queste penne?

Posso creare penne cosmetiche grosse (larghezza = 10, ad esempio) e tratteggiate. Cavolo, posso creare una grossa penna geometrica tratteggiata!

Queste penne sembrano funzionare bene di solito . L'unico problema che ho visto è in Polilinea quando passo grandi matrici di punti - rende le linee molto lentamente. Tuttavia, Polyline agisce in modo strano con grandi array in generale - semplicemente agisce in modo diverso con le penne cattive . (i miei altri problemi con la polilinea potrebbero essere un'altra domanda ...)

È mai sicuro usare penne cosmetiche larghe o wide Geometric con motivi?

È stato utile?

Soluzione

In generale dovresti aderire all'API documentata, altrimenti rischi di affidarti al comportamento specifico della versione del sistema operativo.

Le restrizioni ExtCreatePen che descrivi (es. no PS_DASH con PS_GEOMETRIC) si applicano solo a Win9x, non a WinNT, quindi su NT / 2000 / XP la tua " grasso, penna geometrica tratteggiata quot; non dovrebbe essere un problema. Si noti inoltre che Polyline presenta alcune limitazioni su Win9x.

Se vuoi linee tratteggiate, ti suggerirei di utilizzare PS_USERSTYLE in modo da controllare la lunghezza dei trattini e degli spazi vuoti, piuttosto che fare affidamento su qualsiasi valore predefinito <=>.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top