Newsgroup: it.comp.programmare.win32
Titolo: modificare la Windows Class di Dialog

E' possibile cambiare la "Windows Class" di un DialogBox creato con
l'editor di risorse e caricato con DialogBox()?
Per esempio posso cambiare la "Class Name" che risulta #32770?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Per esempio posso cambiare la "Class Name" che risulta #32770?
generalizzando la domanda in "come modificare il nome di una Window Class"
andiamo a toccare uno dei più grandi dubbi che sempre mi hanno
accompagnato nella programmazione Win32 :)
non sono mai riuscito a trovare una funzione dell'SDK che mi permettesse
di modificare il nome di una Window Class (forse ho cercato male), eppure
ho il sospetto che Borland l'abbia fatto: i nomi delle Window Class usati
da Borland sono gli stessi usati per le classi Pascal che implementano i
relativi controlli; ad esempio le caselle di testo della VCL nello Spy++
non risultano sotto la classe standard "EDIT", bensì sotto una fantomatica
"TEdit".
che Borland abbia completamente riprogrammato le WindowProc delle classi
predefinite di Win32?!? assurdo ma possibile, visto che in un mio vecchio
esperimento le text box coperte da asterischi (quelle per le password)
avevano un comportamento anomalo... gli inviavo EM_SETPASSWORDCHAR e se ne
infischiavano ampiamente; allora provai con EM_GETPASSWORDCHAR e non
risultava nessun "password char" :)
una sessione non troppo approfondita di debug delle VCL da parte mia mi
parve svelarmi che effettivamente Borland usava "EDIT", che poi però di
punto in bianco cambiava misteriosamente in "TEdit"... spero solo di
essermi sbagliato :D
se così fosse comunque non resterebbe che scoprire il momento esatto in
cui avviene il cambiamento: per il resto si tratta solo di sostituire la
WindowProc, che è facile.
non mi sono mai preso la briga di approfondire la questione più di tanto;
forse un giorno lo farò... :P
PS: un altro mio grande dubbio su Win32 che ha accompagnato quest'altro
per molto tempo è stato la differenza tra HINSTANCE e HMODULE; alla fine
ho capito che l'HINSTANCE in Win32 è una totale incoerenza dovuta a
backward compatibility: quanto mi piace Win32!!!! :)


 Per esempio posso cambiare la "Class Name" che risulta #32770?
Questa e` una bella domanda!
La classe #32770 e` una classe di *sistema*, motivo per cui cambiargli 
nome non e` certamente possibile (e comunque non esiste nel SDK una 
funzione per "cambiare il nome ad una classe").
Si possono pero` registrare nuove classi ... magari copiandole da altre!
Il codice dovrebbe essere una cosa del genere:
/*--------------------------*/
WNDCLASSEX wcx;
wcx.cbSize = sizeof (WNDCLASSEX);
GetClassInfoEx (NULL, "#32770", &wcx);
wcx.hInstance = hInstanceApp;
wcx.lpszClassName = "NomeMiaClasse";
RegisterClassEx (&wcx);
...
DialogBox (....);
...
UnregisterClass ("NomeMiaClasse", hInstanceApp);
/*--------------------------*/
Eventualmente si possono anche cambiare wcx.hIcon e wcx.hIconSm per 
avere una "icona di classe" o anche il cursore o altro ancora come il 
brush di sfondo.
Naturalmente nell'editor delle risorse, in fase di edit di una 
dialog-box, si deve quindi specificare la classe "NomeMiaClasse".