Visual C# Developer Center > Windows Forms Forums > Windows Forms General > Glass Effect using dwmapi.dll in windows xp on C# 2005
Ask a questionAsk a question
 

AnswerGlass Effect using dwmapi.dll in windows xp on C# 2005

  • Wednesday, November 04, 2009 1:15 PMViswa Teja Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Has Code
    Hii i am writing a code to make the glass effect on windows form. Well the code works fine on vista but my target is on windows xp. I have copyed all the dll's that are reqired and when i debug i am getting an error "DLL NOT FOUND EXCEPTION UNHANDILED".
    Here is the code that i am using:-
    -----------------------------------------------------------------------------------------------------------------------------
    This is the class where i import dwmapi dll.
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    
    namespace welcome_page
    {
        class VistaGlassEffect
        {
            internal class VistaApi
            {
                [DllImport("dwmapi.dll")]
                internal static extern void DwmExtendFrameIntoClientArea(System.IntPtr hWnd, ref Margins pMargins);
    
                [DllImport("dwmapi.dll")]
                internal static extern void DwmIsCompositionEnabled(ref bool isEnabled);
    
                internal struct Margins
                {
                    public int Left, Right, Top, Bottom;
                }
    
                // consts for wndproc
                internal const int WM_NCHITTEST = 0x84;
                internal const int HTCLIENT = 1;
                internal const int HTCAPTION = 2;
            }
        }
    }
    
    

    -----------------------------------------------------------------------------------------------------------------------------
    This the form where i call this class "VistaGlassEffect"
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.DirectX.AudioVideoPlayback;
    using System.Diagnostics;
    using System.Drawing.Drawing2D;
    
    
    namespace welcome_page
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
                this.FitGlass();
            }  
            Video video;
            private welcome_page.VistaGlassEffect.VistaApi.Margins marg;
            private Rectangle topRect = Rectangle.Empty;
            private Rectangle botRect = Rectangle.Empty;
            private Rectangle lefRect = Rectangle.Empty;
            private Rectangle rigRect = Rectangle.Empty;
            
            private void FitGlass()
            {
                // If DWM is not enabled then get out
                if (!this.IsGlassEnabled())
                {
                    return;
    
                }
    
                // Set the Margins to their default values
                marg.Top = 600; // extend from the top
                marg.Left = 400;  // not used in this sample but could be
                marg.Right = 200; // not used in this sample but could be
                marg.Bottom = 860;// not used in this sample but could be
    
                this.Paint += new PaintEventHandler(this.Form1_Paint);
    
                // call the function that gives us glass, 
                // passing a reference to our inset Margins
                welcome_page.VistaGlassEffect.VistaApi.DwmExtendFrameIntoClientArea(this.Handle, ref marg);
            }
    
           
    private void apply()
    {
         this.Paint -= new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
         this.RecreateHandle(); //needed if changing on the fly
         this.FitGlass();
       
    }    
       
    
        private bool IsGlassEnabled()
        {
          //if (Environment.OSVersion.Version.Major < 6)
          //{
          //  Debug.WriteLine("How about trying this on Vista?");
          //  return false;
          //}
    
          //Check if DWM is enabled
          bool isGlassSupported = false;
    ------welcome_page.VistaGlassEffect.VistaApi.DwmIsCompositionEnabled(ref isGlassSupported);---Here Error OCCURS.
          return isGlassSupported;
        }
    
        // Alpha-blending Paint after the glass extension
        // this seems better than the winforms transparency approach because here we can click on the glass!
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
          // black brush for Alpha transparency
          SolidBrush blackBrush = new SolidBrush(Color.Black);
    
          Graphics g = e.Graphics;
    
          if (this.IsGlassEnabled())
          {      
            // setup the rectangles
            topRect = new Rectangle(0, 0, this.ClientSize.Width, marg.Top);
            lefRect = new Rectangle(0, 0, marg.Left, this.ClientSize.Height);
            rigRect = new Rectangle(this.ClientSize.Width - marg.Right, 0, marg.Right, this.ClientSize.Height);
            botRect = new Rectangle(0, this.ClientSize.Height - marg.Bottom, this.ClientSize.Width, marg.Bottom);
            // Fill Rectangles
            g.FillRectangle(blackBrush, topRect);
            g.FillRectangle(blackBrush, lefRect);
            g.FillRectangle(blackBrush, rigRect);
            g.FillRectangle(blackBrush, botRect);
          }    
    
          blackBrush.Dispose();
        }
    
       
      
         
            
        protected override void WndProc(ref Message m)
        {      
          base.WndProc(ref m);
    
          if (m.Msg == welcome_page.VistaGlassEffect.VistaApi.WM_NCHITTEST // if this is a click
            && m.Result.ToInt32() == welcome_page.VistaGlassEffect.VistaApi.HTCLIENT // ...and it is on the client
            && this.IsOnGlass(m.LParam.ToInt32())) // ...and specifically in the glass area
          {
            m.Result = new IntPtr(welcome_page.VistaGlassEffect.VistaApi.HTCAPTION); // lie and say they clicked on the title bar
          }
        }
    
        private bool IsOnGlass(int lParam)
        {
          // sanity check
          if (!this.IsGlassEnabled())
          {
            return false;
          }
    
          // get screen coordinates
          int x = (lParam << 16) >> 16; // lo order word
          int y =  lParam        >> 16; // hi order word
    
          // translate screen coordinates to client area
          Point p = this.PointToClient(new Point(x, y));
    
          // work out if point clicked is on glass
          if (topRect.Contains(p) || lefRect.Contains(p) || rigRect.Contains(p) || botRect.Contains(p))
          {
            return true;
          }
    
          return false;
        }
        void buttn()
        {
    
        }
            private void Form2_Load(object sender, EventArgs e)
            {         
               
                int width = panel1.Width;
                int height = panel1.Height;
                System.Uri u = new Uri(@"F:\Documents\Viswa Teja\Documents\C2\teja.avi");
                video = Video.FromUrl(u);
                video.Owner = panel1;
                video.Play();
                panel1.Size = new Size(width, height);
                //this.apply();
                
                
                  
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                this.Close();
                        }       
            
    
    
        }
    }
    Please Kindly HELP ME
    
    • Moved byTaylorMichaelLMVPWednesday, November 04, 2009 2:21 PMWinForms related (From:Visual C# IDE)
    •  

Answers

All Replies