Just a quick snippet:
public class FormWithWmMoving :
Form
{
private const int WM_MOVING = 0x0216;
private static readonly object EVENT_MOVING = new object();
public event EventHandler Moving
{
add { Events.AddHandler(EVENT_MOVING, value); }
remove { Events.RemoveHandler(EVENT_MOVING, value); }
}
public class MovingEventArgs : EventArgs
{
private readonly Rectangle _rectangle;
public MovingEventArgs(
Rectangle rectangle)
{
_rectangle = rectangle;
}
public Rectangle Rectangle
{
get { return _rectangle; }
}
}
protected virtual void OnMoving(MovingEventArgs e)
{
var h = (EventHandler)Events[EVENT_MOVING];
if (h != null)
{
h(this, e);
}
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_MOVING)
{
var r = (Win32NativeMethods.RECT)Marshal.PtrToStructure(m.LParam, typeof(Win32NativeMethods.RECT));
var rectangle = new Rectangle(r.left, r.top, r.Bounds.Width, r.Bounds.Height);
var args = new MovingEventArgs(rectangle);
OnMoving(args);
}
base.WndProc(ref m);
}
}
Hope this is helpful someday to me or others.