Сначала добавляем в проект вот этот класс:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing;
namespace VistaApi
{
/// Class for enabling glass transparent mode in area
/// You must set Color = Black in control!
public class GlassApi
{
[DllImport("dwmapi.dll")]
static extern void DwmExtendFrameIntoClientArea(System.IntPtr hWnd, ref Margins pMargins);
[DllImport("dwmapi.dll")]
static extern void DwmIsCompositionEnabled(ref bool isEnabled);
struct Margins
{
public int Left, Right, Top, Bottom;
}
/// Glass Window Handle
IntPtr Handle;
/// Constructor
/// Handle of window with glass effect
public GlassApi(IntPtr Handle)
{
this.Handle = Handle;
}
/// Glass rectangle
Margins margins = new Margins();
public void SetGlassArea(Rectangle r)
{
//-1 because strange bug: on left corner is 1-pixel black square
margins.Left = r.Left-1;
margins.Top = r.Top-1;
margins.Right = r.Right;
margins.Bottom = r.Bottom;
DwmExtendFrameIntoClientArea(Handle, ref margins);
}
bool glassEnabledCalled = false;
private bool GetIsGlassEnabled()
{
glassEnabledCalled = true;
//Checking if OS is >= Vista
if (Environment.OSVersion.Version.Major < 6)
return false;
//Check if DWM is enabled
bool isGlassSupported = false;
DwmIsCompositionEnabled(ref isGlassSupported);
return isGlassSupported;
}
bool _IsGlassEnabled=false;
/// returns True if glass can be used
public bool IsGlassEnabled
{
get
{
if (!glassEnabledCalled)
_IsGlassEnabled = GetIsGlassEnabled();
return _IsGlassEnabled;
}
}
}
}
Использование его очень просто:
1. В конструкторе передаем хэндл нашего окна.
2. Для того, чтобы узнать - можно ли использовать вистовскую прозрачность - используем свойство класса IsGlassEnabled.
3. Чтобы сделать форму прозрачной необходимо залить ее SolidBrush кистью, причем используя только основные семь цветов (белый цвет к ним не относится!). В зависимости от использованного цвета заливки будет меняться цвет полупрозрачности.
Следствие №1: все контролы, залитые основным цветом будут также полупрозрачными. Это так же касается всех надписей (по умолчанию они черного цвета).
Следствие №2: если цвет формы не менять (оставить цвет Control), а у контролов на форме - менять, то контролы будут полупрозрачными, а форма - нет.
Комментариев нет:
Отправить комментарий