Controlli di disegno e controlli secondari ignari della loro posizione nel genitore

1

Le applicazioni e i sistemi operativi hanno un sacco di finestre e controlli, sotto finestre e controlli secondari. Ho notato che è comune che i controlli secondari abbiano i loro sistemi di coordinate resettati per iniziare a 0, rendendo il disegno molto più semplice. Tuttavia non sono sicuro di come sia fatto e di come sarei in grado di farlo.

Creerò un'applicazione che esegue molti disegni 2D e include elementi come barre di scorrimento implementate e molti controlli con controlli secondari. Voglio che il sistema di coordinate dei controlli secondari si reimposti su 0 e voglio che i controlli abbiano una conoscenza minima della loro posizione all'interno dei controlli padre e dei controlli padre genitore, ecc.

L'unica cosa che posso pensare è di passare in coordinate di trasformazione e avere ciascun sotto-controllo quando si disegna aggiungendo le coordinate di trasformazione x e y ai loro oggetti che vengono disegnati in modo che vengano trasformati nella posizione corretta. Questo diventa rapidamente molto stancante quando so che ci sono modi migliori.

Non sono sicuro di cosa userò, sarà GDI +, OpenGL o Direct2D. Sto solo cercando informazioni generali su come è stato fatto in modo che i controlli secondari possano disegnare a x e y 0 e si apre in qualunque posizione si trovi il controllo effettivo.

    
posta Dimension 11.07.2013 - 01:49
fonte

1 risposta

1

L'ho fatto una volta, all'epoca, ho persino implementato gli algoritmi di disegno. Per quanto riguarda il modo in cui funziona almeno in Windows, richiede un handle per un contesto di periferica (DC), che gestisce identifica un'unità sullo schermo, una finestra, un controllo, ecc.

Con quella maniglia hai un livello extra che converte le posizioni relative in una posizione reale sullo schermo, e che ha anche l'area di ritaglio, in modo da non disegnare al di fuori di essa e altre cose. La matrice di trasformazioni a cui fai riferimento esiste, si chiama viewport (non posso dire se è implementata in questo modo). Ogni volta che dipingi un controllo, richiedi la DC e chiama le funzioni di disegno per lavorare con quella DC.

Se vuoi implementare tutto questo da solo, puoi comunque utilizzare Windows standard e utilizzare il contesto del dispositivo fornito da loro. Oppure puoi simulare ogni unità nella finestra e creare quel livello che gestirà le operazioni di disegno. In questo caso devi anche distribuire gli eventi al controllo target, ma dovrai disporre delle coordinate del controllo.

    
risposta data 11.07.2013 - 02:38
fonte

Leggi altre domande sui tag