tôi thấy mô tả trong MSDN một chút bối rối cũng nhưng ở đây là mất sửa đổi của tôi:
Lần đầu tiên một foreground và cửa sổ nền không có gì để làm với các cửa sổ hoạt động, nó đã làm với luồng, xem dưới đây. Vì vậy, về mặt kỹ thuật, có thể có cửa sổ nền dưới dạng cửa sổ hoạt động nhưng điều này gây nhầm lẫn và hệ thống không thực hiện điều này cho bạn, thay vào đó ứng dụng của bạn cần gọi điện, ví dụ: SetWindowPos để làm cho cửa sổ nền hoạt động.
Hệ thống chỉ có thể có một cửa sổ cấp cao hoạt động cùng một lúc, hệ thống sẽ kích hoạt cửa sổ cấp cao nhất nếu bạn đang làm việc trên cửa sổ con. Tất cả đầu vào sau đó được chuyển đến cửa sổ đang hoạt động và sau đó thường được chuyển đến cửa sổ con.
/----------------------\
| |
| FOREGROUND WINDOW |--\
| | |
\----------------------/ |
| BACKGROUND WINDOW |
\-----------------------/
/----------------------\
| |
| ACTIVE WINDOW |--\
| | |
\----------------------/ |
| BACKGROUND WINDOW |
\-----------------------/
Từ MSDN
Active Window
Một cửa sổ tích cực là cửa sổ cấp cao nhất của các ứng dụng mà người dùng hiện đang làm việc. Để cho phép người dùng dễ dàng xác định cửa sổ đang hoạt động, hệ thống đặt cửa sổ ở đầu đơn đặt hàng z và thay đổi màu của thanh tiêu đề và đường viền thành màu cửa sổ đang được hệ thống xác định. Chỉ một cửa sổ cấp cao mới có thể là một cửa sổ đang hoạt động. Khi người dùng đang làm việc với một cửa sổ con, hệ thống sẽ kích hoạt cửa sổ cha cấp cao nhất được liên kết với cửa sổ con.
Foreground/Background
Mỗi quá trình có thể có nhiều bài thi, và mỗi chủ đề có thể tạo ra các cửa sổ. Chủ đề đã tạo cửa sổ mà người dùng hiện đang làm việc được gọi là luồng tiền cảnh và cửa sổ được gọi là cửa sổ nền trước. Tất cả các chủ đề khác là các chủ đề nền và các cửa sổ được tạo bởi các chủ đề nền được gọi là các cửa sổ nền.
Nguồn
2010-10-15 07:48:33
Đây là câu trả lời đúng _the_. Cũng hữu ích để đọc là [bài đăng trên blog này] (http://blogs.msdn.com/b/oldnewthing/archive/2008/10/06/8969399.aspx). – Ruslan
Nó không phải là đúng sự thật, mà gọi 'GetActiveWindow' từ một thread nền trả về' NULL'. Cửa sổ của luồng nền có thể được kích hoạt mà không cần đặt cửa sổ nền trước (ví dụ: bằng cách gọi 'SetForegroundWindow' mà không đáp ứng yêu cầu hoặc nếu bạn chuyển sang ứng dụng khác giữa khởi chạy ứng dụng và ứng dụng hiển thị giao diện người dùng). Bạn gần như đúng về cửa sổ đang hoạt động, mặc dù: Cửa sổ hoạt động được ảo hóa cho mỗi ** thread ** (hoặc nhóm luồng được đính kèm đầu vào), không phải cho mỗi ứng dụng hoặc quá trình. – IInspectable
Câu trả lời trước tôi chấp nhận sau đó đã được chỉnh sửa và có ý nghĩa với tôi ngay bây giờ. Vì vậy, tôi đã thay đổi câu trả lời chấp nhận của tôi cho điều này, sau 5 và 1/2 năm !!!!!!!!!!!!!!!!!!!!!! – JavaMan