Newsgroup: it.comp.programmare.win32
Titolo: "Apri" a modo mio!

salve,
per motivi di puro capriccio estetico, ho impellente bisogno di sapere come
è possibile (se è possibile) PERSONALIZZARE la finestra standard Apri/Salva
con nome, con lo stile INTERNET EXPLORER e, badate bene, RIPOSIZIONANDO i
controlli standard (quindi fornendo un Template)
grazie mille

 wrote in message
yxd24.15382$Q.15...@typhoon.libero.it...

Il template serve, essenzialmente, per _aggiungere_ roba alla
dialog box, piu` che per modificare cio` che gia` contiene.
La personalizzazione si fa con una procedura apposita, che
puoi scrivere e "agganciare" al dialogo, settando al suo
indirizzo il membro lpfnHook della struttura OPENFILENAME
che passi all'API GetOpenFileName (o GetSaveFileName);
dovrai inoltre settare, nel campo Flags della stessa struct,
il bit di OFN_ENABLEHOOK (e OFN_EXPLORER per abilitare
il dialogo di nuovo stile, naturalmente).
A questo punto, la tua "hook procedure" verra` usata come
"dialog procedure" di un _sotto_-dialog, _figlio_ del dialogo
di Open o Save (il sottodialogo contiene cio` che tu hai
specificato nel template, oppure, senza template, e` vuoto).
Ti arrivano varie notifiche dal sistema (WM_INITDIALOG
alla partenza, ad esempio) e altre dalla dialog procedure
di sistema che cura il dialogo base (CDN_INITDONE ad
esempio ti arriva, come notifica da messaggio WM_NOTIFY
come al solito, quando il dialogo principale ha finito la
propria inizializzazione).  Tu puoi mandare al dialogo
principale altri messaggi particolari, come, ad esempio,
CDM_HIDECONTROL per dirgli di nascondere uno dei
suoi controlli.  Puoi anche interagire in modo piu`
diretto coi controlli, ad esempio subclassandoli, anche
se cio` e` sconsigliato per ragioni di compatibilita` con
eventuali future versioni.
Tutti i dettagli sono su MSDN:
    Platform SDK
        User Interface Services
            User Input
                Common Dialog Box Library
Lo stesso materiale e` presentato (sempre su MSDN)
nell'articolo "Using the Common Dialogs Under Windows
95" di Nancy Winnick Cluts (che comprende anche un
esempio).  Un altro esempietto e` in Q130758, un
articolo su come cambiare l'icona del dialogo.  Cluts
riprende l'argomento anche nel suo libro, sempre
incluso in MSDN, "Programming the Windows 95
User Interface", al capitolo 6.
Alex

grazie mille
solo una cosa: procedendo cosě, posso riposizionare, ed eventualmente
eliminare o nascondere, i comandi del dialogo standard, o solo affiancare i
miei tutt'attorno???

 wrote in message news:V3134.2129$3L.2...@typhoon.libero.it...

[ricordo ai lettori: stiamo parlando di personalizzazione del dialogo
standard "Apri file" in modalita` "nuova", cioe` explorer-like]
L'uso di un template addizionale e` il modo tipico di aggiungere
controlli al dialogo.
Per togliere e spostare controlli esistenti, si usano invece le
tecniche cui accennavo nel mio post precedente, cioe`, nella
propria funzione di personalizzazione, si trovano direttamente
le HWND dei controlli che interessano e si opera su di esse.
Le API di Windows sono piene di funzioni per spostare,
nascondere, ridimensionare finestre...:-).  A parte il mero
look, questi controlli esistenti li si puo` anche subclassare
(parlo un poco del subclassing nel mio tutorial sulle API
di Win32 a 
http://aleax.supereva.it/
)
Questa tecnica e` sconsigliata dalla Microsoft in quanto non
garantisce la portabilita` delle proprie personalizzazioni verso
futuri release/enhancements del dialogo-standard stesso.  Ma,
se si e` pienamente coscienti di questo, si possono comunque
realizzare le personalizzazioni in modi "difensivi", cosi` da non
causare, almeno, danni, se il "dialogo standard" cambiera`.
Alex

esaurientissimo!!
grazie mille

controlli standard (quindi fornendo un Template)
Oltre a quello che ti ha detto Alex tieni presente che ogni controllo
della finestra delle common dialog puo' essere referenziato andandolo
a cercare usando la funzione FindWindows o similari. Ad esempio se
vuoi aggiungere un pulsante nella barra dei pulsanti, trovati con
FindWindow la handle della toolbar (la sua classe e' denominata
ToolbarWindow32) e da li' puoi usare i normali messaggi delle Toolbars
per aggiungere altri pulsanti. Altro esempio la lista dei file e' in
realta' una List View (nome delle classe SysListView32). Cioe' oltre
alla modalita' Elenco (List) e Dettagli (Report) puoi visualizzare la
finestra come Icone (Icon) o Icone piccole (SmallIcon) e cosi' via.
Oppure puoi aggiungere i nuovi stili estesi delle listview (attento
che funzionano pero' con le nuove versioni del file COMCTL32.DLL) che
puoi trovare nelle versioni piu' aggiornate del Platform SDK. Tieni a
mente i consigli che ti ha dato Alex, perche' anche questo approccio
puo' diventare pericoloso nelle nuove versioni di Windows.
Divertiti :-)))).
Bye.

 wrote in message
1ktQOA9Wcz7uAAMU=r4ZmJ...@4ax.com...
