2011-10-18 26 views
5

我需要將Aero背景模糊應用於僅部分自定義形狀的WPF窗口。問題是,要使用DWM應用模糊,我需要爲DwmEnableBlurBehindWindow函數提供一個窗口句柄。是否有可能獲得WPF Popup控件的Hwnd?

我被告知WPF彈出控件實際上是一個單獨的窗口。那很好。我可以得到一個彈出框的句柄來應用模糊嗎?如果是這樣,怎麼樣?

回答

8

試試這個

HwndSource source = (HwndSource)HwndSource.FromVisual(myPopup) 

或本但這個只適用於實際的Windows,但可能有助於爲未來的引用。

IntPtr handle = new WindowInteropHelper(myWindow).Handle; 
+1

你應該通過'myPopup.Child'到'HwndSource.FromVisual()'在克萊伯的答案。否則,您將獲得Popup父級的HwndSource(這是您的父窗口,其中Popup是在XAML中聲明的)。但是,如果你傳遞'myPopup.Child',你將得到一個由Popup創建的窗口。 – nevermind

0

它有自定義類名嗎?如果是這樣,你可以通過類名(FindWindow)找到窗口句柄。

當談到Windows中的這些東西時,我有點像黑客類型,所以這就是我通常首先嚐試的方式,而不是試圖發現一個「正確的」方法。對我來說,所有舊的東西,但我不這麼做了 - 看到blackbeltvb.com

我做了這兩個其他方法是1)掛鉤窗口創建消息,注意彈出窗口,然後做一些事情(SetWindowsHookEx)和2)枚舉所有正在使用的窗口句柄,然後觀察新的窗口句柄。

8

試試這個:

<Popup Name="MyPop" IsOpen="True" Height="50" Width="50"> 
    <!--or other control--> 
    <Rectangle/> 
</Popup> 


// only after MyPop.IsOpen is true 
IntPtr handle = ((HwndSource)PresentationSource.FromVisual(MyPop.Child)).Handle; 
相關問題