Tôi đang làm việc trên một cái gì đó mà sẽ yêu cầu giám sát của nhiều hình thức. Từ bên ngoài biểu mẫu và không đặt bất kỳ mã nào bên trong biểu mẫu, tôi cần phải bằng cách nào đó nắm bắt các sự kiện từ các biểu mẫu này, rất có thể dưới dạng thông báo của cửa sổ. Nhưng làm thế nào bạn sẽ chụp được các thông điệp của Windows từ bên ngoài lớp mà nó liên quan đến?Tôi làm cách nào để nắm bắt các sự kiện nhất định của biểu mẫu từ bên ngoài biểu mẫu?
Dự án của tôi có đối tượng bao bọc từng biểu mẫu mà nó đang theo dõi và tôi cho rằng việc xử lý này sẽ xuất hiện trong đối tượng này. Về cơ bản, khi tôi tạo một biểu mẫu tôi muốn theo dõi, tôi tạo một đối tượng tương ứng mà lần lượt được thêm vào danh sách tất cả các biểu mẫu đã tạo. Quan trọng nhất, khi hình thức đó được đóng lại, tôi phải biết để tôi có thể loại bỏ đối tượng bao bọc của biểu mẫu này khỏi danh sách.
Những sự kiện này bao gồm:
- Minimize
- Tối đa hóa
- Restore
- Đóng
- Focus in/out
Những gì tôi KHÔNG muốn:
- Bất kỳ mã bên dưới mọi hình thức, đơn vị hình thức xử lý này
- Thừa hưởng các hình thức từ bất kỳ hình thức cơ bản tùy chỉnh
- Sử dụng các sự kiện của hình thức như
OnClose
vì họ sẽ được sử dụng cho các mục đích khác
gì tÔI muốn:
- Xử lý thông điệp cửa sổ cho những sự kiện này
- Bất cứ lời khuyên về cách ge thông điệp t cửa sổ từ bên ngoài lớp
- Những thông điệp cửa sổ tôi cần phải lắng nghe cho
Câu hỏi tái bằng văn bản với cùng một thông tin nhưng cách tiếp cận khác nhau
Tôi không chắc lắm nhưng tôi nghĩ Bạn cũng có thể xem xét việc tiêm mã được thực hiện bởi một số khung công tác AOP. – menjaraz
Bạn biết rằng bạn có thể thay thế các sự kiện biểu mẫu bằng trình xử lý của riêng bạn nhưng giữ lại giá trị cũ và sau đó gọi trình xử lý cũ, từ trình xử lý thay thế của bạn, phải không? Đó là đơn giản hơn so với "mã tiêm" thực sự hoặc "hooking" thực sự. Điều này rất giống với cách "các trình xử lý ngắt" hoạt động trong hầu hết các hệ điều hành. Chúng tôi gọi nó là "thay thế vectơ". –
@WarrenP Tôi biết điều này, và có lẽ sẽ làm điều đó nếu David không đề cập đến một phương pháp rõ ràng hơn. Nhưng chiến lược này (ít nhất là theo ý kiến của tôi) có lẽ là 90-95% hiệu quả (tôi có thể thấy trước một số vấn đề sẽ làm rối loạn tình trạng này). Giải pháp của David hiệu quả 100%. –