2013-08-07 20 views
10

Tôi hơi bối rối về cách vòng lặp thông báo hoạt động trong lập trình win32. Trong số WinMain của tôi, tôi luôn đặt các thông tin sau:Ứng dụng win32 có một vòng lặp tin nhắn không? Hoặc là một vòng lặp tin nhắn cho mỗi cửa sổ?

while (GetMessage (&msg, NULL, 0, 0) > 0) 
{ 
    TranslateMessage (&msg); 
    DispatchMessage (&msg); 
} 

Đây là một vòng lặp trong khi chạy khá nhiều cho đến khi ứng dụng của bạn dừng lại. Điều đó có nghĩa là bạn có một vòng lặp tin nhắn cho mỗi ứng dụng thay vì mỗi cửa sổ?

+3

Một chủ đề. – lapk

+4

Một cho mỗi chủ đề cần nó. Bạn có thể có bất kỳ số lượng cửa sổ nào được hỗ trợ bởi chuỗi đó. – chris

+0

OK. Cảm ơn các bạn! – bodacydo

Trả lời

12

Từ About Messages and Message Queues:

Ứng dụng với nhiều chủ đề có thể bao gồm một vòng lặp thông điệp trong mỗi chủ đề đó sẽ tạo ra một cửa sổ.

Lưu ý rằng hàng đợi lộn xộn CÓ THỂ hỗ trợ nhiều cửa sổ ... Tham số thứ hai của GetMessage là tay cầm của cửa sổ bạn muốn xem tin nhắn. Nếu NULL thì tất cả các cửa sổ của chuỗi.

Lưu ý thứ hai, có thể tạo hàng đợi thư không có cửa sổ (ít nhất từ ​​Windows 2000 trở đi). Nó được mô tả trong tài liệu hướng dẫn cho PostThreadMessage:

Trong thread mà thông báo sẽ được đăng, gọi PeekMessage như trình bày ở đây để buộc hệ thống để tạo ra các hàng đợi thông điệp.

PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE) 
+0

Tuyệt. Cảm ơn bạn đã trả lời! – bodacydo

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