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,如需转载请自行联系原作者
目录
相关文章
|
C# Windows
利用WPF创建含多种交互特性的无边框窗体
原文:利用WPF创建含多种交互特性的无边框窗体 咳咳,标题一口气读下来确实有点累,让我先解释一下。另外文章底部有演示程序的下载。
1232 0
|
C# Windows 安全
WinForm控件与WPF控件的交互
原文:WinForm控件与WPF控件的交互 这个问题其实也可以理解为:怎样在WPF/XAML中使用Winform中的控件(如PictureBox)?首先看看XAML代码:(注意下面加粗的部分)              ...
1064 0
|
C# C++
【WPF/WAF】使用System.Windows.Interactivity交互事件
原文:【WPF/WAF】使用System.Windows.Interactivity交互事件 下载System.Windows.Interactivity.dll文件,并引入项目中(在VS项目的引用列表中可以看到)。
2045 0
|
JavaScript C#
wpf CefSharp 与 js交互
原文:wpf CefSharp 与 js交互 通过 NuGet 获取 CefSharp.WpF 组件。  xmlns:cefSharp="clr-namespace:CefSharp.
3881 0
|
C# Shell 前端开发
从PRISM开始学WPF(九)交互Interaction?
原文:从PRISM开始学WPF(九)交互Interaction? 0x07交互 这是这个系列的最后一篇了,主要介绍了Prism中为我们提供几种弹窗交互的方式。 Notification通知式 Prism通过InteractionRequest 来实现弹窗交互,它是一个泛型接口,不同的类型对应不同类型的弹窗方式。
1104 0
|
前端开发 测试技术 C#
WPF MVVM UI分离之《交互与数据分离》
原文:WPF MVVM UI分离之《交互与数据分离》 在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架。 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下面的问题: 删除操作,假如需要先执行一部分数据的处理,然后删除界面列表中的子项,之后再执行其它数据的处理。
1080 0
|
前端开发 测试技术 C#
WPF MVVM UI分离之《交互与数据分离》
在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架。 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下面的问题: 删除操作,假如需要先执行一部分数据的处理,然后删除界面列表中的子项,之后再执行其它数据的处理。
1521 0
|
C# Windows
利用WPF创建含多种交互特性的无边框窗体
咳咳,标题一口气读下来确实有点累,让我先解释一下。另外文章底部有演示程序的下载。   本文介绍利用WPF创建一个含有以下特性的窗口:   有窗口阴影,比如QQ窗口外围只有几像素的阴影;支持透明且无边框,为了自行美化窗口通常都会想到使用无边框窗口吧; 可正常最大化,WPF无边框窗口直接最大化会直接使窗口全屏即会将任务栏一并盖住; 窗口边缘改变窗口大小,可以拖动窗口边缘改变大小; 支持等同于标题栏的全窗口空白区拖动,这一特性可以参考QQ; 支持多显示器环境。
1091 0
|
3月前
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
258 0