Introduzione alle API Win32, Parte 2/6
di Mastersgn, del 21 ottobre 2006 C/C++
Dopo le premesse del primo articolo del tutorial, siamo in grado di creare una piccola e basilare applicazione: visualizziamo un messaggio di "Hello World" in stile WinAPI tramite la funzione
MessageBox()
.Creare un nuovo progetto
Come detto in precedenza, facciamo riferimento all'IDE della Bloodshed: Dev-C++.
Facciamo click su Progetto, quindi selezioniamo Windows Application e come linguaggio il C. Scegliete il nome del progetto come preferite, premete OK per salvarlo e proseguite. Sarà creato un nuovo progetto al cui interno trovate il solo file
main.c
: cancellate il suo contenuto.Ogniqualvolta compilate un progetto saranno compilati (e allo stesso tempo quindi linkati) tutti i file appartenenti ad esso.
Prima semplice applicazione
Iniziamo col creare una piccola applicazione. Per farci un'idea di come sia strutturato un programma WinAPI, scriviamo il codice necessario per visualizzare un messaggio di "Hello World".
Bene, prima di tutto trascrivete (se evitate il Copia&Incolla imparerete più rapidamente) il seguente codice nel vostro file
main.c
e compilate:#include <windows.h>
#define WIN32_LEAN_AND_MEAN
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(0, "Hello World!!",
"Un messaggio", MB_OK);
return 0;
}
Osserviamo l'inclusione dell'header file
windows.h
e la definizione della macroWIN32_LEAN_AND_MEAN
, già descritti nel primo articolo. Poi, al posto della solita funzioneint main(int argc, char* argv[])
ne troviamo un'altra:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
Dato che questa istruzione Win32 è molto diversa, analizziamola meglio:
WINAPI
indica una funzione che adotta la convenzione di chiamata standard di Windows.
HINSTANCE hInstance
indica l'Handle del modulo eseguibile del programma. Di questo parametrotorneremo a parlare più avanti, ma per ora non ha molta importanza.
HINSTANCE hPrevInstance
ha sempre valoreNULL
nei programmi Win32. Era usato in Win16, mentre con Win32 va ignorato.
LPSTR lpCmdLine
contiene l'intera riga di comando passata al nostro programma in un'unica stringa. E' l'equivalente dell'intero arrayargv[]
del metodomain
dello standard C. Non include il nome del programma. Per ora ignoramo anche questo parametro.
int nCmdShow
può ricevere un valore intero. Trascuriamo anche quest'ultimo per il momento.
Rimandiamo tutto quanto non descritto in questa sede ad un successivo studio più approfondito.
Funzione MessageBox()
Ora occupiamoci di analizzare la funzione che visualizza il messaggio di Hello World:
int MessageBox(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
- Il tipo
HWND
, handle di Windows, è un tipo opaco. Serve ad identificare una finestra (e non solo). In questo caso viene passato come zero, visto che il messaggio da inviare è visualizzato direttamente dalla finestra corrente. Più difficile da spiegarsi che da applicare, approfondiremo meglio più avanti questo tipo in quanto molto importante.
LPCTSTR lpText
(come accennato nel primo articolo) prende un stringa costante e si impegna a non modificarla. In questo caso, al parametro passiamo la stringa da visualizzare come corpo del messeggio.
- Utilizziamo
LPCTSTR lpCaption
come per il parametro precedente, ma in questo caso la stringa da passare verrà visualizzata come titolo del messaggio.
UINT uType
, è un tipo unsigned int. Si tratta di un valore intero che indica il tipo di finestra di messaggio da mostrare. Ad esempio, nella nostra macroMB_OK
visualizza un semplice messaggio senza icone con un solo bottone di OK.
Potremmo utilizzare molti altri valori per
uType
, ognuno dei quali determina un tipo di finestra differente. Ad esempio, tramiteMB_YESNO
potremmo visualizzare i due bottoni "Si" e "No". Queste vatianti sono usate per ottenere l'input dell'utente, ovvero quando l'utente deve fare una scelta. Vedremo più avanti come utilizzare diverse metodologie al riguardo. Per documentarvi sulle altre macro disponibili, consultate la MessageBox function.
Per finire incontriamo l'istruzione
return 0
, che termina la funzione.
D'ora in poi considereremo la funzione
MessageBox()
per appresa. Non ci resta che creare qualcosa di più sostanzioso e significativo nel prossimo articolo.
Nessun commento:
Posta un commento