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,如需转载请自行联系原作者