• 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;
    

     
     
     
     
  • 相关阅读:
    Setting up SystemC and Eclipse for C++ hardware simulation
    Linux操作系统实用教程(Fedora)
    Creating .deb to install bash script program
    tcp cubic代码分析
    Small chat software based on C++/qml (including source code)
    Is TCP PACING enabled by default on linux?
    tcp: avoid minRTT overestimation from delayed ACKs
    Ubuntu Linux操作系统(微课视频版)
    剑指 Offer 59 II. 队列的最大值
    剑指 Offer 68 II. 二叉树的最近公共祖先
  • 原文地址:https://www.cnblogs.com/linlf03/p/2171860.html
Copyright © 2020-2023  润新知