【发布时间】:2010-11-08 17:09:18
【问题描述】:
在这个问题How to detect mouse wheel tilt 中发布并接受了一个答案,其中显示了所需的代码。
我已经在我的应用程序现有的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% 确定不是硬件有问题,因为其他应用程序正在接收消息。 p>
更新
我在我的应用程序中添加了一个带有滚动条的多行文本框,它接收鼠标滚轮倾斜消息并对其进行操作。所以我需要做的就是找到它的代码;)
更新
SuperUser 上的This question 可能与此有关 - 我会留意那里的答案。
【问题讨论】:
-
您是否在表单中使用了 WndProc?
-
@Daniel - 是的,我应该在问题中明确说明。
-
@skaffman - 不确定硬件标签。我 99% 确定鼠标工作正常 - 请参阅我关于其他处理倾斜的应用程序的说明。
标签: c# winforms mousewheel tilt