问题:是否有办法通过对表单产生影响来始终让点击成为焦点?
背景:使用我的(C#win窗体)应用程序时,我可以将窗体hover并获取阴影和边框,以指示鼠标的位置。
点击例如一个菜单条目(文件)表单获得焦点,但文件菜单不会得到点击。 这需要额外的点击。
对于表单上的普通button,只需点击一下即可。
这可以通过在点击发生之前设置焦点来解决。 Se代码:
class ToolStripEx : System.Windows.Forms.ToolStrip { protected override void WndProc(ref Message m) { // WM_MOUSEACTIVATE = 0x21 if (m.Msg == 0x21 && this.CanFocus && !this.Focused) { this.Focus(); } base.WndProc(ref m); } }
这种方法也适用于MenuStrip
我发现了一些有用的文章 – 尤其是里克·布鲁斯特(Rick Brewster)的一篇 。 解决方案在于覆盖ToolStrip(或MenuStrip)的WndProc方法:
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; } }