在这个问题如何检测鼠标滚轮倾斜中,发布并接受了显示所需代码的答案。
我已经在我的应用程序的现有WndProc
方法中实现了该代码(该方法适用于我需要捕获的其他消息),但它不起作用。我已经检查过了,WndProc
似乎根本没有收到任何消息,更不用说0x020E
当我倾斜鼠标滚轮时的值了。
我在安装了 .NET 3.5 SP1 的 Windows XP SP3(完全修补)上使用 Microsoft Wireless Laser 5000。
我已将 Intellipoint 驱动程序更新到 2009 年 8 月 5 日的版本 7.0.258.0。
其他应用程序(例如 Visual Studio、Word、paint.NET)正在获取并作用于倾斜的鼠标滚轮,所以它一定是我的应用程序,但我看不出我做错了什么。
为了完整起见,这是我的代码:
protected override void WndProc(ref Message m)
{
Trace.WriteLine(string.Format("0x{0:X4}", m.Msg));
switch(m.Msg)
{
case WM_EXITSIZEMOVE:
Opacity = 1.0;
break;
case WM_SYSCOMMAND:
int command = m.WParam.ToInt32() & 0xfff0;
if (command == SC_MINIMIZE && this.minimizeToTray)
{
MinimizeToTray();
}
break;
case WM_MOUSEHWHEEL:
// Handle tilting here
break;
}
base.WndProc(ref m);
}
该Trace.WriteLine
呼叫是尝试检查倾斜消息是否通过。正在接收WM_EXITSIZEMOVE
其他消息。WM_SYSCOMMAND
消息定义为:
private const int WM_EXITSIZEMOVE = 0x0232;
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MINIMIZE = 0xF020;
private const int WM_MOUSEHWHEEL = 0x020E;
注意 我删除了 [hardware] 标签,因为我 99% 确定不是硬件有问题,因为其他应用程序正在接收消息。
更新
我在我的应用程序中添加了一个带有滚动条的多行文本框,它接收鼠标滚轮倾斜消息并对其进行操作。所以我需要做的就是找到它的代码;)
更新
SuperUser 上的这个问题可能与此有关 - 我会密切关注那里的答案。