58 lines
1.4 KiB
C#

using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace DevComponents.Tree.Interop
{
/// <summary>
/// Provides WinApi functions to rest of the application.
/// </summary>
internal class WinApi
{
#region API Calls Declaration
[DllImport("user32")]
private static extern bool TrackMouseEvent(ref TRACKMOUSEEVENT tme);
[StructLayout(LayoutKind.Sequential)]
private struct TRACKMOUSEEVENT
{
public int cbSize;
public uint dwFlags;
public int dwHoverTime;
public int hwndTrack;
}
// Track Mouse Event Flags
private const uint
TME_HOVER=0x00000001,
TME_LEAVE=0x00000002,
TME_NONCLIENT=0x00000010,
TME_QUERY=0x40000000,
TME_CANCEL=0x80000000,
HOVER_DEFAULT=0xFFFFFFFF;
#endregion
#region Functions
/// <summary>
/// Resets Hoover timer for specified control.
/// </summary>
public static void ResetHover(System.Windows.Forms.Control c)
{
if (c==null || !c.IsHandleCreated)
return;
// We need to reset hover thing since it is fired only first time mouse hovers inside the window and we need it for each of our items
TRACKMOUSEEVENT tme = new TRACKMOUSEEVENT();
tme.dwFlags = TME_QUERY;
tme.hwndTrack = (int)c.Handle;
tme.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(tme);
TrackMouseEvent(ref tme);
tme.dwFlags = tme.dwFlags | TME_HOVER;
TrackMouseEvent(ref tme);
}
#endregion
}
}