, . "" , , . , , GroupBox.
, , GroupBox . , , MouseMove.
, , ... , VB.NET, #, , , , :
<p > . , , , ... .
: , , WM_MOUSEMOVE... , VS 2008 Pro.
public class MyGroupBox : System.Windows.Forms.GroupBox
{
private SubClass sc;
private const int WM_MOUSEMOVE = 0x200;
public delegate void MyMouseMoveEventHandler(object sender, System.EventArgs e);
public event MyMouseMoveEventHandler MyMouseMove;
public MyGroupBox()
: base()
{
sc = new SubClass(this.Handle, true);
sc.SubClassedWndProc += new SubClass.SubClassWndProcEventHandler(sc_SubClassedWndProc);
}
protected override void Dispose(bool disposing)
{
if (sc.SubClassed)
{
sc.SubClassedWndProc -= new SubClass.SubClassWndProcEventHandler(sc_SubClassedWndProc);
sc.SubClassed = false;
}
base.Dispose(disposing);
}
private void OnMyMouseMove()
{
if (this.MyMouseMove != null) this.MyMouseMove(this, System.EventArgs.Empty);
}
void sc_SubClassedWndProc(ref Message m)
{
if (m.Msg == WM_MOUSEMOVE) this.OnMyMouseMove();
}
}
#region SubClass Classing Handler Class
public class SubClass : System.Windows.Forms.NativeWindow
{
public delegate void
SubClassWndProcEventHandler(ref System.Windows.Forms.Message m);
public event SubClassWndProcEventHandler SubClassedWndProc;
private bool IsSubClassed = false;
public SubClass(IntPtr Handle, bool _SubClass)
{
base.AssignHandle(Handle);
this.IsSubClassed = _SubClass;
}
public bool SubClassed
{
get { return this.IsSubClassed; }
set { this.IsSubClassed = value; }
}
protected override void WndProc(ref Message m)
{
if (this.IsSubClassed)
{
OnSubClassedWndProc(ref m);
}
base.WndProc(ref m);
}
#region HiWord Message Cracker
public int HiWord(int Number)
{
return ((Number >> 16) & 0xffff);
}
#endregion
#region LoWord Message Cracker
public int LoWord(int Number)
{
return (Number & 0xffff);
}
#endregion
#region MakeLong Message Cracker
public int MakeLong(int LoWord, int HiWord)
{
return (HiWord << 16) | (LoWord & 0xffff);
}
#endregion
#region MakeLParam Message Cracker
public IntPtr MakeLParam(int LoWord, int HiWord)
{
return (IntPtr)((HiWord << 16) | (LoWord & 0xffff));
}
#endregion
private void OnSubClassedWndProc(ref Message m)
{
if (SubClassedWndProc != null)
{
this.SubClassedWndProc(ref m);
}
}
}
#endregion
- .
- ,
groupBox1 - , :
System.Windows.Forms.GroupBox groupBox1;
WindowsApplication.MyGroupBox groupBox1;
InitializeComponent() GroupBox :this.groupBox1 = new WindowsApplication.MyGroupBox();
- .
- ,
MyMouseMove . - :
private void groupBox1_MyMouseMove(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("MyMouseMove!");
}
Launch the application and each time you move the mouse inside the group window, you will see the output "MyMouseMove!".
Hope this gives you a hint, Best regards, Tom.