92 lines
2.9 KiB
C#
92 lines
2.9 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Runtime.InteropServices;
|
|
using System.Windows.Forms;
|
|
|
|
namespace KaraokePlayer
|
|
{
|
|
public partial class OverlayForm : Form
|
|
{
|
|
private const int DwmwaTransitionsForcedisabled = 3;
|
|
ContainerControl _parent;
|
|
|
|
public OverlayForm(ContainerControl parent)
|
|
{
|
|
|
|
InitializeComponent();
|
|
Graphic.BackColor = Color.Transparent;
|
|
_parent = parent;
|
|
BackColor = Color.FromArgb(1, 1, 1);
|
|
TransparencyKey = Color.FromArgb(1, 1, 1);
|
|
FormBorderStyle = FormBorderStyle.None;
|
|
ControlBox = false;
|
|
ShowInTaskbar = false;
|
|
StartPosition = FormStartPosition.Manual;
|
|
AutoScaleMode = AutoScaleMode.None;
|
|
Show(parent);
|
|
parent.ParentForm.LocationChanged += Cover_LocationChanged;
|
|
parent.LocationChanged += Cover_LocationChanged;
|
|
parent.VisibleChanged += Cover_LocationChanged;
|
|
parent.ClientSizeChanged += Cover_ClientSizeChanged;
|
|
// Disable Aero transitions, the plexiglass gets too visible
|
|
if (Environment.OSVersion.Version.Major >= 6)
|
|
{
|
|
var value = 1;
|
|
DwmSetWindowAttribute(parent.ParentForm.Handle, DwmwaTransitionsForcedisabled, ref value, 4);
|
|
}
|
|
Location = parent.PointToScreen(Point.Empty);
|
|
ClientSize = parent.ClientSize;
|
|
}
|
|
|
|
public sealed override Color BackColor
|
|
{
|
|
get { return base.BackColor; }
|
|
set { base.BackColor = value; }
|
|
}
|
|
|
|
private void Cover_LocationChanged(object sender, EventArgs e)
|
|
{
|
|
Location = _parent.PointToScreen(Point.Empty);
|
|
}
|
|
|
|
private void Cover_ClientSizeChanged(object sender, EventArgs e)
|
|
{
|
|
ClientSize = _parent.ClientSize;
|
|
}
|
|
|
|
protected override void OnFormClosing(FormClosingEventArgs e)
|
|
{
|
|
// Restore owner
|
|
Owner.LocationChanged -= Cover_LocationChanged;
|
|
Owner.ClientSizeChanged -= Cover_ClientSizeChanged;
|
|
if (!Owner.IsDisposed && Environment.OSVersion.Version.Major >= 6)
|
|
{
|
|
var value = 1;
|
|
DwmSetWindowAttribute(Owner.Handle, DwmwaTransitionsForcedisabled, ref value, 4);
|
|
}
|
|
base.OnFormClosing(e);
|
|
}
|
|
|
|
protected override void OnActivated(EventArgs e)
|
|
{
|
|
// Always keep the owner activated instead
|
|
BeginInvoke(new Action(() => Owner.Activate()));
|
|
}
|
|
|
|
[DllImport("dwmapi.dll")]
|
|
private static extern int DwmSetWindowAttribute(IntPtr hWnd, int attr, ref int value, int attrLen);
|
|
|
|
private void Graphic_DoubleClick(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void OverlayForm_DoubleClick(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|