【问题标题】:Is it possible to get the Hwnd of a WPF Popup control?是否可以获得 WPF Popup 控件的 Hwnd?
【发布时间】:2011-10-18 23:52:24
【问题描述】:

我只需要对自定义形状的 WPF 窗口的一部分应用 Aero 背景模糊。问题是要使用 DWM 应用模糊,我需要为 DwmEnableBlurBehindWindow 函数提供一个窗口句柄。

有人告诉我,WPF 弹出控件实际上是一个单独的窗口。那很好。我可以得到一个弹出窗口的句柄来对其应用模糊吗?如果是这样,怎么做?

【问题讨论】:

    标签: .net wpf api popup handle


    【解决方案1】:

    试试这个

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

    或者这个,但这个只适用于实际的 Windows,但可能有助于将来的参考。

    IntPtr handle = new WindowInteropHelper(myWindow).Handle;
    

    【讨论】:

    • 您应该将myPopup.Child 传递给HwndSource.FromVisual(),就像Cleber 的回答一样。否则,您将获得 Popup 父级的 HwndSource(这是您的父窗口,其中 Popup 在 XAML 中声明)。但是如果你通过myPopup.Child你会得到一个由Popup创建的窗口。
    【解决方案2】:

    试试这个:

    <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;
    

    【讨论】:

      【解决方案3】:

      它有自定义类名吗?如果是这样,您可以通过类名(FindWindow)查找窗口句柄。

      当谈到 Windows 中的这些东西时,我有点像黑客类型,所以这是我通常首先尝试的,而不是试图发现“正确”的方法。不过,对我来说,所有的旧东西,我不再做这些了 - 请参阅 blackbeltvb.com

      我做这件事的另外两种方法是 1) 挂钩窗口创建消息,注意那个弹出窗口,然后对它做一些事情 (SetWindowsHookEx) 和 2) 枚举所有正在使用的窗口句柄,然后注意新的那一个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-18
        • 2010-12-16
        • 2023-04-05
        • 2010-11-17
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多