Mangiare Senza Glutine disponibile su App Store

Per altre informazioni scrivi a fabriziocaldarelli@negusweb.it

Tutorial sulle Windows API

Da Programmazione Software.

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:

  1. la presenza dell'header windows.h
  2. l'utilizzo di WinMain al posto di main
  3. 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