2009-10-09 31 views
28

BringWindowToTop, SetForegroundWindow, SwitchToThisWindow, SetWindowPos, ShowWindow tất cả đều được mô tả là hiển thị và kích hoạt cửa sổ.Sự khác nhau giữa BringWindowToTop, SetForegroundwindow, SetWindowPos, v.v. là gì?

Sự khác biệt thực sự giữa chúng là gì? Khi nào và tại sao BringWindowToTop được ưu tiên là SetForegroundWindow hoặc SwitchToThisWindow hoặc thậm chí SetWindowPos với các cờ được đặt để kích hoạt và hiển thị?

Trả lời

26

Có nhiều khái niệm liên quan chặt chẽ liên quan và các thuật ngữ có liên quan thường bị lạm dụng, ngay cả trong tài liệu chính thức.

loại quan trọng của cửa sổ:

  • top-level cửa sổ: Windows mà không có cửa sổ cha mẹ. Cửa sổ chính cho một ứng dụng hầu như luôn luôn là một cửa sổ cấp cao nhất. Nó không có bất cứ điều gì để làm với z-order.

  • cửa sổ con: Cửa sổ được chứa bởi cửa sổ chính. Vị trí của họ luôn luôn liên quan đến khu vực của phụ huynh góa phụ. Cửa sổ con thường là "điều khiển": giao diện người dùng như nút và hộp chỉnh sửa.

  • cửa sổ chính: Cửa sổ có cửa sổ con. Cửa sổ cấp cao thường có con. Nhưng lưu ý rằng cửa sổ con cũng có thể có con và do đó có cả cửa sổ chính và cửa sổ con.

  • cửa sổ được sở hữu: Cửa sổ được điều khiển bởi một cửa sổ khác, nhưng không nhất thiết là trẻ em ở cửa sổ khác. Một ví dụ là một bảng công cụ nổi: nó thuộc sở hữu của một cửa sổ khác trong ứng dụng, nhưng nó không bị khóa vào khu vực cửa sổ kia.

  • cửa sổ chủ sở hữu: Windows sở hữu cửa sổ thuộc sở hữu.

Thường thì sự khác biệt giữa mối quan hệ chủ sở hữu/sở hữu và mối quan hệ cha/con không quan trọng, vì vậy thuật ngữ gốc và con thường được sử dụng cho cả hai ngữ cảnh, ngay cả trong tài liệu. Trong một số trường hợp, các trường và tham số cha mẹ bị quá tải thành phụ huynh và/hoặc chủ sở hữu.

khái niệm quan trọng:

  • đỉnh của z-trật tự: Đây nghĩa đen có nghĩa là cửa sổ hiển thị trên các cửa sổ khác.

  • cửa sổ hoạt động: Khái niệm mờ, nhưng thường có nghĩa là cửa sổ cấp cao nhất mà người dùng sẽ xem xét cửa sổ "hiện tại". Cửa sổ hoạt động thường được vẽ bằng đường viền đặc biệt và ô của nó trên thanh tác vụ được tô sáng. Cửa sổ hoạt động thường ở hoặc gần đầu z thứ tự trong số tất cả các cửa sổ cấp cao nhất khác, và nó là cha mẹ hoặc chủ sở hữu (có lẽ gián tiếp) của cửa sổ với tiêu điểm bàn phím.

  • tiêu điểm bàn phím: Cho biết cửa sổ sẽ nhận được thông báo bàn phím. Về mặt khái niệm, có một cửa sổ với tiêu điểm bàn phím. Thường thì cửa sổ với tiêu điểm là một đứa trẻ (hoặc cháu, vv) của cửa sổ đang hoạt động.

  • foreground: Cửa sổ hoạt động thường ở mặt trước. Tên dường như gợi ý rằng nó ở trên cùng của thứ tự z, nhưng nó thực sự có nghĩa là luồng tạo ra cửa sổ được tăng ưu tiên một chút. Cửa sổ hoạt động đó thường là cửa sổ nền trước.

Vì vậy, giả sử bạn đã mở cửa sổ trình duyệt này và bạn cũng có một phiên bản Notepad đang chạy. Nếu bạn nhấp vào tài liệu trong Notepad, toàn bộ loạt thông báo và thay đổi trạng thái sẽ xảy ra. Bạn đang thực sự nhấp vào một hộp chỉnh sửa lớn, đó là một cửa sổ con của cửa sổ cấp cao nhất của Notepad. Nhấp chuột đó làm cho hộp chỉnh sửa được kích hoạt, nhưng cửa sổ con không thể là cửa sổ "hoạt động", vì vậy nó chỉ lấy tiêu điểm bàn phím và chuyển thông báo kích hoạt lên thông qua tổ tiên của nó cho đến khi nó đến cửa sổ cấp cao nhất. Cửa sổ cấp cao nhất "kích hoạt" bằng cách di chuyển lên trên cùng của thứ tự z, làm nổi bật đường viền của nó, v.v. Nó cũng trở thành cửa sổ nền trước, vì vậy luồng của nó được tăng một chút để làm cho giao diện người dùng phản ứng nhanh hơn bất kỳ giao diện nào khác các cửa sổ.

Với những thuật ngữ này trong tâm trí, bạn có thể phân tích cú pháp mô tả MSDN cho các hàm bạn liệt kê để trêu chọc những khác biệt tinh tế.

Nếu bạn đang cố gắng để bố trí trẻ em của cửa sổ của bạn, chỉ cần sử dụng SetWindowPos (hoặc MoveWindow, SizeWindow và ShowWinow). Trong số các chức năng còn lại, SwitchToThisWindow sẽ không còn được dùng nữa và về cơ bản giống như SetForegroundWindow. (Lưu ý rằng, trong nhiều trường hợp, SetForegroundWindow sẽ không làm những gì bạn muốn trừ khi bạn là ứng dụng đang hoạt động hoặc ứng dụng đang hoạt động đã cho phép bạn sử dụng nó.) BringWindowToTop chủ yếu là về việc đưa một cửa sổ lên đầu z- thứ tự (mà bạn có thể làm với SetWindowPos), với các hiệu ứng phụ làm cho nó hoạt động như SetForegroundWindow nếu bạn gọi nó trên một cửa sổ cấp cao nhất.

Cập nhật: Raymond Chen đăng clearer distinction between the active window and the foreground window. Để báo giá:

Khái niệm cửa sổ nền trước được giới thiệu khi đầu vào không được đồng bộ hóa để biểu thị "cửa sổ hoạt động toàn cầu thực", chứ không phải SetActiveWindow, tiếp tục tham chiếu đến cửa sổ hoạt động cục bộ.

3

Sử dụng setwindowpos nếu bạn cần thay đổi kích thước của cửa sổ (không chỉ là trạng thái của nó)

Sử dụng showwindow để thay đổi chỉ trạng thái của cửa sổ

Sử dụng bringwindowtotop để kích hoạt một cửa sổ cha mẹ qua con . nếu bạn gửi cho nó một cửa sổ con (có lẽ là một thanh công cụ nổi), cha mẹ sẽ được đưa ra trước và tập trung thay cho đứa trẻ.

Tất cả đều có vị trí của chúng và rõ ràng là có chức năng trùng lặp, nhưng mỗi thứ có một chút khác biệt tùy thuộc vào những gì bạn muốn làm.

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