In genere le funzioni con suffisso Ex hanno un "qualcosa" in più, tipicamente dei parametri aggiuntivi e funzionalità aggiuntive.Originariamente inviato da MRj92
Che differenza c'è tra una funzione x() e una funzione xEx()? (ad esempio CreateWindow() e CreateWindowEx())
Ad esempio CreateWindowEx ha in più rispetto a CreateWindow un parametro DWORD dwExStyle che permette di specificare degli stili di finestra estesi.
Ci sono svariate altre funzioni che hanno una versione Ex.
Qui la questione è diversa e riguarda il charset ANSI/Unicode. Le API di Windows che utilizzano/trattano in qualche modo delle stringhe, sono disponibili in 2 versioni: ANSI e Unicode. Per queste funzioni, esistono quindi 2 versioni nelle relative DLL di sistema dove sono presenti.Originariamente inviato da MRj92
E xA()? (tipo SendDlgItemMessage() e SendDlgItemMessageA() )
Prendiamo la funzione MessageBox(). Nella libreria USER32.DLL ci sono 2 versioni della funzione, che hanno i seguenti prototipi.
WINUSERAPI int WINAPI MessageBoxA (HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
e
WINUSERAPI int WINAPI MessageBoxW (HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType);
La differenza sta nel fatto che la versione A prende dei puntatori LPCSTR (stringhe ANSI) mentre la versione W prende dei puntatori LPCWSTR (stringhe Wide, ovvero Unicode).
Il fatto è che tipicamente è scomodo dover usare nei sorgenti direttamente l'una o l'altra perché se ad un certo punto si decidesse di compilare nell'altro modo, bisognerebbe cambiare tutti i nomi delle funzioni!!
Pertanto nei file di header del Platform SDK ci sono delle macro che sono definite così:
#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
Se in fase di compilazione la macro UNICODE è definita, allora la compilazione è fatta per la gestione delle stringhe Unicode, altrimenti per stringhe ANSI. In base a questo, la parola MessageBox è semplicemente una define per una o l'altra funzione. La funzione che è "linkata" dall'eseguibile però sarà o MessageBoxA o MessageBoxW.
Grazie ad altre macro (che si trovano in tchar.h) è possibile realizzare un sorgente che senza toccare alcunché nel codice è possibile compilare tranquillamente in ANSI o in Unicode.
Perché per default sui sistemi XP lo stile è quello vecchio. Per attivare lo stile nuovo di XP bisogna specificare un "manifesto" che può essere scritto come risorsa dentro l'exe oppure come file esterno che ha lo stesso nome della applicazione più l'estensione .manifest.Originariamente inviato da MRj92 [*]Perchè i miei button hanno uno stile tipo Win98? e non quello bellino e tanto carino di XP?
Vedi qui, ad esempio (è il primo link che ho trovato, anche se parla per .NET il concetto è lo stesso).
Bisogna vedere cosa intendi per sfondo, se un solo colore specifico o una "texture" di sfondo. Poi ti riferisci ad una finestra (CreateWindow) o a una dialog-box (DialogBoxXXX)???Originariamente inviato da MRj92
Come posso cambiare lo sfondo delle mie finestre?
Nel caso di 1 solo colore è abbastanza semplice. Prima di creare la finestra con CreateWindow, si deve registrare la classe. Nella struttura WNDCLASS c'è un campo HBRUSH hbrBackground, basta creare un brush ad esempio con la funzione CreateSolidBrush e assegnarlo al campo (ricordarsi di fare alla fine la free del brush).
Per le dialog è un po' diverso, bisogna rispondere al messaggio WM_CTLCOLORDLG.
P.S.: Oggi avevo tempo ed ho scritto tutta la pappardella ..... ma è bene precisare che tutte queste cose si trovano nella documentazione su MSDN, l'unica e vera "bibbia" per la programmazione in Windows. Quindi è buona, anzi ottima, cosa documentarsi il più possibile.