zoukankan      html  css  js  c++  java
  • 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;
    

     
     
     
     
  • 相关阅读:
    雅礼集训 Day6 T2 Equation 解题报告
    雅礼集训 Day6 T1 Merchant 解题报告
    雅礼集训 Day5 T3 题 解题报告
    雅礼集训 Day3 T2 u 解题报告
    雅礼集训 Day3 T2 v 解题报告
    set-begin
    set-constructors
    set-constructors
    list-unique
    list-unique
  • 原文地址:https://www.cnblogs.com/linlf03/p/2171860.html
Copyright © 2011-2022 走看看