Newsgroup: it.comp.programmare.win32
Titolo: tecniche di programmazione

In un programma c win32 che visualizza una finestra di Dialogo e ne gestisce
gli eventi che tecniche si possono utilizzare per modulare il più possibile
il codice.
Cioè :
BOOL __stdcall  ProceuraDialogo( HWND hwndDlg, UINT uMsg, WPARAM wParam,
LPARAM lParam)
{
   if( uMsg == WM_CLOSE )
   {
        EndDialog( hwndDlg, 0 );
        return TRUE;
    }
    else if( uMsg == WM_COMMAND )
    {
        WORD wNotifica = HIWORD( wParam );
        WORD wIdentificatore = LOWORD( wParam );
         if( wNotifica == STN_CLICKED && wIdentificatore == 101 )
          {
             .......
          }
    return TRUE;
    }
  return FALSE;
}
Cioè raggruppare tutti i comportamenti in un' unica funzione non mi sembra
giusto.
Dove posso trovare qualcosa a riguardo su Internet?
grazie!!

 giusto.
...e tu allora scrivi piů funzioni separate, invece di una soltanto ;-)
Massimo

giusto. 
Un'idea che mi viene in mente e' quella di creare un vettore di
puntatori a funzione, indicizzato con il valore intero del messaggio.
In questo caso, la procedura si risolverebbe con :
BOOL __stdcall  ProceuraDialogo( HWND hwndDlg, UINT uMsg, 
                                               WPARAM wParam, 
                                               LPARAM lParam)
{
     return (fptr[uMsg])( hwndDlg, wParam, lParam ) ;
}
--
Andrea Laforgia (ICQ 87230455)
------------------------------ 
#exclude <windows.h>

 Massimo
Cioè utilizzare uno switch che richiami le funzioni a seconda dei casi?
Si, ma se si tratta di un Dialog complesso non credo che la cosa mi sarà di
grande aiuto.
Avevo sentito parlare di puntatori a funzione ma non so altro.

 Avevo sentito parlare di puntatori a funzione ma non so altro.
Puoi richiamare le funzioni come ti pare, ma niente ti risolverà il problema
di doverle scrivere, temo ;-)
Massimo

 Massimo
Evidentemente non hai capito la mia domanda, comunque il mio ultimo messagio
non serviva perchè Andrea aveva già risposto.
Alberto

il codice.
L'idea di Andrea e' buona, ma devi tener conto di due cose:
1) Devi allocare la memoria per l'array dei puntatori (non e' un problema,
ma devi ricordarti anche di controllare che uMsg non sia maggiore del numero
di elementi);
2) Devi inizializzare l'array, ponendo gli elementi che non usi in modo che
puntino a DefWindowProc.
Nessuno di questi due punti e' in realta' complesso o particolarmente
sconveniente, tuttavia i modermi compilatori sanno ottimizzare gli "switch"
abbastanza bene, per cui potresti risolvere il tutto in maniera piu' facile
lasciando fare tutto a lui.
Non ho invece capito la tua risposta a Massimo:
"Si, ma se si tratta di un Dialog complesso non credo che la cosa mi sarà di
grande aiuto."
Cosa intendevi dire? E' proprio quando devi gestire molti messaggi che lo
switch e' piu' adatto...
Saluti,
    Mardy

     Mardy
Pensavo che richiamare da un 'unica funzione molte altre funzioni con un
grosso switch fosse una tecnica non molto elegante, almeno così ho sentito
dire.
Comunque se lo dice  un  esperto, cioè tu, ci credo.
Grazie;
 Alberto

Comunque se lo dice  un  esperto, cioč tu, ci credo.
Non esagerare. :-) Comunque per questi problemi (come per molti altri,
d'altronde) e' difficile trovare una risposta univoca: bisogna fare un po'
di prove, e giudicare in base al proprio buon senso.
Saluti,
    Mardy

> dire.
M> A meno che le operazioni da eseguire nei vari "case" non siano brevi,
M> l'utilizzo di funzioni rende il codice piu' leggibile.
Poi bisogna vedere cosa ti serve  fare. Se devi spremere tutti i cicli
macchina dalla CPU allora meglio mettere tutto nello switch (al limite
utilizzando le funzioni inline del  c++) così ti risparmi in media uno
stallo della pipeline (su due salti media di una predizione riuscita).
+----------------------------------------------------------------+
| Gian Uberto Lauri * "So, are you working on fixing that bug    |
| 
sa...@eng.it
      *  *now* or leaving it until later ?" - YES  |
+----------------------------------------------------------------+
| Attenzione: rispondo ad ogni invio di pubblicità non richiesta | 
| o spam di qualsiasi altro genere con un messaggio al provider  |
| di competenza. Ai sensi della legge sulla privacy NON avete il |
| permesso di utilizzare i miei dati per questi scopi.           |
+----------------------------------------------------------------+