//credit: http://blogs.msdn.com/b/rickbrew/archive/2006/01/09/511003.aspx using System; using System.Windows.Forms; using System.Runtime.InteropServices; /// /// This class adds on to the functionality provided in System.Windows.Forms.ToolStrip. /// public class ToolStripEx : ToolStrip { private bool clickThrough = true; /// /// Gets or sets whether the ToolStripEx honors item clicks when its containing form does /// not have input focus. /// public bool ClickThrough { get { return this.clickThrough; } set { this.clickThrough = value; } } protected override void WndProc(ref Message m) { base.WndProc(ref m); if (this.clickThrough && m.Msg == NativeConstants.WM_MOUSEACTIVATE && m.Result == (IntPtr)NativeConstants.MA_ACTIVATEANDEAT) { m.Result = (IntPtr)NativeConstants.MA_ACTIVATE; } } } /// /// This class adds on to the functionality provided in System.Windows.Forms.MenuStrip. /// public class MenuStripEx : MenuStrip { private bool clickThrough = true; /// /// Gets or sets whether the ToolStripEx honors item clicks when its containing form does /// not have input focus. /// public bool ClickThrough { get { return this.clickThrough; } set { this.clickThrough = value; } } protected override void WndProc(ref Message m) { base.WndProc(ref m); if (this.clickThrough && m.Msg == NativeConstants.WM_MOUSEACTIVATE && m.Result == (IntPtr)NativeConstants.MA_ACTIVATEANDEAT) { m.Result = (IntPtr)NativeConstants.MA_ACTIVATE; } } } internal sealed class NativeConstants { private NativeConstants(){} internal const uint WM_MOUSEACTIVATE = 0x21; internal const uint MA_ACTIVATE = 1; internal const uint MA_ACTIVATEANDEAT = 2; internal const uint MA_NOACTIVATE = 3; internal const uint MA_NOACTIVATEANDEAT = 4; }