2011-05-19 17 views
7

Yapmaya çalıştığım şey çok basit ama üzerinde çok fazla bilgi yok gibi görünüyor. Temel olarak normal saydam olmayan bir ebeveyn pencerem var ve alt pencerenin içine bir çocuk penceresi (kendi şeffaf olmayan kontrolleri olan) yerleştirmek istiyorum. Yapmam gereken tek şey, çocuk penceresinin arka plan fırçasını şeffaf olarak ayarlamak ama yine de beyaz bir arka plan çizmektir. WS_EX_LAYERED stili ve SetLayeredWindowAttributes kullanılarak denendi, ancak alt pencere görünmez yapar.Saydam arka planı ayarlama Win32

+0

Mümkün Kopyalama: http://stackoverflow.com/questions/3970066/creating-a-transparent-window-in-c-win32 –

+0

Nope. Şeffaf çocuk pencereleri ve şeffaf üst düzey pencereler için teknikler Windows'da tamamen farklıdır. –

cevap

5

Windows üzerinde "şeffaf" çocuk kontrolleri ulaşmak için iki temel yolu vardır: Üst pencerede

  • Kol WM_CTLCOLORxxx mesajlar. Bu, varolan denetimlerin saydamlığı desteklemesinin kolay bir yoludur. Her kontrol, kontrolün türüne uygun bir WM_CTLCOLORxxx mesajı gönderir. İletişim kutusunun arka plan rengini temsil eden bir fırça oluşturursanız ve bunu her iletiden döndürdüğünüzde, net efekt, her denetimin saydam bir dış alanla boyanmış gibi olur. Ancak, alfa efektleri istiyorsanız veya kontrollerin birbiriyle fiziksel olarak örtüşmesi durumunda bu başarısız olur. Üst pencerede WS_EX_COMPOSITED öğesini kullanın. Bu stil olmadan, pencere yöneticilerinin pencere yöneticilerinin sırasını boyaması, uygulamada, alttan üste doğru tanımsızdır. Alfa örtüşen kontroller örtüşen kontroller sonucu ... hoş olmayan olacaktır. WS_EX_COMPOSITED, çocuk pencerelerinin alttan üste boyanmasını sağlayacaktır. WS_CLIPCHILDREN veya WS_CLIPSIBLINGS stillerini kullanmadığınızdan emin olun, aksi durumda, üst üste binen alanların boyanması önlenir. Standart kontroller hala denemek ve iletişim-arka-gri ile onların tüm rect doldurmak için gidiyoruz olarak

Hala WM_CTLCOLORxxx mesajı ile akıllıca bir şey yapmak gerekir.