2009-05-05 56 views
0

我正在尋找AlphaBlend子窗體的一種方式,如果可能的話使用分層窗口,因爲它後面會有交互式控件。AlphaBlend子窗體

問題是我在繪製多個可視層(繪圖,圖片...)的常規TForm中有一個組件。在某些時候,我需要在這個表單上實例化一個編輯器控件(就地),這個控件將涉及我的控件之外的各種標準輸入控件(編輯框,複選框等),但是我想重疊使用alpha混合對圖層前面的圖層進行編輯(並使WS_EX_TRANSPARENT使其點擊)。

我首先想到了使用子窗體(對於組件來說是無邊界的TForm),並且工作正常,直到AlphaBlended TForm完全不是alphablended,但一旦父元素變爲不透明...

然後,我嘗試不透明的alphablended表單,將其設置爲fsStayOnTop,並通過對相關事件做出反應,將它保留在屏幕上的組件前,即可正常工作,但這並不是真正令人滿意的解決方案:如果用戶決定將它們移動到組件的前面,則排列順序爲StayOnTop的表單也在應用程序的其他模式和非模式形式之前...

因此,有什麼其他的想法讓孩子形成一個字母? (或表現得像它一樣)

+0

ws_ex_Transparent樣式不會使窗口免受鼠標事件的影響。該風格僅影響繪畫順序。如果您不想接收鼠標事件,請使用SetWindowRgn在窗口中創建「孔」。 – 2009-05-05 14:02:44

回答

2

根據MSDN,你運氣不好,如WS_EX_LAYERED cannot be used for child windows

也許你可以在你的表單/應用程序失去焦點時隱藏所有的編輯器表單,至少可以讓它們避免處於其他窗口之上。儘管如此,它並不令人滿意......

+0

謝謝,我很害怕它。 我已經解決了通過獲取規範重寫和覆蓋僅在編輯窗體中的輸入控件的「外部」(編輯窗體將是透明的,輸入控件的編輯區域將不會)。由於覆蓋層主要用於定位目的和指南,因此如果不能完全滿足,這是「足夠好」的。 – user45336 2009-05-06 09:47:36