2013-01-10 49 views
0

我有一個分層窗口(使用SetLayeredWindowAttributes)。如果我將整個窗口上的alpha設置爲128並在其上繪製黑色矩形,它將按預期工作(顯示約50%不透明度的黑色矩形)。但是,如果我在整個窗口中設置了aplha(當我將SetLayeredWindowAttributes設置爲255),然後使用設置爲50%的畫筆繪製黑色矩形時,它們的黑色矩形是純粹的實體,沒有任何半透明性。LayeredWindows和變量alpha半透明 - 使用畫筆?

我的印象是,一旦我有了這種方式,我可以吸引到它與每個像素的阿爾法不同級別的分層窗下,使這兩個提請不透明的兩個層次:

User32.SetLayeredWindowAttributes(this.Handle, (uint) TransparentColorKey.ToArgb(), 255, User32.LWA_ALPHA | User32.LWA_COLORKEY); 

e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(200, 40, 40, 40)), myRect); 
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(25, 40, 40, 40)), myRect); 

但是這兩個矩形具有相同的不透明度(我期望一個在200,一個在25)。我只控制整個窗口(SetLayeredWindowAttributes中的255)的不透明度。

我在這裏錯過了什麼,這樣我就可以繪製不同的元素,即使只是矩形,在不同級別的alpha透明度?

順便說一句,我想要SetLayeredWindowAttributes(而不是UpdateLayeredWindow),因爲我正在使用設備上下文進行主動繪製。後一種方法需要繪製一個位圖並一次性提供。 謝謝! Dave

回答

1

我不知道你在哪裏得到SetLayeredWindowAttributes應該允許你直接繪製alpha數據到你的窗口的想法。從MSDN文檔中,它似乎只允許常量字母或顏色鍵控。獲得每像素alpha的唯一方法是使用UpdateLayeredWindow。

+0

這幾乎是我到達的,所以切換到UpdateLayeredWindow,它的工作原理。雖然不幸。 – Dave