gì bạn mô tả âm thanh như bạn muốn sao chép các chức năng của ví dụ Microsoft Outlook, mà bạn không cần phải thực sự nhấp để tập trung điều khiển để sử dụng chuột bánh xe trên đó.
Đây là vấn đề tương đối nâng cao để giải quyết: nó liên quan đến việc triển khai giao diện IMessageFilter
của biểu mẫu có chứa, tìm kiếm sự kiện WM_MOUSEWHEEL
và hướng chúng đến điều khiển chuột di chuột qua.
Dưới đây là một ví dụ (từ here):
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsApplication1 {
public partial class Form1 : Form, IMessageFilter {
public Form1() {
InitializeComponent();
Application.AddMessageFilter(this);
}
public bool PreFilterMessage(ref Message m) {
if (m.Msg == 0x20a) {
// WM_MOUSEWHEEL, find the control at screen position m.LParam
Point pos = new Point(m.LParam.ToInt32());
IntPtr hWnd = WindowFromPoint(pos);
if (hWnd != IntPtr.Zero && hWnd != m.HWnd && Control.FromHandle(hWnd) != null) {
SendMessage(hWnd, m.Msg, m.WParam, m.LParam);
return true;
}
}
return false;
}
// P/Invoke declarations
[DllImport("user32.dll")]
private static extern IntPtr WindowFromPoint(Point pt);
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
}
}
Lưu ý rằng mã này đang hoạt động cho tất cả các hình thức trong ứng dụng của bạn, không chỉ là hình thức chính.
Nguồn
2011-01-22 19:11:36
Cảm ơn, đã nhìn thấy nó ở đó nhưng tôi không chắc chắn tại sao việc xử lý WM_MOUSEWHEEL không phải là rất mong muốn. – n0ter
Xin chào, đó là mã của tôi! Không chắc chắn nếu yêu cầu phân bổ là thích hợp ở đây, nó nên được. –
Bình luận của poster là "Windows" xử lý các sự kiện MouseWheel không phải là rất mong muốn ", có nghĩa là việc thực thi Windows mặc định của bánh xe chuột có nghĩa là nó gửi các sự kiện đến điều khiển bằng tiêu điểm, chứ không phải điều khiển chuột hơn, như hầu hết mọi người mong đợi hoặc mong muốn. –