• Thứ Tư, 17/05/2006 09:51 (GMT+7)

    Lập trình sự kiện

    Câu hỏi :
    1. Sự kiện WM_LBUTTONUP là thả chuột trái, WM_LBUTONDOWN là nhấn chuột trái... Vậy có cách nào để hủy sự kiện nhấn và thả chuột không?
    2. Có thể tìm cuốn "Advanced Windows: The Developers Guide to the Win32 API for Windows" ở đâu?

    Trả lời :
    1. Theo cơ chế xử lý sự kiện I/O của Windows thì mỗi khi có 1 sự kiện xảy ra trên 1 thiết bị I/O nào đó (bàn phím, chuột,...), sự kiện này sẽ được gửi từ thiết bị tới Windows, rồi Windows mới gửi tiếp tới cửa sổ ứng dụng đang "focus" để ứng dụng đó xử lý. Trên dây chuyền gửi sự kiện này, Windows cho phép người lập trình viết hàm xử lý theo yêu cầu riêng của mình rồi câu móc vào Windows để Windows gửi sự kiện về hàm này thay vì gửi trực tiếp về ứng dụng. Nhiệm vụ của hàm câu móc này là xử lý sự kiện theo yêu cầu riêng của mình, thí dụ chặn bỏ bớt, thêm vào hay hiệu chỉnh thuộc tính của sự kiện đó trước khi gửi về ứng dụng. Như vậy, để bỏ hay hủy sự kiện nào đó của chuột (hay của thiết bị khác), bạn hãy viết 1 hàm hook, câu móc hàm này vào Windows (bằng cách gọi hàm SetWindowHook), code trong hàm hook của bạn sẽ kiểm tra xem sự kiện tiếp nhận là gì, nếu đúng là sự kiện mình muốn lọc bỏ thì lọc bỏ, nếu không cứ để nguyên và gửi về ứng dụng.

    Bạn nên tham khảo tài liệu liên quan đến "Windows Hook" trong CD MSDN của Microsoft để biết chi tiết cụ thể về cơ chế hook của Windows cùng các đoạn code mẫu để thực hiện hook vào Windows để xử lý sự kiện theo yêu cầu.

    2. Bạn có thể đến phòng photo của Khoa CNTT trường ĐHBK TP.HCM để nhờ copy cuốn "Advanced Windows : The Developers Guide to the Win32 API for Windows".
    Chuyên mục: Lập trình