Come Rendere Semitrasparente Una Finestra

Sommario:

Come Rendere Semitrasparente Una Finestra
Come Rendere Semitrasparente Una Finestra

Video: Come Rendere Semitrasparente Una Finestra

Video: Come Rendere Semitrasparente Una Finestra
Video: Video per incollaggio pellicola per finestra autoadesiva su vetro 2024, Dicembre
Anonim

Con il miglioramento delle tecnologie di visualizzazione grafica, anche l'API dei sistemi operativi è migliorata, fornendo ai programmatori sempre più opportunità per lo sviluppo di elementi di interfaccia non standard. Quindi una delle innovazioni del sistema operativo Windows 2000 erano le finestre a strati, parti delle quali potevano essere traslucide. Presto, una descrizione dell'API per lavorare con le finestre a più livelli è diventata disponibile su MSDN. Tuttavia, sui forum dei programmatori, vengono ancora poste domande su come rendere semitrasparente una finestra.

Come rendere semitrasparente una finestra
Come rendere semitrasparente una finestra

Necessario

  • - compilatore;
  • - windows sdk o framework per la programmazione di windows.

Istruzioni

Passo 1

Prendi una maniglia per la finestra che vuoi rendere semitrasparente. Trova o crea una finestra. Per crearlo, utilizzare le funzioni API CreateWindow, CreateWindowEx oppure i metodi wrapper attorno a queste funzioni appartenenti alle classi del framework utilizzato. Il prototipo per la funzione CreateWindow ha il seguente aspetto:

HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, intero x, int y, int nWidth, int nAltezza,

HWND hWndParent, HMENU hMenù, ISTANZA istanza, LPVOID lpParam);

Come puoi vedere, la funzione restituisce un handle alla finestra creata come risultato dell'esecuzione. Se viene utilizzata una classe wrapper, usa i suoi metodi sull'oggetto corrispondente alla finestra creata per ottenere l'handle.

Passo 2

La ricerca di una finestra può essere eseguita utilizzando le chiamate API FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows e le relative combinazioni. È possibile ottenere un handle per una finestra all'interno di un'area specifica utilizzando le funzioni WindowFromPoint e ChildWindowFromPoint.

Passaggio 3

Imposta la finestra sullo stile esteso WS_EX_LAYERED. Utilizzare l'API SetWindowLong oi metodi corrispondenti degli oggetti wrapper. La funzione SetWindowLong sostituisce completamente le informazioni sui parametri della finestra modificabili, quindi usala in combinazione con la funzione GetWindowLong per recuperare il valore precedente per il set di flag di stile. Ad esempio, lo stile può essere modificato in questo modo:

:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));

Qui hWnd è l'handle della finestra trovato in seguito all'esecuzione delle azioni descritte nel passaggio precedente.

Passaggio 4

Rendi la finestra semitrasparente. Utilizzare l'API SetLayeredWindowAttributes o i metodi delle classi wrapper. Il prototipo della funzione SetLayeredWindowAttributes ha il seguente aspetto:

BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE bAlfa, DWORD dwFlags);

Passaggio 5

Il parametro hwnd della funzione deve essere un handle di finestra valido ottenuto nel primo passaggio. Il parametro crKey è una chiave di colore utilizzata per definire aree semitrasparenti. Il parametro bAlpha specifica il valore di traslucenza. Con il valore del parametro bAlpha uguale a 0, le aree "semitrasparenti" saranno completamente trasparenti. Se il parametro bAlpha è 255, saranno completamente opachi. Il parametro dwFlags determina la modalità di ulteriore visualizzazione del contenuto della finestra. Quando il flag LWA_COLORKEY è incluso nel valore dwFlags, le aree semitrasparenti della finestra verranno determinate in base alla chiave di colore. Quando il flag LWA_ALPHA è abilitato, il parametro bAlpha verrà utilizzato per determinare il valore di traslucenza.

Passaggio 6

Per rendere l'intera finestra semitrasparente, chiama SetLayeredWindowAttributes con il valore del parametro bAlpha preferito, il flag LWA_ALPHA, ma nessun flag LWA_COLORKEY. Usa l'handle della finestra trovato come primo parametro della funzione. Ad esempio, per rendere una finestra semitrasparente, usa la chiamata:

:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);

Consigliato: