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;