有没有办法可以从文本框中取消WM_MOUSELEAVE
消息?
我有另一个控件直接在它上面(我正试图获得Windows绘制的边框)。我在该控件的WM_MOUSEMOVE
事件中手动调用MouseMove
,以使文本框周围的Aero蓝色边框亮起。使用Spy ++,即使我仍然在它的范围内,我看到它正在触发WM_MOUSELEAVE
。这导致蓝色边框消失/重新出现在闪烁中。
编辑我尝试了@Jeroen的答案,它减少了闪烁,但我仍然无法保持亮度或者它太长了。
if (m.Msg == (int)Win32Api.WindowsMessages.MouseLeave)
{
var mousePosition = PointToClient(MousePosition);
if (mousePosition.X < 0 || mousePosition.X > Width ||
mousePosition.Y < 0 || mousePosition.Y > Height)
base.WndProc(ref m);
return;
}
base.WndProc(ref m);
答案 0 :(得分:1)
也许这就是你要找的东西。它需要您将TextBox
定义替换为tb
,但也许有更优雅的方式。
public class tb : TextBox
{
private const int WM_MOUSELEAVE = 0x02A3;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_MOUSELEAVE)
{
// not passing the message on, so does nothing.
// handle it yourself here or leave empty.
}
else
{
// otherwise let windows handle the message
base.WndProc(ref m);
}
}
}