Con l’SDK ( Software Development Kit ) di Windows è possibile creare delle finestre con dei buchi di varie forme, potrebbe essere ad esempio utile per avere uno spiraglio sulle finestre sottostanti o forse solo per curiosità. La funzione che ci permette tutto questo è SetWindowRgn che permette di associare ad una finestra, non soltanto al DC ( Device Context ), un’area di clipping.
int SetWindowRgn(HWND hWnd, HRGN hrgn, BOOL fRedraw)
Il primo argomento è l’handle della finestra da trattare ( bucare ), il secondo è la region da tagliare ed il terzo definisce se ridisegnare la finestra oppure no. Il valore di ritorno è 0 se va tutto bene o un valore positivo se va male.
Definiamo quindi una funzione per la regione di clip ( ad esempio SetClipWindow ) che crea una regione rettangolare che sia la finestra principale CreateRectRgnIndirect(&rcWindow), poi si crea un’altra regione della forma voluta con ad esempio CreateEllipticRgnIndirect che sarà il buco ed infine si sottraggono i due con CombineRgn(hrgTarget, hrgFinestra, hrgBuco, RGN_DIFF) e poi alla fine della nostra funzione mettiamo la funzione che abbiamo spiegato prima: SetWindowRgn(hwndFinestra, hrgTarget, TRUE).
Ora basta inserire la nostra funzione ( ad esempio SetClipWindow ) ovviamente nell’evento WM_PAINT ed anche prima di mostrare la finestra principale quando parte il programma.
Da questo articolo potete prendere vari spunti, tra cui quella di togliere a tutta o parte di una finestra ad esempio i tratti intorno e farla diventare un cerchio, insomma non c’è a questo punto limite alla fantasia.
Conoscere tutte la parti anche le più remote dell’SDK di Windows e questa funzione pensate che è stata inserita da Windows 95, è molto importante, ma data la sua vastità, non è semplice e quindi grazie ad articoli come questo è possibile capire cosa si può realmente fare con la programmazione e l’SDK ( Software Development Kit ).