WPF与Win32的交互(1)

简介:

1、把Win32的按钮添加到WPF窗口中

1)添加如下的using指令

using System.Windows.Interop;
using System.Runtime.InteropServices;

2)创建Win32ButtonHost类

public  class  Win32ButtonHost : HwndHost
   {              
       IntPtr hwndHost = IntPtr.Zero;
       IntPtr hwndButton = IntPtr.Zero;
 
       public  int  ButtonWidth = 0;
       public  int  ButtonHeight = 0;
 
       private  const  int  WS_CHILD = 0X40000000;
       private  const  int  WS_VISIBLE = 0X10000000;
       private  const  int  WS_BORDER = 0X00800000;
 
       public  Win32ButtonHost( int  width, int  height)
       {
           ButtonWidth = width;
           ButtonHeight = height;
       }
     //CreateWindowEx函数
     [DllImport( "user32.dll" , EntryPoint = "CreateWindowEx" , CharSet = CharSet.Auto)]
     internal  static  extern  IntPtr CreateWindowEx(
         int  dwExStyle,
         string  lpszClassName,
         string  lpszWindowName,
         int  style,
         int  x, int  y,
         int  width, int  height,
         IntPtr hwndParent,
         IntPtr hMenu,
         IntPtr hInst,
         [MarshalAs(UnmanagedType.AsAny)] object  pvParam
         );
 
     protected  override  HandleRef BuildWindowCore(HandleRef hwndParent)
     {
         hwndHost = CreateWindowEx(0, "static" , "" , WS_CHILD | WS_VISIBLE, 0, 0, ButtonWidth, ButtonHeight, hwndParent.Handle, IntPtr.Zero, IntPtr.Zero, 0);
         hwndButton = CreateWindowEx(0, "button" , "Win32 Button" , WS_CHILD | WS_VISIBLE | WS_BORDER, 0, 0, ButtonWidth, ButtonHeight, hwndHost, IntPtr.Zero, IntPtr.Zero, 0);
         return  new  HandleRef( this , hwndHost);
     }
 
     //DestoryWindow函数
     [DllImport( "user32.dll" , EntryPoint = "BuildWindowCore" , CharSet = CharSet.Auto)]
     internal  static  extern  bool  DestoryWindow(IntPtr hwnd);
 
 
     protected  override  void  DestroyWindowCore(HandleRef hwnd)
     {
         DestoryWindow(hwnd.Handle);
     }
}
 
3)WPF页面中使用Win32ButtonHost类
 
<Grid>
        <Border x:Name= "myBorder"  Margin= "20"  BorderBrush= "LightBlue"   BorderThickness= "2" />
    </Grid>
Win32ButtonHost  win32ButtonHost= new  Win32ButtonHost(100, 50);
  myBorder.Child = win32ButtonHost;

 
 
本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/09/08/2171860.html,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
C# Windows 监控
WPF应用跨界成长秘籍:深度揭秘如何与Windows服务完美交互,扩展功能无界限!
【8月更文挑战第31天】WPF(Windows Presentation Foundation)是 .NET 框架下的图形界面技术,具有丰富的界面设计和灵活的客户端功能。在某些场景下,WPF 应用需与 Windows 服务交互以实现后台任务处理、系统监控等功能。本文探讨了两者交互的方法,并通过示例代码展示了如何扩展 WPF 应用的功能。首先介绍了 Windows 服务的基础知识,然后阐述了创建 Windows 服务、设计通信接口及 WPF 客户端调用服务的具体步骤。通过合理的交互设计,WPF 应用可获得更强的后台处理能力和系统级操作权限,提升应用的整体性能。
132 0
|
4月前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
74 0
|
4月前
|
C# 开发者 设计模式
WPF开发者必读:命令模式应用秘籍,轻松简化UI与业务逻辑交互,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,命令模式是简化UI与业务逻辑交互的关键技术,通过将请求封装为对象,实现UI操作与业务逻辑分离,便于代码维护与扩展。本文介绍命令模式的概念及实现方法,包括使用`ICommand`接口、`RelayCommand`类及自定义命令等方式,并提供示例代码展示如何在项目中应用命令模式。
59 0
|
C# Windows
利用WPF创建含多种交互特性的无边框窗体
原文:利用WPF创建含多种交互特性的无边框窗体 咳咳,标题一口气读下来确实有点累,让我先解释一下。另外文章底部有演示程序的下载。
1273 0
利用WPF创建含多种交互特性的无边框窗体
|
C# Windows 安全
WinForm控件与WPF控件的交互
原文:WinForm控件与WPF控件的交互 这个问题其实也可以理解为:怎样在WPF/XAML中使用Winform中的控件(如PictureBox)?首先看看XAML代码:(注意下面加粗的部分)              ...
1092 0
|
C# C++
【WPF/WAF】使用System.Windows.Interactivity交互事件
原文:【WPF/WAF】使用System.Windows.Interactivity交互事件 下载System.Windows.Interactivity.dll文件,并引入项目中(在VS项目的引用列表中可以看到)。
2121 0
|
JavaScript C#
wpf CefSharp 与 js交互
原文:wpf CefSharp 与 js交互 通过 NuGet 获取 CefSharp.WpF 组件。  xmlns:cefSharp="clr-namespace:CefSharp.
3925 0
|
C# Shell 前端开发
从PRISM开始学WPF(九)交互Interaction?
原文:从PRISM开始学WPF(九)交互Interaction? 0x07交互 这是这个系列的最后一篇了,主要介绍了Prism中为我们提供几种弹窗交互的方式。 Notification通知式 Prism通过InteractionRequest 来实现弹窗交互,它是一个泛型接口,不同的类型对应不同类型的弹窗方式。
1149 0
|
前端开发 测试技术 C#
WPF MVVM UI分离之《交互与数据分离》
原文:WPF MVVM UI分离之《交互与数据分离》 在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架。 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下面的问题: 删除操作,假如需要先执行一部分数据的处理,然后删除界面列表中的子项,之后再执行其它数据的处理。
1103 0
|
前端开发 测试技术 C#
WPF MVVM UI分离之《交互与数据分离》
在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架。 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下面的问题: 删除操作,假如需要先执行一部分数据的处理,然后删除界面列表中的子项,之后再执行其它数据的处理。
1551 0