Finestre di Windows Rotonde: come usare SetWindowRgn

Modificare la forma di una finestra in Windows usando SetWindowRgn, effetti grafici e interfacce non rettangolari.

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:

  1. 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
    Splash Screen Rotondo
    Una finestra rotondeggiante

    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.

    Lascia una risposta

    Creative Commons License
    Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

    Modifica preferenze cookie