2011-05-12 100 views
0

我使用GlassForm的Windows窗體(使用Microsoft.WindowsAPICodePack.Shell;)。我的問題,當我將窗體更改爲GlassForm我的文本框文本不是Windows aero玻璃窗體文本問題

+3

您需要提供有很多更多的信息可以幫助我們,您是否可以發佈截圖或示例代碼? – 2011-05-12 12:38:26

+0

我認爲OP的意思是這樣的:http://selimozyalcin.blogspot.com/2010/08/creating-c-glass-form.html雖然目前還不清楚從 – Darbio 2011-05-12 12:40:53

+0

http://img218.imageshack.us/img218 /5341/aaaui.png http://img818.imageshack.us/img818/7720/bbbbaz.png 我用你的鏈接問題是一樣的。我的文字可見透明! – emozguner 2011-05-12 12:46:18

回答

3

是的,這就是它的工作原理。應用Aero Glass效果後,以黑色繪製的任何內容都將呈現爲透明。這包括文本框控件中的文本。這個一般主題在這裏已經是many other questions的主題。當寫得很好時,他們會收集許多讚揚,但很少有答案。

這裏沒有很多好的解決方案。我所遇到的所有這些都是「醜陋」和「駭人聽聞」。當您使用類似於標籤控件的東西時,所有者繪圖是一種合理的方法,但我不會建議您嘗試繪製自己的文本框 - 這太難以正確進行了。 Someone tried to do that here;就像我說的那樣,結果既醜陋又駭人聽聞。我對自己的使用並不滿意,但它可能適用於您,取決於您的標準有多高。

所有者繪圖的目標當然是使用GDI +(本機支持透明度)而不是GDI(所有內置控件默認使用)或者調用函數來完成所有繪圖比如DrawThemeTextEx,它是專門爲渲染文字而設計的,可以在玻璃上看到[有點]可讀的影子。

同樣,像啓用兼容性文本渲染(這會導致內置控件使用GDI +例程進行繪製,就像他們在早期版本的.NET中所做的那樣)的常用技巧不適用於文本框。

老實說,你最好的選擇是將文本框放在你的窗體的一個區域,即而不是呈現爲玻璃。使用DwmEnableBlurBehindWindow function有選擇地啓用表單某些區域後面的玻璃效果,而不是整個事物。我在my answer here中提供了一個完整的,隨時可用的.NET實現。

1

入住此示例出: http://www.danielmoth.com/Blog/Glass-In-C-An-Alternative-Approach.aspx

我沒有研究它的任何進一步但只是一個文本框或按鈕或其他組件在這個Aero的玻璃區域合作 - 渲染的成分沒有足夠的透明度問題。標籤並不完美,但可以通過GDI + 輕鬆繪製。示例項目的直接鏈接位於:http://www.danielmoth.com/Blog/MothGlass.zip

看起來他將面板放在控件後面併爲面板設置TransparencyKey。

enter image description here

3

窗體上放置一個面板中設置的碼頭風格,以填補,設置面板的背景色,以色X,然後設置窗體的TransparencyKey相同顏色X.