Merhaba arkadaşlar,
Bu yazımızda C# ile Glass Form nasıl oluşturulur bunu inceleyeceğiz. Biliyorsunuz ki GlassForm olayı Windows Aero özellikleri ile gelen bir özellik. Eğer Windows Aero Grafikleriniz aktif durumda ise mouse’yi görev çubuğunun sağ en alt kısmına getirdiğinizde Masaüstü görüntülenirken ekranı kaplamamış olan tüm Formlar Glass görünümünde gözükür. Bizde bu yazıdan faydalanarak kendi GlassFormumuzu oluşturucağız.
Haydi işin kodlama kısmına geçelim!
Öncelikle gerekli kütüphane tanımlamalarımızı yapıyoruz.
using System.Runtime.InteropServices;
Ve daha sonra Glass efekti vermek için gerekli kod parçalarını ekliyoruz.
[System.Runtime.InteropServices.DllImport("dwmapi.dll", PreserveSig = false)] public static extern bool DwmIsCompositionEnabled(); [System.Runtime.InteropServices.DllImport("DwmApi.dll")] public static extern int DwmExtendFrameIntoClientArea( IntPtr hwnd, ref MARGINS pMarInset); [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)] public struct MARGINS { public int cxLeftWidth; // soldan uzatılacak cam efekti public int cxRightWidth; // sağdan uzatılacak cam efekti public int cyTopHeight; // üstten uzatılacak cam efekti public int cyBottomHeight; // alttan uzatılacak cam efekti }
Bir sonraki adımda değiştirmemiz gereken özellik Formumuzun arkaplan rengi, standardı Control olarak gelen bu renk ile işlem yaptığımızda button vb. componentler ile arka plan rengi karıştığından hoş bir görünüm olmuyor. O yüzden arka plan rengini değiştiriyoruz.
this.BackColor = Color.White;
Bu adımda da Glass efekti verebilmek için gerekli bir işlem daha yapacağız. Glass geçerli olması için Formumuzun TransparencyKey ile arka plan rengi aynı olmak zorunda. Bu uygulamayı yapıyoruz.
this.TransparencyKey = Color.White;
Ve son adımda Glass özelliklerini aktif hale getiriyoruz bu adımın ardından Glass görünümlü Formumuza kavuşacağız.
MARGINS margins = new MARGINS(); margins.cxLeftWidth = -1; //-1 Olmasının Sebebi Tamamen Glass Olmasını Sağlamak margins.cxRightWidth = -1; margins.cyTopHeight = 0; //Uzatmak için istediğiniz gibi değiştirebilirsiniz. margins.cyBottomHeight = 0; //Windows Aero Efektlerinin Aktif Olmaması durumunda Arka Plan Beyaz olarak gözükecek. if (DwmIsCompositionEnabled() == true) { IntPtr hWnd = this.Handle; int result = DwmExtendFrameIntoClientArea(hWnd, ref margins); } else { this.BackColor = System.Drawing.Color.White; }
Ve bu adımı da uyguladıktan sonra sonuç aşağıdaki gibi oluyor.
Teşekkürler!