我想通过单击Ctrl按钮并移动鼠标滚轮时禁用缩放来覆盖控件中的某些功能。这在32位进程上工作正常,但在64位进程上,我将IntPtr转换为Int32导致溢出。我该如何对其进行重新设计,使其在32位和64位进程中都能正常工作?我不能在IntPtrs中使用按位运算符。
应该将我的常量设置为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);
}
答案 0 :(得分:1)
使用已正确解包参数的现有.NET回调。在WinForms中有Control.OnMouseWheel
method。可通过ModifierKeys
property使用修改键。
protected override void OnMouseWheel(MouseEventArgs m)
{
if ((ModifierKeys & Keys.Control) != 0)
{
((HandledMouseEventArgs)m).Handled = true;
// Ignore CTRL+WHEEL
return;
}
base.OnMouseWheel(m);
}