欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

WPF如何获取控件句柄

程序员文章站 2022-07-13 22:32:43
...

根据网上回答测试了一下

1.获取窗体句柄 :

IntPtr hwnd1 = new WindowInteropHelper(this).Handle;
这个没问题。

2.获取WPF控件句柄:

2.1 IntPtr hwnd2 = ((HwndSource)PresentationSource.FromVisual(tb_Test)).Handle;

2.2 HwndSource hs = (HwndSource)PresentationSource.FromDependencyObject(tb_Test);
      IntPtr hwnd2= hs.Handle;

这两种方法得到都是控件所在窗体的句柄。

结论:猜测wpf控件无法获取句柄,思路是界面嵌套winform控件,然后获取winform句柄。

通常我们传递句柄是给C++模块,供其在控件上进行渲染。所以可以在wpf窗体上嵌套pictureBox,然后获取并传递其句柄。测试可行。

代码来自:(1条消息) (转)怎样在WPF/XAML中使用Winform中的控件(如PictureBox)?_weixin_30498921的博客-CSDN博客

 xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

 <WindowsFormsHost  MaxHeight="300" Name="pictureHost" Grid.Row="1" Grid.Column="0">
            <wf:PictureBox />
        </WindowsFormsHost>

C#后台代码:

System.Windows.Forms.PictureBox _pictureBox = pictureHost.Child as System.Windows.Forms.PictureBox;
IntPtr hwnd3 = _pictureBox.Handle;

实测hwnd3与hwnd1、hwnd2不同。未测试,能否通过其进行渲染。

PS:需添加引用WindowsFormsIntegration,System.Windows.Forms,System.Drawing