IntPtr.ToInt32 with Bitwise operator 在 64 位进程上导致 OverflowException

IntPtr.ToInt32 with Bitwise operator causes OverflowException on 64-bit process

我想通过在单击 Ctrl 按钮和移动鼠标滚轮时禁用缩放来覆盖控件中的某些功能。这在 32 位进程上工作正常,但在 64 位进程上,我通过将 IntPtr 转换为 Int32 得到溢出。我如何修改它以使其在 32 位和 64 位进程上都能工作?我不能将按位运算符与 IntPtr 一起使用。

是否应该将我的常量设置为 long 然后执行 IntPtr.ToInt64()?这在 32 位和 64 位进程上都能正常工作吗?如果我进行更改,我需要担心什么?

private const int WM_MOUSEWHEEL = 0x020A;
private const int MK_CONTROL = 0x0008;
//Prevent CTRL+Mouse Wheel from Zooming
protected override void WndProc(ref System.Windows.Forms.Message m)
{
    if (m.Msg == WM_MOUSEWHEEL)
    {
       if ((m.WParam.ToInt32() & MK_CONTROL) != 0)
       {
            // Ignore CTRL+WHEEL
            return;
       }
    }

    base.WndProc(ref m);
}

使用已经正确解包参数的现有 .NET 回调。在 WinForms 中有 Control.OnMouseWheel method. The modifier keys are available via the ModifierKeys property.

protected override void OnMouseWheel(MouseEventArgs m)
{
    if ((ModifierKeys & Keys.Control) != 0)
    {
        ((HandledMouseEventArgs)m).Handled = true;
        // Ignore CTRL+WHEEL
        return;
    }

    base.OnMouseWheel(m);
}