Grafik görüntüleme teknolojilerinin gelişmesiyle, işletim sistemlerinin API'si de iyileşti ve programcılara standart olmayan arayüz öğeleri geliştirmek için giderek daha fazla fırsat sağladı. Dolayısıyla Windows 2000 işletim sisteminin yeniliklerinden biri, parçaları yarı saydam olabilen katmanlı pencerelerdi. Yakında, MSDN'de katmanlı pencerelerle çalışmak için API'nin bir açıklaması kullanıma sunuldu. Ancak, programcıların forumlarında, bir pencerenin nasıl yarı saydam hale getirileceği ile ilgili sorular hala sorulmaktadır.
Gerekli
- - derleyici;
- - windows sdk veya windows programlama için çerçeve.
Talimatlar
Aşama 1
Yarı saydam yapmak istediğiniz pencereye bir tutamaç alın. Bir pencere bulun veya oluşturun. Oluşturmak için, kullanılan çerçevenin sınıflarına ait CreateWindow, CreateWindowEx API işlevlerini veya bu işlevlerin etrafındaki sarmalayıcı yöntemleri kullanın. CreateWindow işlevinin prototipi şöyle görünür:
HWND CreateWindow (LPCTSTR lpSınıfAdı, LPCTSTR lpPencereAdı, DWORD dwStyle, int x, int y, int nGenişlik, int nYükseklik, HWND hWndEbeveyn,
HMENU hMenü, HINSTANCE hÖrnek, LPVOID lpParam);
Gördüğünüz gibi, fonksiyon, yürütmenin sonucu olarak oluşturulan pencereye bir tanıtıcı döndürür. Herhangi bir sarmalayıcı sınıfı kullanılıyorsa, tutamacı almak için oluşturulan pencereye karşılık gelen nesne üzerindeki yöntemlerini kullanın.
Adım 2
Bir pencere bulma, API çağrıları FindWindow, FindWindowEx, EnumWindows, EnumChildWindows, EnumThreadWindows ve bunların kombinasyonları kullanılarak yapılabilir. WindowFromPoint ve ChildWindowFromPoint işlevlerini kullanarak belirli bir alandaki bir pencereye bir tanıtıcı alabilirsiniz.
Aşama 3
Pencereyi genişletilmiş WS_EX_LAYERED stiline ayarlayın. SetWindowLong API'sini veya ilgili sarmalayıcı nesneleri yöntemlerini kullanın. SetWindowLong işlevi, değiştirilebilir pencere parametresi bilgilerini tamamen değiştirir, bu nedenle stil bayrakları kümesi için önceki değeri almak için GetWindowLong işleviyle birlikte kullanın. Örneğin, stil şu şekilde değiştirilebilir:
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
Burada hWnd, önceki adımda açıklanan eylemlerin gerçekleştirilmesi sonucunda bulunan pencere tutamacıdır.
4. Adım
Pencereyi yarı saydam yapın. SetLayeredWindowAttributes API'sini veya sarmalayıcı sınıflarının yöntemlerini kullanın. SetLayeredWindowAttributes işlev prototipi şöyle görünür:
BOOL SetLayeredWindowAttributes (HWND hwnd, RENKLİ crKey, BYTE bAlpha, DWORD dwFlag'lar);
Adım 5
İşlevin hwnd parametresi, ilk adımda elde edilen geçerli bir pencere tanıtıcısı olmalıdır. crKey parametresi, yarı saydam alanları tanımlamak için kullanılan bir renk anahtarıdır. bAlpha parametresi yarı saydamlık değerini belirtir. 0'a eşit bAlpha parametre değeri ile "yarı şeffaf" alanlar tamamen şeffaf olacaktır. bAlpha parametresi 255 ise, tamamen opak olacaktır. dwFlags parametresi, pencere içeriğinin daha fazla görüntülenme modunu belirler. LWA_COLORKEY bayrağı dwFlags değerine dahil edildiğinde, pencerenin yarı saydam alanları renk anahtarına göre belirlenir. LWA_ALPHA bayrağı etkinleştirildiğinde, yarı saydamlık değerini belirlemek için bAlpha parametresi kullanılacaktır.
6. Adım
Tüm pencereyi yarı saydam yapmak için, tercih edilen bAlpha parametre değeriyle, LWA_ALPHA bayrağıyla, ancak LWA_COLORKEY bayrağıyla SetLayeredWindowAttributes'ı çağırın. Bulunan pencere tanıtıcısını işlevin ilk parametresi olarak kullanın. Örneğin, bir pencereyi yarı saydam yapmak için şu çağrıyı kullanın:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);