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