2009-02-03 37 views
44

Trong lập trình Win32, sự khác nhau giữa cha mẹ của cửa sổ và chủ cửa sổ là gì? Tôi nghĩ tôi đã có nó tìm ra, sau đó tôi đi qua mã này:Cửa sổ Win32 Chủ sở hữu so với cửa sổ Phụ huynh?

SetWindowLong(handle, GWL_HWNDPARENT, foo); 

Điều này thực sự đặt ra chủ sở hữu của cửa sổ, không phải là mẹ - mặc dù GWL_HWNDPARENT đang được sử dụng. Các thuật ngữ phụ huynh/chủ sở hữu có thể hoán đổi cho nhau hoặc có sự khác biệt thực sự không?

Trả lời

17

Chủ sở hữu là Cửa sổ * chịu trách nhiệm kiểm soát hoặc hộp thoại (ví dụ: chịu trách nhiệm tạo/hủy cửa sổ).

Cha mẹ là cửa sổ cao cấp tiếp theo * với điều khiển hoặc hộp thoại trong chuỗi cửa sổ, nhưng không thực sự chịu trách nhiệm về nó (không nhất thiết phải quan tâm đến vòng đời của nó, v.v.). Cha mẹ của cửa sổ cũng có thể là chủ sở hữu của cửa sổ.

* Cửa sổ và cửa sổ: Cửa sổ là một cửa sổ thực được hiển thị trên màn hình; cửa sổ là bất kỳ đối tượng nào có HWND (bao gồm các nút, bảng, vv).

+3

Cảm ơn cửa sổ cũng như mẹo cửa sổ - đôi khi những điều này trở nên khó hiểu khi cố gắng thảo luận với người khác. –

+25

Điều này không chính xác. Một cửa sổ có thể có một phụ huynh hoặc một chủ sở hữu nhưng không phải cả hai. –

+2

Raymond, tôi nghĩ một phần của sự nhầm lẫn đó là Spy ++ và GetAncestor (GA_PARENT) sẽ trả về 'cửa sổ tiếp theo ở cấp độ HWND' ngay cả đối với các HWND sở hữu hàng đầu, vì vậy nói một cách thông tục, chúng có 'cha', ngay cả khi nó không được theo dõi theo cách đó trong nội bộ. Về cơ bản có hai cách nhìn vào cây HWND; cái cây đơn độc bắt nguồn từ màn hình máy tính để bàn mà bạn nhìn thấy với Spy ++/GetAncestor/EnumChildWindows/GetWindow (GA_FIRST/NEXT), và sau đó có chế độ xem 'hướng nội bộ', trong đó mỗi HWND có một khe duy nhất là cha mẹ hoặc chủ sở hữu tùy thuộc vào trên WS_CHILD. – BrendanMcK

23

Quyền sở hữu là mối quan hệ giữa hai cửa sổ cấp cao nhất trong khi Phụ huynh là mối quan hệ giữa cấp cao nhất và WS_CHILD, hoặc WS_CHILD và WS_CHILD khác.

Bố mẹ của một nút là biểu mẫu được bật, trong khi hộp thư được sở hữu theo biểu mẫu hiển thị.

Đọc bài viết này từ Microsoft Win32 Window Hierarchy and Styles để hiểu rõ hơn về Quyền sở hữu, Nuôi dạy con, ZOrder, SetWindowLong, GetWindow và tất cả các bit khó chịu khác của Win32 api để tạo mối quan hệ cửa sổ.

EDIT: Có vẻ như Microsoft đã gỡ bỏ nội dung đó, đây là một hợp lý khác summary of Ownership/Parenting.

+3

Bah, MS đã lấy nội dung đó xuống. :( –

+3

http://web.archive.org/web/20100318062734/http://msdn.microsoft.com/en-us/library/ms997562.aspx –

0

Bài đăng trên blog của Chen là bài đăng cần đọc. Điểm mấu chốt đối với tôi là phong cách WS_CHILD phải được sử dụng trên cửa sổ con. Bạn có thể cố gắng tạo một cửa sổ con và vượt qua xử lý cha mẹ trong CreateWindow(), nhưng nếu bạn không có kiểu WS_CHILD, hai cửa sổ sẽ có mối quan hệ chủ sở hữu chứ không phải mối quan hệ cha/con.

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