Wraz z udoskonalaniem technologii wyświetlania graficznego poprawiło się również API systemów operacyjnych, dając programistom coraz większe możliwości tworzenia niestandardowych elementów interfejsu. Tak więc jedną z innowacji systemu operacyjnego Windows 2000 były okna warstwowe, których części mogły być przezroczyste. Wkrótce w witrynie MSDN pojawił się opis interfejsu API do pracy z oknami warstwowymi. Jednak na forach programistów wciąż zadawane są pytania o to, jak sprawić, by okno było półprzezroczyste.
Niezbędny
- - kompilator;
- - Windows SDK lub framework do programowania Windows.
Instrukcje
Krok 1
Zdobądź klamkę do okna, które chcesz zrobić półprzezroczyste. Znajdź lub utwórz okno. Aby go utworzyć, użyj funkcji API CreateWindow, CreateWindowEx lub metod opakowujących te funkcje należące do klas używanego frameworka. Prototyp funkcji CreateWindow wygląda tak:
HWND Utwórz okno (LPCTSTR lpClassName, LPCTSTR lpNazwaOkna, DWORD dwStyle, wew x, int y, int nSzerokość, int nWysokość, HWND hWnd Rodzic, HMENU hMenu, WSKAZÓWKA instancja,
LPVOID lpParam);
Jak widać, w wyniku wykonania funkcja zwraca uchwyt do utworzonego okna. Jeśli używana jest jakakolwiek klasa opakowująca, użyj jej metod na obiekcie odpowiadającym utworzonemu oknu, aby uzyskać uchwyt.
Krok 2
Znajdowanie okna można wykonać za pomocą wywołań API FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows i ich kombinacji. Możesz uzyskać uchwyt do okna w określonym obszarze za pomocą funkcji WindowFromPoint i ChildWindowFromPoint.
Krok 3
Ustaw okno na rozszerzony styl WS_EX_LAYERED. Użyj interfejsu API SetWindowLong lub odpowiednich metod opakowujących obiektów. Funkcja SetWindowLong całkowicie zastępuje modyfikowalne informacje o parametrach okna, więc używaj jej w połączeniu z funkcją GetWindowLong, aby pobrać poprzednią wartość dla zestawu flag stylów. Na przykład styl można zmienić w następujący sposób:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Tutaj hWnd to klamka okna znaleziona w wyniku wykonania czynności opisanych w poprzednim kroku.
Krok 4
Spraw, aby okno było półprzezroczyste. Użyj interfejsu API SetLayeredWindowAttributes lub metod klas otoki. Prototyp funkcji SetLayeredWindowAttributes wygląda tak:
BOOL SetLayeredWindowAtrybuty (HWND hwnd, COLORREF crKey, BYTE bAlfa, DWORD dwFlags);
Krok 5
Parametr hwnd funkcji musi być prawidłowym uchwytem okna uzyskanym w pierwszym kroku. Parametr crKey to klucz koloru używany do definiowania obszarów półprzezroczystych. Parametr bAlpha określa wartość przezierności. Przy wartości parametru bAlpha równej 0, obszary „półprzezroczyste” będą całkowicie przezroczyste. Jeśli parametr bAlpha wynosi 255, będą one całkowicie nieprzezroczyste. Parametr dwFlags określa tryb dalszego wyświetlania zawartości okna. Gdy flaga LWA_COLORKEY jest zawarta w wartości dwFlags, półprzezroczyste obszary okna zostaną określone na podstawie klucza koloru. Gdy flaga LWA_ALPHA jest włączona, parametr bAlpha będzie używany do określenia wartości przezierności.
Krok 6
Aby całe okno było półprzezroczyste, wywołaj SetLayeredWindowAttributes z preferowaną wartością parametru bAlpha, flagą LWA_ALPHA, ale bez flagi LWA_COLORKEY. Użyj znalezionego uchwytu okna jako pierwszego parametru funkcji. Na przykład, aby okno było półprzezroczyste, użyj wywołania:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);