Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Classe OROLOGIO

Classe OROLOGIO

19403_size.png
N.B. I file contenuti nell'archivio .zip scaricabile per mezzo del pulsante "Download" in fondo a questa pagina NON riguardano la versione più recente del programma. Per ottenere l'ultima versione, fare riferimento a main.cpp, orologio.h e orologio.cpp (raggiungibili tramite il pulsante "Sfoglia il sorgente" in fondo a questa pagina).













COS'E'?

La classe OROLOGIO riguarda oggetti destinati a tracciare l'immagine di un orologio "analogico" in un riquadro predefinito nell'ambito della finestra passata al momento della creazione. Gli oggetti di classe OROLOGIO hanno funzioni esclusivamente grafiche.

FUNZIONE CREATRICE

La funzione creatrice ha questo prototipo:

Codice sorgente

OROLOGIO( HWND hwnd = NULL, Rect *rOrologio = NULL);



Se il rettangolo rOrologio non viene specificato o è esplicitamente NULL, viene creato un orologio di dimensioni 200x200 pixel, posizionato alle coordinate 0,0 entro la client area della finestra hwnd.

Se la finestra hwnd non viene specificata o è esplicitamente NULL, l'oggetto rileva ed usa la finestra correntemente in primo piano tramite la funzione GetForegroundWindow().

Se si verificano errori nel momento della creazione dell'oggetto, viene lanciata un'eccezione di tipo const char * che punta a una stringa contenente una sommaria descrizione dell'errore intercorso.

Si presuppone che al momento della creazione e della distruzione d'un oggetto di classe OROLOGIO Gdi+ sia correttamente inizializzato e "funzionante".

Non è prevista (e quindi non è consentita) ogni operazione che richieda il ricorso ad operatori di assegnamento e/o costruttori di copia.

PROPRIETA' PUBBLICHE

Alcune proprietà degli oggetti di classe OROLOGIO sono pubbliche e possono essere personalizzate senza troppi riguardi.

Tra le proprietà pubbliche, i colori dello sfondo dei margini dell'oggetto, il colore dello sfondo del quadrante, il colore del bordo del quadrante e quello dei numeri del quadrante.

Codice sorgente - presumibilmente Python

  1. ARGB cSfondoOggetto;   // lo sfondo del rettangolo

  2. ARGB cBordoQuadrante;  // il colore del bordo del quadrante

  3. ARGB cSfondoQuadrante; // il colore dello sfondo del quadrante

  4. ARGB cNumeriQuadrante; // il colore dei numeri delle ore




Altri colori sono accessibili tramite l'array ARGB c[5], usando come indice questi valori:

Codice sorgente

enum { kLancettaOre, kLancettaMinuti, kLancettaSecondi, kMarcatoriOre, kMarcatoriMinuti };



Ad esempio, volendo impostare la lancetta dei minuti in modo che sia verde brillante, basterebbe impostare il secondo elemento dell'array c[5] in questo modo:

Codice sorgente - presumibilmente Plain Text

  1. oggetto_orologio.c[kLancettaMinuti] = 0xFF00FF00;




La stessa enumerazione può essere usata anche per modificare (o leggere) la lunghezza delle lancette, o il loro spessore, espressi come valori di tipo REAL. Ad esempio:

Codice sorgente - presumibilmente Plain Text

  1. oggetto_orologio.l[kLancettaSecondi] = 2.0f; // lunghezza della lancetta

  2. REAL spessoreLancettaOre = oggetto_orologio.s[kLancettaOre];




FUNZIONI MEMBRO PUBBLICHE

L'impostazione dei valori dell'ora visualizzata dall'oggetto avviene per mezzo delle due versioni della funzione membro ImpostaOra():

Codice sorgente

void ImpostaOra();    
void ImpostaOra( WORD ora, WORD minuto, WORD secondo );



La versione priva di parametri imposta l'oggetto sull'ora corrente di sistema.
La versione parametrizzata imposta invece ora, minuto e secondo coerentemente coi parametri ora, minuto e secondo passati.
Le funzioni ImpostaOra() non ritracciano automaticamente l'orologio, bensì si limitano a modificarne le proprietà interne immagazzinando i nuovi valori.

Per impostare lo spessore del bordo del quadrante è disponibile questa funzione membro:

Codice sorgente

void SpessoreBordoQuadrante( REAL spessore );



La funzione SpessoreBordoQuadrante() permette anche di conoscere il valore corrente del bordo del quadrante se chiamata senza parametri:

Codice sorgente - presumibilmente Plain Text

  1. REAL SpessoreBordoQuadrante();




Altre funzioni membro "informative" sono Rettangolo(), Centro() e Raggio().

Codice sorgente - presumibilmente Plain Text

  1. Rect Rettangolo();

  2. PointF Centro();

  3. REAL Raggio();




Rettangolo() restituisce un Rect che descrive l'area di pertinenza dell'oggetto, in coordinate locali rispetto alla finestra passata al momento della creazione.

Centro() restituisce un PointF che descrive il centro del quadrante dell’orologio, in coordinate locali rispetto alla finestra passata al momento della creazione.

Raggio() restituisce un REAL che riporta il raggio del quadrante dell'orologio (ad esclusione dello spessore del bordo che "sporge" esternamente ad esso).

Per "leggere" i dati relativi all'ora alla quale si riferisce attualmente un oggetto di classe OROLOGIO si usano queste tre funzioni:

Codice sorgente - presumibilmente Plain Text

  1. WORD RicavaOra();

  2. WORD RicavaMinuto();

  3. WORD RicavaSecondo();




Per richiedere all'oggetto di tracciarsi nella finestra alla quale è abbinato, si usa la funzione membro Traccia(), disponibile in due varianti:

Codice sorgente - presumibilmente C++

  1. void Traccia( bool aggiorna = true );

  2. void Traccia( int ora, int minuto, int secondo, bool aggiorna = true );




La prima versione traccia l'ora correntemente immagazzinata nelle proprietà dell'oggetto, mentre la seconda imposta le proprietà dell'oggetto in modo che rappresentino l'ora comunicata tramite i parametri ora, minuto e secondo per poi usarle per tracciare l'ora. L'ora viene tracciata in offscreen, quindi copiata nella finestra abbinata all'oggetto solo se il parametro aggiorna è true.

Per copiare l'offscreen nella finestra abbinata all'oggetto senza prima ridisegnare l'orologio, si usi la funzione membro Aggiorna():

Codice sorgente

void Aggiorna();



Categoria: Moduli e librerie / C++
Piattaforma:

Downloads: 1344
Rating: (3 voti)
Data: 04/12/2015
Download

A proposito dell'autore

Amatore, autodidatta dai tardi anni '90. Prime esperienze in HyperTalk. Successivamente, C con qualche infarinatura di C++.

Aggiungi un commento

Inserisci il tuo commento qui
Esegui il login oppure registrati per inviare commenti