wxWidgets

I Sizer.

guida di riferimento

I sizer sono dei contenitori di componenti della GUI, usati per dimensionare e disporre automaticamente tali componenti sul form. Il programmatore, di conseguenza, non deve preoccuparsi di allinearli o di calcolare le coordinate della loro posizione.


Conversione di unità di misura


Aspetto dell'applicazione

A lato si vede il risultato che si ottiene seguendo i passi indicati in questo esercizio.

Allo studente si richiede di spostare ed allineare i componenti allo scopo di conferire alla finestra dell'applicazione un aspetto che ne migliori la leggibilità


Preparare una nuova cartella in cui salvare i file del progetto, denominarla "conversione".
Avviare wxDevC++, creare un nuovo progetto basato su wxWidgets Frame e salvarlo nella cartella "conversione".

Aprire la scheda componenti e collocare un wxBoxSizer sul Frame. Assegnargli l'orientamento verticale.

Aggiungere un wxStaticText al sizer e modificare la proprietà Label: "Conversione di unità di misura".

Aggiungere una casella di scelta wxChoice. Nella finestra delle proprietà fare clic sulla riga Items e, nella casella che si apre inserire le seguenti righe:

    Scegli U.M.
    Libbre -> Grammi
    m3 -> litri
    Joule -> Calorie
    pollici -> cm

Premere Ok.

Alla proprietà Index del componente wxChoice assegnare il valore 0, in modo che, per default, compaia la prima voce dell'elenco.

Aggiungere un componente wxStaticText. Cancellare il testo presente nella proprietà Label.

Aggiungere un componente wxEdit.

Aggiungere un wxButton e modificare la proprietà Label in "Converti".

Aggiungere due wxStaticText e cancellare il testo presente nella proprietà Label.


I metodi del componente wxChoice.

Il gestore di evento onClick.

Fare doppio clic sul componente wxButton. Si apre la scheda con il sorgente "ConversioneFrm.cpp". Scorrere la pagina fino a raggiungere l'intestazione della funzione:
void ConversioneFrm::WxButton1Click(wxCommandEvent& event)
e completarla con le seguenti istruzioni:

1int indice = WxChoice1->GetSelection()
2wxString str = wxString::Format(wxT("%i"), indice)
3WxEdit1->SetValue(str)

Il cui significato è il seguente:

RigaCommento
1dichiara una variabile intera e le assegna il valore corrispondente alla posizione dell'elemento selezionato nel componente Choice.
2dichiara un'istanza di classe wxString.
La funzione wxT() converte in formato stringa l'intero specificato tra parentesi tonde,
Format trasforma le cifre di un numero in un array di caratteri.
3Scrive nella casella di testo.

Lanciare l'esecuzione del programma ed osservare come, cambiando l'elemento selezionato e premendo il pulsante, viene riportato il suo indice nella casella di testo. Chiudere l'applicazione e ritornare al wxDevC++.

Dopo la verifica del funzionamento del metodo GetSelection, le righe 2 e 3 devono essere cancellate, o comunque modificate, come verrà illustrato.

L'operazione di conversione è, normalmente, un prodotto tra il valore espresso in una unità di misura e una costante che rappresenta il coefficiente di conversione.

  int indice = WxChoice1->GetSelection();
  double coeff;
  switch (indice) {
    case 0:
      break;
    case 1:
      coeff = 453.6;
      WxStaticText2->SetLabel(_("da libbre"));
      WxStaticText3->SetLabel(_("a grammi"));
      break;
    case 2:
      coeff = 1000;
      WxStaticText2->SetLabel(_("da m3"));
      WxStaticText3->SetLabel(_("a litri"));
      break;
    case 3:
      coeff = 0.2389;
      WxStaticText2->SetLabel(_("da joule"));
      WxStaticText3->SetLabel(_("a calorie"));
      break;
    case 4:
      coeff = 2.54;
      WxStaticText2->SetLabel(_("da pollici"));
      WxStaticText3->SetLabel(_("a cm"));
      break;
    }
    double misura = atoi(WxEdit1->GetValue());
    misura *= coeff;
    wxString str = wxString::Format(wxT("%f"), misura);
    WxStaticText4->SetLabel(str);