Red de conocimiento informático - Computadora portátil - Cómo agregar sombra a todos los bordes en formato C#

Cómo agregar sombra a todos los bordes en formato C#

El método que uso es dibujar la sombra en el mapa de bits y luego dibujar el mapa de bits en la capa de fondo usando el principio de una forma de doble capa.

Los más importantes son:

1. Dibujar un rectángulo circular

public static void DrawRoundRectangle(Gráficos g, Pen pen, Rectángulo rect, int cornerRadius)

{

Uso (ruta GraphicsPath = CreateRoundedRectanglePath(rect, cornerRadius))

{

g.DrawPath(pluma, ruta) ;

}

}}

public static void FillRoundRectangle(Gráficos g, Pincel, Rectángulo rect, int cornerRadius)

{

usando (ruta GraphicsPath = CreateRoundedRectanglePath(rect, cornerRadius))

{

g.FillPath(pincel, ruta);

}

}

GraphicsPath estático interno CreateRoundedRectanglePath(Rectangle rect, int cornerRadius)

{

GraphicsPath roundedRect = new GraphicsPath();

redondeadoRect.AddArc(rect.X, rect.Y, cornerRadius * 2, cornerRadius * 2, 180, 90);

redondeadoRect.Agregar línea recta (rect.X + cornerRadius , rect.right - cornerRadius * 2, rect.Y);

roundedRect.AddArc (rect.X + rect.Width - cornerRadius * 2, rect.270, 90); > roundedRect.AddLine(rect.Right, rect.Y + cornerRadius * 2, rect.Right, rect.Y + rect.Height - cornerRadius * 2);

roundedRect.AddArc(rect.X + rect Ancho - cornerRadius * 2, rect.Y + rect.Height - cornerRadius * 2);

Rectángulo redondeado.

Altura (altura) - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 0, 90);

roundedRect.AddLine(rect.Right - cornerRadius * 2, rect.Bottom, rect.X + cornerRadius * 2, rect.Bottom);

roundedRect.AddArc(rect.AddArc(rect..Bottom - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 90, 90);

roundedRect.AddLine(rect.X, rect.Bottom - cornerRadius * 2, rect.CloseFigure();

return roundedRect;}

2. Dibujar sombra

Nulo interno DrawShadow()

{

Mapa de bits mapa de bits = nulo;

Gráficos g = nulo

{

mapa de bits = nuevo mapa de bits(Ancho, Alto);

g = Gráficos.

g.SmoothingMode = SmoothingMode.AntiAlias;

Color c = Color.FromArgb(0, 0, 0, 0);

Pen p = new Pen(c, 3) for (int i = 0; i & lt; Main.ShadowWidth - i) ;

}

SetBits(mapa de bits);

} catch { } finalmente

{

Esto es la primera vez que se ha dibujado el mapa de bits p>g?.Dispose();

bitmap?Dispose();

}

} p>

3. Dibuje un mapa de bits translúcido en la ventana

anulación protegida CreateParams CreateParams

{

SetBits(bitmap);

{

SetBits(mapa de bits);

{

Captura { } finalmente

{

obtener

{

CreateParams cParms = base.CreateParams

{

CreateParams cParms = base.CreateParams

;

{

CreateParams cParms = base.CreateParamsCreateParams;

cParms.ExStyle |= 0x00080000; // WS_EX_LAYERED

devuelve cParms;

}

}

SetBits públicos vacíos (mapa de bits mapa de bits)

{

If (!Image.IsCanicalPixelFormat(mapa de bits.PixelFormat ) || !Soy

ge.IsAlphaPixelFormat(bitmap.PixelFormat))

{

If (!Image.IsCanicalPixelFormat(bitmap.PixelFormat) || !Image.IsAlphaPixelFormat(bitmap.PixelFormat))FromArgb(0 ));

oldBits = FormStyleAPI.SelectObject(memDc, hBitmap);

blendFunc.BlendOp = FormStyleAPI.AC_SRC_OVER;

blendFunc.SourceConstantAlpha = Byte.Parse (((int)(Main.Opacity * 255)).ToString());

blendFunc.AlphaFormat = FormStyleAPI.AC_SRC_OVER;