Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Anonymous
unregistriert
Anonymous
unregistriert
Anonymous
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
// Prototyp für den Funktionspointer auf 'SetLayeredWindowAttributes'. typedef int (__stdcall * SLWA) (::HWND__* hwnd, unsigned long key, unsigned char alpha, unsigned long flag); // /////////////////////////////////////////////////////////////////////////// // PUBLIC // // Setzt dem Fenster einen Transparenzwert (Alphablending) zwischen 0 und 100. // ACHTUNG: Nur lauffähig auf Systemen von NT4 aufwärts. // /////////////////////////////////////////////////////////////////////////// bool IWindow::set_alpha (unsigned long percent) { // Bei 100 Prozent den Stil '0x00080000' für das Blending entfernen. if (percent >= 100) { // Stil '0x00080000' entfernen if (::SetWindowLongW (hwnd_, GWL_EXSTYLE, ::GetWindowLongW (hwnd_, GWL_EXSTYLE) & ~0x00080000) != 0) return (false); // Fenster und Kinder auffordern sich neu zu zeichnen. return (::RedrawWindow (hwnd_, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN) != 0); } // Funktionspointer für die Funktion 'SetLayeredWindowAttributes' bereitstellen // und Zeiger auf das Modul 'user32.dll"' beschaffen ::SLWA set_layered_window_attributes = NULL; ::HINSTANCE__* module = ::GetModuleHandleW (L"USER32.DLL"); // Prüfen ob das Modul geladen werden konnte if (!module) return (false); // 'SetLayeredWindowAttributes' aus dem Modul 'user32.dll' entnehmen und auf Funktionspointer legen. if (!(set_layered_window_attributes = reinterpret_cast<::SLWA>(::GetProcAddress (module, static_cast<char*>("SetLayeredWindowAttributes"))))) return (false); // Stil '0x00080000' setzen. ::SetWindowLongW (hwnd_, GWL_EXSTYLE, ::GetWindowLongW (hwnd_, GWL_EXSTYLE) | 0x00080000); // Alphablending setzen. return (set_layered_window_attributes (hwnd_, 0, static_cast<unsigned char>(percent * 255 / 100), 0x00000002) != 0); } |
Anonymous
unregistriert
Werbeanzeige