Introduzione alle API Win32

Capitolo 3: un minimo di I/O

Il modo più semplice di emettere un messaggio per l'utente è attraverso la prima API che vedremo, MessageBox:

int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)

Il tipo HWND, "handle di window", è un "tipo opaco" usato da Windows per permettere al nostro programma di identificare le finestre in gioco; di questi tipi HANDLE, ovvero "opachi", ne esistono tanti nelle API di Windows. Spesso, dove è prevista una handle, si può passare zero per dire "nulla/nessuno/come da default"; qui, in particolare, possiamo passare zero come primo argomento e non preoccuparcene oltre per ora.

Handle, alla lettera, significa "maniglia"; come molti altri termini tecnici, però, è più normale lasciarlo, anche in un testo italiano, nell'originale inglese -- pensate a "stress", "standard", "bar", "sport", e tanti altri termini inglesi ormai entrati nell'uso comune -- ci andreste, alla "Sbarra Diporto", invece che al "Bar Sport"?-)

Il "tipo opaco" è un comune idioma C, usato anche nella libreria C standard (si pensi ad esempio a FILE*): un tipo "dentro" al quale non si guarda (per cui "opaco"), bensì ci si limita a passarlo a "funzioni di sistema" che sanno cosa farci. Tutti i tipi di Windows i cui nomi (come macro, in maiuscolo) iniziano con H ("handle") sono "tipi opachi" in questo preciso senso.

LPCTSTR, almeno per ora (senza #define UNICODE...) è const char*, cioè: una stringa standard C terminata da 0, tale che la funzione che la riceve come argomento "si impegna" ad usarla solo "in lettura", cioè senza modificarla.

MessageBox ha due argomenti-stringa in input: lpText è il messaggio che la finestra conterrà, mentre lpCaption sarà il suo titolo.

uType, infine (di tipo UINT, cioè in pratica unsigned int), è l'argomento che determina (come "maschera di bit") il tipo di finestra di messaggio da mostrare. Usando, come uType, la macro MB_OK, avremo la più semplice delle message box: senza icone, e con l'unico bottone di "OK".

Ecco dunque il nostro programma "Hello world", per intero:

#define STRICT #define WIN32_LEAN_AND_MEAN #include <windows.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) { MessageBox(0, "Hello, World!", "Messaggio al mondo", MB_OK); return 0; }

MessageBox ha anche un valore di ritorno, che ci interessa nei casi in cui la finestra mostrata ha diverse combinazioni di bottoni (codificate dal campo uType). Ad esempio, se noi passiamo come ultimo parametro MB_YESNO, la finestra avrà i due bottoni "Yes" e "No" ("Si" e "No" in italiano); e la funzione MessageBox tornerà IDYES se l'utente clicca Yes, IDNO se l'utente clicca No. Questo può servire per fare operazioni di input molto rudimentali e immediate. In questi casi, il testo del messaggio sarà una "domanda", ed è abituale usare anche un'icona adeguata; ciò si ottiene usando per uType il valore MB_YESNO|MB_ICONQUESTION.


Capitolo 2: disimparare ancora
Capitolo 4: dialoghi
Elenco dei capitoli