WPF如何获取控件句柄
根据网上回答测试了一下
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