Per altre informazioni scrivi a fabriziocaldarelli@negusweb.it
Tutorial sulle Windows API
Introduzione
Lo scopo di questi appunti è imparare a realizzare applicazioni in ambiente windows utilizzando un approccio orientato alle procedure.
Per chi è alla prima esperienza di programmazione, consiglio vivamente di aver appreso prima bene e profondamente il linguaggio C, utilizzato a livello di console. Per chi in ambito DOS si è spinto in là cercando il multitasking attraverso l'uso dei TRS, la programmazione in Windows rappresenta un modo di programmare spontaneo e naturale; l'uso dei messaggi mettere in comunicazione sistema operativo e programmi è un sistema molto potente ed efficace, che analizzeremo via via nel corso di questi appunti.
Le API win32 consentono di costruire programmi sull'infrastruttura a messaggi di Windows, sfruttando la potenza e la stabilità del C; infatti sfruttando le API win32 si può programmare in ambiente Windows direttamente in C, stando a diretto contatto con il sistema operativo;le API win32 non solo costituiscono qualsiasi applicazione in Windows, ma rappresentano la base di qualsiasi altra libreria che ne faciliti l'utilizzo, come le MFC ad esempio; le MFC (Microsoft Foundation Classes) altro non sono che delle classi che incapsulando la funzionalità delle api, facilitando ed accelerando la realizzazioni di applicazioni.
Descrizione
/* -------------------------------------------------------------- ciao_mondo.c -- Scrive ciao mondo in un message box -------------------------------------------------------------- */ #include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MessageBox (NULL, TEXT ("Ciao, mondo!"), TEXT ("ciaomondo"), 0) ; return 0 ; }
Prima di passare all'analisi del programma, facciamolo girare per vedere se tutto funziona regolarmente. Supponendo che state usando il Visual C++, create un nuovo progetto di tipo "Win32 Application"; dopodichè nella schermata seguente selezionate "empty project" e cliccate su finish. Aggiungete un nuovo file al progetto e incollate il codice precedente. Compilate, linkate e avviate il programma. Vi apparirà semplicemente una piccola finestra (message box) con la scritta "ciao, mondo!"
Già questo semplice programma presenta 3 punti differenti rispetto alla programmazione a console:
- la presenza dell'header windows.h
- l'utilizzo di WinMain al posto di main
- l'utilizzo di MessageBox al prosto della printf
Header WINDOWS.H
L'inclusione del file windows.h è presente in ogni programma per Windows, perchè contiene anche altri files di intestazioni indispensabili, in particolare: WINDEF.H, WINNT.H, WINBASE.H, WINUSER.H, WINGDI.H. Questi files di inclusione contengono tutti le costanti, i tipi, le funzioni utilizzati da Windows
WinMain
Il punto d'ingresso di ogni programma per Windows è WinMain, che accetta 4 parametri e ritorna un int. Si noti che oltre al valore int nel ritorno della WinMain c'e' anche WINAPI, che è così definita nel file WINDEF.H:
#define WINAPI __stdcall
che definisce il modo con cui i parametri della funzione vengono inseriti nello stack. Per maggiori dettagli: http://msdn.microsoft.com
Il primo parametro, hInstance, è un identificatore univoco fornito dal sistema operativo al programma per poter rintracciare il programma attraverso un valore numero, handle in gergo. L'handle è importante per comunicare con alcune funzioni, perchè queste ultime devono sapere qual è il "programma" di destinazione della loro operazione: e l'handle fornisce questa informazione.
Il secondo parametro, prevInstance, rappresentava nei vecchi sistemi a 16bit l'handle di un'istanza (una copia) precedente del programma; questo handle era utile perchè le diverse istanze di un programma potessero condividere la memoria. Ora, nei sistemi a 32 bit, il valore di questo parametro è sempre NULL.
Il terzo parametro, szCmdLine, rappresenta i valori passati come argomenti all'avvio del programma.
Il quarto paramtro, iCmdShow, indica come la finestra dev'essere inizialmente visualizza: a icona, massimizzata, solo nella taskbar.
MessageBox
La funzione MessageBox visualizza una finestra di dialogo molto semplice per la visualizzazione, di solito, di messaggi brevi. Vediamo in breve la sua intestazione:
int MessageBox ( HWND hWnd, // handle della finestra proprietaria LPCTSTR lpText, // puntatore alla stringa del titolo della finestra di dialogo LPCTSTR lpCaption, // puntatore alla stringa del contenuto della finestra di dialogo UINT uType // stile della finestra di dialogo );
Tutta la documentazione ufficiale la potete trovare su : http://msdn.microsoft.com