Con l’SDK (Software Development Kit) di Windows è possibile creare finestre con regioni visibili personalizzate, anche rotonde e di forma arbitraria. Questa tecnica può essere utile per visualizzare porzioni di finestre sottostanti, oppure per semplice curiosità grafica.
La funzione che consente questa operazione è SetWindowRgn, che applica una regione di clipping direttamente alla finestra, non solo al suo Device Context (DC):
int SetWindowRgn(HWND hWnd, HRGN hrgn, BOOL fRedraw);
Questa API consente di associare una regione di clipping direttamente alla finestra, non solo al suo Device Context (DC).
- hWnd: handle della finestra da modificare
- hrgn: regione da applicare
- fRedraw: se TRUE, la finestra viene ridisegnata
- Il valore di ritorno è 0 in caso di successo, positivo in caso di errore.
Esempio pratico: creare una finestra con forma modificata
Definiamo una funzione, ad esempio, che costruisce una regione visibile personalizzata:
- Crea la regione rettangolare della finestra principale
HRGN hrgWindow = CreateRectRgnIndirect(&rcWindow);
2. Crea una regione della forma desiderata (es. ellisse)
HRGN hrgElliptic = CreateEllipticRgnIndirect(&rcElliptic);
3. Sottrae la regione ellittica da quella rettangolare
HRGN hrgTarget = CreateRectRgn(0, 0, 0, 0);
CombineRgn(hrgTarget, hrgWindow, hrgElliptic, RGN_DIFF);
4. Applica la regione risultante alla finestra
SetWindowRgn(hwndWindow, hrgTarget, TRUE);
Questa funzione può essere chiamata:
- All’avvio del programma, prima di mostrare la finestra
- Nell’evento, se serve ridisegnare dinamicamente
Possibilità creative
Con questa tecnica è possibile:
- Rimuovere i bordi e ottenere una finestra circolare o sagomata
- Visualizzare spiragli su finestre sottostanti
- Creare interfacce non convenzionali, anche solo per sperimentazione

Note tecniche
La funzione è disponibile fin da Windows 95. Fa parte di quelle API poco documentate ma potenti, che permettono di superare i limiti visivi imposti dal sistema operativo. Conoscerle e testarle è fondamentale per chi vuole esplorare a fondo le possibilità offerte dall’SDK.