mirror of
https://github.com/colhountech/DarkUI.Net5.git
synced 2025-07-24 04:11:33 +03:00
Added translucent form for splitters
This commit is contained in:
parent
12f227f542
commit
3c71944591
@ -124,6 +124,9 @@
|
|||||||
<Compile Include="Forms\DarkMessageBox.Designer.cs">
|
<Compile Include="Forms\DarkMessageBox.Designer.cs">
|
||||||
<DependentUpon>DarkMessageBox.cs</DependentUpon>
|
<DependentUpon>DarkMessageBox.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Forms\DarkTranslucentForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="Icons\MenuIcons.Designer.cs">
|
<Compile Include="Icons\MenuIcons.Designer.cs">
|
||||||
<AutoGen>True</AutoGen>
|
<AutoGen>True</AutoGen>
|
||||||
<DesignTime>True</DesignTime>
|
<DesignTime>True</DesignTime>
|
||||||
|
@ -9,6 +9,7 @@ namespace DarkUI
|
|||||||
|
|
||||||
private Control _control;
|
private Control _control;
|
||||||
private DarkSplitterType _splitterType;
|
private DarkSplitterType _splitterType;
|
||||||
|
private DarkTranslucentForm _overlayForm;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -26,6 +27,7 @@ namespace DarkUI
|
|||||||
{
|
{
|
||||||
_control = control;
|
_control = control;
|
||||||
_splitterType = splitterType;
|
_splitterType = splitterType;
|
||||||
|
_overlayForm = new DarkTranslucentForm(Color.Black);
|
||||||
|
|
||||||
switch (_splitterType)
|
switch (_splitterType)
|
||||||
{
|
{
|
||||||
@ -44,6 +46,41 @@ namespace DarkUI
|
|||||||
|
|
||||||
#region Method Region
|
#region Method Region
|
||||||
|
|
||||||
|
public void ShowOverlay()
|
||||||
|
{
|
||||||
|
_overlayForm.Show();
|
||||||
|
UpdateOverlay(new Point(0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void HideOverlay()
|
||||||
|
{
|
||||||
|
_overlayForm.Hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateOverlay(Point difference)
|
||||||
|
{
|
||||||
|
var bounds = _control.RectangleToScreen(Bounds);
|
||||||
|
|
||||||
|
switch (_splitterType)
|
||||||
|
{
|
||||||
|
case DarkSplitterType.Left:
|
||||||
|
bounds.Location = new Point(bounds.Location.X - difference.X, bounds.Location.Y);
|
||||||
|
break;
|
||||||
|
case DarkSplitterType.Right:
|
||||||
|
bounds.Location = new Point(bounds.Location.X - difference.X, bounds.Location.Y);
|
||||||
|
break;
|
||||||
|
case DarkSplitterType.Top:
|
||||||
|
bounds.Location = new Point(bounds.Location.X, bounds.Location.Y - difference.Y);
|
||||||
|
break;
|
||||||
|
case DarkSplitterType.Bottom:
|
||||||
|
bounds.Location = new Point(bounds.Location.X, bounds.Location.Y - difference.Y);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
_overlayForm.Location = bounds.Location;
|
||||||
|
_overlayForm.Size = bounds.Size;
|
||||||
|
}
|
||||||
|
|
||||||
public void Move(Point difference)
|
public void Move(Point difference)
|
||||||
{
|
{
|
||||||
switch (_splitterType)
|
switch (_splitterType)
|
||||||
|
30
DarkUI/Forms/DarkTranslucentForm.cs
Normal file
30
DarkUI/Forms/DarkTranslucentForm.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
using System.Drawing;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace DarkUI
|
||||||
|
{
|
||||||
|
internal class DarkTranslucentForm : Form
|
||||||
|
{
|
||||||
|
#region Property Region
|
||||||
|
|
||||||
|
protected override bool ShowWithoutActivation
|
||||||
|
{
|
||||||
|
get { return true; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor Region
|
||||||
|
|
||||||
|
public DarkTranslucentForm(Color backColor, double opacity = 0.6)
|
||||||
|
{
|
||||||
|
FormBorderStyle = FormBorderStyle.None;
|
||||||
|
ShowInTaskbar = false;
|
||||||
|
AllowTransparency = true;
|
||||||
|
Opacity = opacity;
|
||||||
|
BackColor = backColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
@ -10,6 +10,7 @@ namespace DarkUI
|
|||||||
|
|
||||||
private DarkDockPanel _dockPanel;
|
private DarkDockPanel _dockPanel;
|
||||||
|
|
||||||
|
private Timer _dragTimer;
|
||||||
private bool _isDragging;
|
private bool _isDragging;
|
||||||
private Point _initialContact;
|
private Point _initialContact;
|
||||||
private DarkDockSplitter _activeSplitter;
|
private DarkDockSplitter _activeSplitter;
|
||||||
@ -21,6 +22,10 @@ namespace DarkUI
|
|||||||
public DarkDockResizeFilter(DarkDockPanel dockPanel)
|
public DarkDockResizeFilter(DarkDockPanel dockPanel)
|
||||||
{
|
{
|
||||||
_dockPanel = dockPanel;
|
_dockPanel = dockPanel;
|
||||||
|
|
||||||
|
_dragTimer = new Timer();
|
||||||
|
_dragTimer.Interval = 1;
|
||||||
|
_dragTimer.Tick += DragTimer_Tick;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -100,22 +105,45 @@ namespace DarkUI
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Event Handler Region
|
||||||
|
|
||||||
|
private void DragTimer_Tick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (_dockPanel.MouseButtonState != MouseButtons.Left)
|
||||||
|
_isDragging = false;
|
||||||
|
|
||||||
|
if (!_isDragging)
|
||||||
|
{
|
||||||
|
_activeSplitter.HideOverlay();
|
||||||
|
_dragTimer.Stop();
|
||||||
|
ResetCursor();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var difference = new Point(_initialContact.X - Cursor.Position.X, _initialContact.Y - Cursor.Position.Y);
|
||||||
|
_activeSplitter.UpdateOverlay(difference);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Method Region
|
#region Method Region
|
||||||
|
|
||||||
private void StartDrag(DarkDockSplitter splitter)
|
private void StartDrag(DarkDockSplitter splitter)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Start drag");
|
|
||||||
|
|
||||||
_activeSplitter = splitter;
|
_activeSplitter = splitter;
|
||||||
Cursor.Current = _activeSplitter.ResizeCursor;
|
Cursor.Current = _activeSplitter.ResizeCursor;
|
||||||
|
|
||||||
_initialContact = Cursor.Position;
|
_initialContact = Cursor.Position;
|
||||||
_isDragging = true;
|
_isDragging = true;
|
||||||
|
|
||||||
|
_activeSplitter.ShowOverlay();
|
||||||
|
_dragTimer.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StopDrag()
|
private void StopDrag()
|
||||||
{
|
{
|
||||||
Console.WriteLine("Stop drag");
|
_activeSplitter.HideOverlay();
|
||||||
|
_dragTimer.Stop();
|
||||||
|
|
||||||
var difference = new Point(_initialContact.X - Cursor.Position.X, _initialContact.Y - Cursor.Position.Y);
|
var difference = new Point(_initialContact.X - Cursor.Position.X, _initialContact.Y - Cursor.Position.Y);
|
||||||
_activeSplitter.Move(difference);
|
_activeSplitter.Move(difference);
|
||||||
|
@ -4,12 +4,12 @@ using System.Runtime.InteropServices;
|
|||||||
|
|
||||||
namespace DarkUI
|
namespace DarkUI
|
||||||
{
|
{
|
||||||
public sealed class Native
|
internal sealed class Native
|
||||||
{
|
{
|
||||||
[DllImport("user32.dll")]
|
[DllImport("user32.dll")]
|
||||||
public static extern IntPtr WindowFromPoint(Point point);
|
internal static extern IntPtr WindowFromPoint(Point point);
|
||||||
|
|
||||||
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
||||||
public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam);
|
internal static extern IntPtr SendMessage(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ namespace DarkUI
|
|||||||
/// Defined in winuser.h from Windows SDK v6.1
|
/// Defined in winuser.h from Windows SDK v6.1
|
||||||
/// Documentation pulled from MSDN.
|
/// Documentation pulled from MSDN.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public enum WM : uint
|
internal enum WM : uint
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore.
|
/// The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user