2010-05-20 24 views

Trả lời

2

Có bạn chỉ có thể xác định thông điệp của riêng bạn như một hằng số lớn hơn WM_USER:

#define WM_MY_MESSAGE (WM_USER + 1000) 

Sau đó, bạn có thể sử dụng ON_COMMAND/ON_NOTIFY macro bình thường.

Sự cố với thư do người dùng xác định như thế này là các chương trình khác có thể sử dụng cùng một hằng số như bạn. Và bạn có thể nhận được một tin nhắn từ người khác cho điều sai trái.

Để khắc phục sự cố này, bạn sẽ sử dụng thông báo đã đăng ký với RegisterWindowMessage.

Có tóm tắt tốt về số user defined messages/registered messages tại đây.

+2

Lưu ý rằng tất nhiên các chương trình khác không được gửi thư cho bạn với phạm vi 'WM_USER-0x7FFF'. Heck, họ thậm chí không phải được gửi _within_ một chương trình. Vì bạn có 'phạm vi WM_APP-0xBFFF'. WM_USER là nội bộ cho một lớp cửa sổ, không phải là một chương trình. – MSalters

1

Bạn có thể sử dụng "RegisterWindowMessage" để tạo thư mới duy nhất.

từ MSDN: "Chức năng RegisterWindowMessage xác định thông báo cửa sổ mới được đảm bảo là duy nhất trong toàn bộ hệ thống. Giá trị tin nhắn có thể được sử dụng khi gửi hoặc đăng thông báo".

6

Tùy thuộc vào nội dung bạn đang sử dụng thư. This link hiển thị bảng phân tích về "không gian địa chỉ" cho thư Win32.

WM_USERkhông giải pháp đúng trong trường hợp chung. WM_USER tin nhắn "có thể được xác định và sử dụng bởi một ứng dụng để gửi tin nhắn trong một lớp cửa sổ riêng. Các giá trị này không thể được sử dụng để xác định các tin nhắn có ý nghĩa trong một ứng dụng, bởi vì một số lớp cửa sổ được xác định trước đã xác định các giá trị trong phạm vi này."

Bạn nên tắt một ID thư nằm trong phạm vi WM_APP.

RegisterWindowMessage rất hữu ích nếu bạn muốn hệ thống chỉ định cho bạn ID thông báo khi chạy. "Tất cả các ứng dụng đăng ký cùng một chuỗi có thể sử dụng số thư được liên kết để trao đổi thư", vì vậy bạn có thể sử dụng RegisterWindowMessage khi bạn cần sử dụng thông báo tùy chỉnh để liên lạc đơn giản giữa các quá trình.

Các vấn đề liên quan