首页 > 系统相关 >WPF中嵌入第三方窗体-WindowsFormsHost使用

WPF中嵌入第三方窗体-WindowsFormsHost使用

时间:2024-12-03 14:32:42浏览次数:5  
标签:IntPtr WindowsFormsHost 嵌入 int private Windows 窗体 WPF

嵌入第三方窗体到Windows 窗体或控件中,通过调用API方法很容易实现,但是在WPF 存在一些问题,这里对解决这些问题的方法做一点笔记:

  • 首先说一下要做嵌入第三方窗体要用到的API方法
[DllImport("user32.dll",SetlastError=true)]
private static extern IntPtr SetParent(IntPtr hWndChild,IntPtr hWndParent); 
//该方法时嵌入第三方窗体的关键
//hWndChild:要嵌入对象的句柄   hWndParent:嵌入到的容器的句柄
[DllImport("user32.dll",SetLastError=true)]
private static extern bool MoveWindow(IntPtr hWnd,int X,int Y,int nHeight,int nWidth);
//移动窗体到指定的位置
[DllImport("user32.dll",EntryPoint="GetWindowLong")]
private static extern int GetWindowLong(IntPtr hWnd,int nIndex);
[DllImport("user32.dll",EntryPoint="SetWindowLong")]
private static extern int SetWindowLong(IntPtr hWnd,int nIndex,int dwNewLong);

private const int GWL_Style=-16;
private const int WS_CAPTION=0xC00000;
private const int WS_CHILD=0x40000000;
private const int WS_VISIBLE=0x1000000;
  • 通过以上API方法,可以看出要用到要嵌入的对象和嵌入的目标容器的句柄,在WPF 中智能获取窗体的句柄,无法获取控件的句柄,因此要实现以上功能,就需要解决这个问题。

  • 解决方法,在WPF 中加入Windows.Forms 控件
    要在WPF中使用Windows.Forms 控件,需要引用如下程序集:

1. WindowsFormsIntegration
2. System.Windows.Forms
在XAML中引入:
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

  • 使用方法,即把 作为容器,其中可以放置Windows.Forms 的控件,例如:
<WindowsFormsHost>
   <wf:DataGridView x:Name="datagridview1" /> 
</WindowsFormsHost>

这样就可以轻松获取控件的句柄

IntPtr h=datagridview1.Handle

标签:IntPtr,WindowsFormsHost,嵌入,int,private,Windows,窗体,WPF
From: https://www.cnblogs.com/sundh1981/p/18584007

相关文章

  • WPF+MVVM案例实战与特效(三十一)- 封装一个加载动画的自定义控件
    文章目录1、案例效果2、案例实现1、资源与文件创建2、自定义控件封装3、自定义控件使用4、总结1、案例效果2、案例实现在开发WPF应用程序时,我们常常需要一个灵活的加载动画控件,该控件可以根据窗口的大小自动调整其内部元素(如图片、边框和文本)的尺寸,并......
  • wpf 标尺 刻度尺 适用于图像缩放
    xaml部分主要代码:<Canvasx:Name="cvRuler"Margin="0"Background="WhiteSmoke"TextBlock.Foreground="Black"/>后台主要代码1//画标尺2privatevoidDrawRule()3{45if(cvRuler.......
  • Winform窗体控件双向绑定数据模拟读写PLC数据
    1.用Modbus工具模拟PLC2.创建一个实体类点击查看代码internalclassData:INotifyPropertyChanged{ushort[]ushorts=newushort[10];publicushortD0{get=>ushorts[0];set{ushorts[0]=value;OnPropertyChanged(nameof(D0));}}publicushor......
  • WPF中的TypeConverter类型
    自定义对象如下:点击查看代码publicclassHuman{publicstringName{get;set;}publicHumanChild{get;set;}}需求1:点击界面上Button时弹出Human对象的Name信息代码实现:点击查看代码<Windowx:Class="HappyWPF.MainWindow"......
  • 界面控件DevExpress WPF v24.2新功能预览 - 人工智能(AI)集成
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • vs2022中windows窗体winform没有窗体设计器问题处理
    环境:vs2022,.net8,winfrom项目。问题:这几天重新换了个代码托管库,上传拉取代码后(换了本地目录),发现所有窗体都只能打开代码,不能打开窗体设计器进行控件的调整修改等。网上找了n多资料都无效。无意中发现是.user文件导致,这个文件一般在源码管理中是排除的。处理如下:项目名:WinForms......
  • 使用XWPFTemplate进行java后端word模版导出
    1.pom引入poi-tl<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.7.3</version></dependency> 2.word模版 3.业务代码......
  • WPF 桌面应用开发进阶:用户界面设计与交互逻辑的完美融合
    WindowsPresentationFoundation(WPF)是Microsoft推出的一个桌面应用开发框架,旨在提供一个高效、可扩展的用户界面设计工具。WPF支持数据绑定、模板化、响应式布局等先进的特性,能够帮助开发者快速构建现代化的桌面应用程序。本文将围绕WPF开发中的界面设计与交互逻辑,详细......
  • 如何在WPF中打印PDF文件
    最近遇到有客户需要打印PDF的需求,这里分享一下两种解决方案: 1、使用"谓词(verb)"当用户右键单击Shell对象(如文件)时,Shell会显示(上下文)菜单的快捷方式。此菜单包含一个命令列表,用户可以选择这些命令对项执行各种操作。这些命令也称为快捷菜单项或谓词。可以自定义快捷......
  • 【WPF】Prism P2
     一、弹窗设置Step1在模块A创建弹窗A和弹窗B,注意,还是要使用【用户控件】<UserControlx:Class="ModuleA.Views.DialogA"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2......