jqkyp 发表于 2015-5-15 05:03:46

win7下 窗体玻璃效果的实现和WindowStyle None模式下的移动 wpf

  这些技术在上一篇文章的介绍的软件里有用到,现在单独摘出来说明一下。
  添加 using System.Runtime.InteropServices;
  
      public struct MARGINS
      {
            public int cxLeftWidth;
            public int cxRightWidth;
            public int cyTopHeight;
            public int cyBottomHeight;
      }
      #region引用 Dll
                     //玻璃
      public static extern int DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS pMarInset);
      // 移动
      public static extern int SendMessage(int hWnd, int wMsg, int wParam, int lParam);
      
      public static extern int ReleaseCapture();
      public const int WM_SysCommand = 0x0112;
      public const int SC_MOVE = 0xF012;
  #endregion
  public MainWindow()
      {
            InitializeComponent();
  this.Background = Brushes.Transparent;
            ExtendAeroGlass(this);
  }
  private void ExtendAeroGlass(Window window)
      {
            try
            {
                // 为WPF程序获取窗口句柄
                IntPtr mainWindowPtr = new WindowInteropHelper(window).Handle;
                HwndSource mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr);
                mainWindowSrc.CompositionTarget.BackgroundColor = Colors.Transparent;
                // 设置Margins
                MARGINS margins = new MARGINS();
  // 扩展Aero Glass
                margins.cxLeftWidth = -1;
                margins.cxRightWidth = -1;
                margins.cyTopHeight = -1;
                margins.cyBottomHeight = -1;
  int hr = DwmExtendFrameIntoClientArea(mainWindowSrc.Handle, ref margins);
                if (hr < 0)
                {
                  checkBox1.IsChecked = false;
                  MessageBox.Show("玻璃效果加载失败!");
                }
            }
            catch (DllNotFoundException)
            {
                Application.Current.MainWindow.Background = Brushes.White;
            }
      }
      private void Window_MouseDown(object sender, MouseButtonEventArgs e)//鼠标按下时,移动
      {
            IntPtr mainWindowPtr = new WindowInteropHelper(this).Handle;
            HwndSource mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr);
            ReleaseCapture();
            SendMessage(mainWindowSrc.Handle.ToInt32(), WM_SysCommand, SC_MOVE, 0);
      }
  完成 。。
页: [1]
查看完整版本: win7下 窗体玻璃效果的实现和WindowStyle None模式下的移动 wpf