Tôi có câu hỏi cơ bản về việc sử dụng WndProc
trong đơn đăng ký biểu mẫu của tôi. Tôi muốn biết việc sử dụng phương thức WndProc
là gì khi tôi có sẵn các sự kiện biểu mẫu. Trong trường hợp nào tôi cần tạo tin nhắn tùy chỉnh? MSDN cho biết rằng nó chỉ được sử dụng để xử lý các tin nhắn Windows.Tại sao tôi nên sử dụng WndProc khi tôi có sự kiện biểu mẫu?
Trả lời
WndProc là cách WinForms cung cấp trình bao bọc xung quanh thông điệp cửa sổ Win32 dễ sử dụng hơn và hiểu lớp .NET.
Thông thường nó hoạt động theo cách sau. Lấy ví dụ về thông báo cửa sổ WM_LBUTTONDOWN. Windows.Forms.Control.WndProc sẽ chặn thông báo này và trích xuất thông tin liên quan từ WPARAM và LPARAM của thông báo. Sau đó, nó gọi phương thức ảo được bảo vệ OnMouseDown với các thông tin liên quan được đóng gói độc đáo vào một MouseEventArgs. Việc triển khai sau đó sẽ kích hoạt sự kiện MouseDown ở cuối quá trình xử lý riêng của nó.
Vì vậy, việc xử lý một tập hợp các phương thức OnXXXX/XXXX sẽ dễ dàng hơn nhiều, sau đó chặn trực tiếp thông báo cửa sổ.
Nhưng nếu thông báo cửa sổ bạn quan tâm không được xử lý bởi WinForms thì sao? Trong trường hợp đó, bạn có thể ghi đè lên WndProc và xử lý nó trực tiếp. Một cách sử dụng khác là đánh chặn một tin nhắn và sau đó loại bỏ nó trước khi bản thân điều khiển có cơ hội xử lý nó. Hoặc bạn có thể tạo tin nhắn tùy chỉnh để gửi giữa các điều khiển trong ứng dụng của bạn. Cũng hữu ích cho việc gỡ lỗi khi bạn muốn xem mọi thông báo điều khiển của bạn nhận được, bạn chỉ cần thêm đăng nhập vào một nơi.
.NET là trình bao bọc xung quanh Win32. Nó không phơi bày 100% các phương thức, sự kiện và thuộc tính của mọi thứ trong Windows.
Vì vậy, đôi khi bạn cần phải đi dưới trang bìa.
Tuy nhiên, đó không phải là điều bạn đang tìm kiếm - khi sự cố của bạn yêu cầu, một công cụ tìm kiếm Stack Exchange thường sẽ cho bạn biết.
- 1. Tại sao nên sử dụng Sự kiện?
- 2. (Tại sao) tôi nên sử dụng obfuscation?
- 3. Tại sao tôi nên sử dụng Socket.io?
- 4. Tại sao tôi nên sử dụng glBindAttribLocation?
- 5. Tại sao tôi nên sử dụng LoadBalancerProbe thay vì đăng ký vào sự kiện RoleEnvironment.StatusCheck?
- 6. Tôi có nên sử dụng FxCop và tại sao không?
- 7. Tôi có nên khóa 'sự kiện' không?
- 8. Tại sao tôi nên sử dụng 'áp dụng' trong Clojure?
- 9. Tại sao tôi nên sử dụng Doctrine trên Zend_Db?
- 10. EF4.1 POCO: Tại sao tôi nên sử dụng ICollection
- 11. Tại sao tôi nên sử dụng std :: async?
- 12. Tại sao không nên sử dụng attach() trong R, và tôi nên sử dụng cái gì?
- 13. Khi nào/Tại sao tôi không nên sử dụng IsReference = true trên DataContracts của tôi?
- 14. Tại sao nên sử dụng mã hóa CJSON khi chúng tôi có json_encode
- 15. Tại sao tôi nên sử dụng lệnh GO trong Sybase?
- 16. Tại sao tôi nên sử dụng Spring Android?
- 17. Khi nào tôi nên sử dụng "nguyên mẫu" trong JavaScript
- 18. include() Tại sao tôi không nên sử dụng?
- 19. Tại sao lại sử dụng sự kiện cho những gì tôi có thể làm với Đại biểu?
- 20. Tại sao tôi nên sử dụng WCF với MVC?
- 21. Tại sao tôi nên sử dụng lối ra chọn?
- 22. Tại sao tôi nên sử dụng @ Url.Content ("~/blah-blah-blah")?
- 23. Tại sao tôi không nên sử dụng UNIVERSAL :: isa?
- 24. Tại sao tôi KHÔNG nên sử dụng GAC?
- 25. Tại sao tôi nên tránh sử dụng Dispatcher?
- 26. Tại sao tôi không nên sử dụng System.out.println() trong android
- 27. Tại sao tôi không nên sử dụng Tự động?
- 28. Tại sao tôi nên sử dụng io_service :: work?
- 29. Khi nào tôi nên sử dụng AQL?
- 30. Tại sao tôi nên sử dụng mẫu Đơn vị công việc trên đầu phiên NHibernate?