Mit der Verbesserung der grafischen Anzeigetechnologien verbesserte sich auch die API von Betriebssystemen, was Programmierern immer mehr Möglichkeiten zur Entwicklung von nicht standardmäßigen Schnittstellenelementen bietet. Eine der Innovationen des Betriebssystems Windows 2000 waren also geschichtete Fenster, von denen Teile durchscheinend sein konnten. Bald wurde eine Beschreibung der API für die Arbeit mit mehrschichtigen Fenstern auf MSDN verfügbar. In Programmierforen werden jedoch immer noch Fragen gestellt, wie man ein Fenster halbtransparent macht.
Notwendig
- - Compiler;
- - Windows SDK oder Framework für die Windows-Programmierung.
Anweisungen
Schritt 1
Holen Sie sich einen Griff zu dem Fenster, das Sie halbtransparent machen möchten. Suchen oder erstellen Sie ein Fenster. Verwenden Sie zum Erstellen entweder die API-Funktionen CreateWindow, CreateWindowEx oder die Wrapper-Methoden um diese Funktionen, die zu den Klassen des verwendeten Frameworks gehören. Der Prototyp für die CreateWindow-Funktion sieht so aus:
HWND CreateWindow (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nBreite,
int nHeight, HWND hWndEltern, HMENU hMenü, HINWEIS hInstanz, LPVOID lpParam);
Wie Sie sehen, gibt die Funktion als Ergebnis der Ausführung ein Handle an das erstellte Fenster zurück. Wenn eine Wrapper-Klasse verwendet wird, verwenden Sie deren Methoden für das Objekt, das dem erstellten Fenster entspricht, um das Handle zu erhalten.
Schritt 2
Das Suchen eines Fensters kann mithilfe von API-Aufrufen FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows und deren Kombinationen erfolgen. Mit den Funktionen WindowFromPoint und ChildWindowFromPoint können Sie ein Handle für ein Fenster in einem bestimmten Bereich abrufen.
Schritt 3
Setzen Sie das Fenster auf den erweiterten Stil WS_EX_LAYERED. Verwenden Sie die SetWindowLong-API oder die entsprechenden Methoden von Wrapper-Objekten. Die SetWindowLong-Funktion ersetzt die änderbaren Fensterparameterinformationen vollständig. Verwenden Sie sie daher in Kombination mit der GetWindowLong-Funktion, um den vorherigen Wert für den Satz von Stilflags abzurufen. Der Stil kann beispielsweise wie folgt geändert werden:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Hier ist hWnd das Fensterhandle, das als Ergebnis der im vorherigen Schritt beschriebenen Aktionen gefunden wurde.
Schritt 4
Machen Sie das Fenster halbtransparent. Verwenden Sie die SetLayeredWindowAttributes-API oder Methoden der Wrapperklassen. Der Prototyp der SetLayeredWindowAttributes-Funktion sieht wie folgt aus:
BOOL SetLayeredWindowAttributes (HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
Schritt 5
Der Parameter hwnd für die Funktion muss ein gültiges Fensterhandle sein, das im ersten Schritt abgerufen wurde. Der Parameter crKey ist ein Farbschlüssel, der verwendet wird, um halbtransparente Bereiche zu definieren. Der Parameter bAlpha gibt den Transluzenzwert an. Wenn der Parameterwert bAlpha gleich 0 ist, sind die "semi-transparenten" Bereiche vollständig transparent. Wenn der bAlpha-Parameter 255 ist, sind sie vollständig undurchsichtig. Der Parameter dwFlags bestimmt die Art der weiteren Anzeige des Fensterinhalts. Wenn das Flag LWA_COLORKEY im dwFlags-Wert enthalten ist, werden die halbtransparenten Bereiche des Fensters basierend auf dem Farbschlüssel bestimmt. Wenn das Flag LWA_ALPHA aktiviert ist, wird der Parameter bAlpha verwendet, um den Transluzenzwert zu bestimmen.
Schritt 6
Rufen Sie SetLayeredWindowAttributes mit dem bevorzugten bAlpha-Parameterwert, dem LWA_ALPHA-Flag, aber keinem LWA_COLORKEY-Flag auf, um das gesamte Fenster halbtransparent zu machen. Verwenden Sie das gefundene Fensterhandle als ersten Parameter der Funktion. Um beispielsweise ein Fenster halbtransparent zu machen, verwenden Sie den Aufruf:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);