MFC視窗的父子關係和層級關係

2021-09-06 11:45:22 字數 1179 閱讀 6347

一直對視窗之間的關係有些混亂,遇到需要指定父視窗的函式時常常要考慮很久,究竟父視窗是哪個視窗,遂上網查資料,略有所悟,簡記如下:

對話方塊中的所有控制項(比如button等)都是其子視窗。

文件/檢視結構中,框架視窗是檢視視窗的父視窗。

同時在使用createwindow和createwindowex時可以指定父視窗,建立視窗的父子關係。

另外,網上有篇文章講windows視窗的層級關係,也頗清楚,故轉來備查:

一、windows視窗之間的關係包括所有與被所有關係,父子關係等。

作業系統為每個視窗例項都分配乙個記憶體空間,該空間被稱為視窗例項的資訊結構。該結構包含了視窗例項的所有資訊,其中有四個視窗控制代碼:1、本視窗例項的z_order順序最高的子視窗控制代碼;2、本視窗例項的下乙個兄弟視窗的控制代碼(子視窗之間稱為兄弟視窗);3、本視窗例項的父視窗控制代碼;4、本視窗例項的所有者視窗控制代碼。

二、桌面視窗(第一層視窗)

windows初始化時,首先建立乙個桌面視窗,其他所有視窗都顯示在其上。::getdesktopwindow()可以取得桌面視窗的控制代碼。桌面視窗位於系統視窗層次的最上層。

三、頂級視窗(第二層視窗)

它沒有被設定為ws_child風格的視窗,但它是桌面的子視窗。雖然頂級視窗之間存在兄弟關係,但它們之間可以建立一種所有與被所有的關係(所有者視窗和受控視窗)。受控視窗位於所有者視窗前段,即它的z_order順序可以被所有者視窗被啟用而提高。所有者視窗最小化時,受控視窗被隱藏。當使用createwindow()和createwindowex()建立乙個頂級視窗時,引數hwndparent決定所有者視窗,若hwndparent為子視窗,則由系統搜尋該子視窗的上級視窗,直到找到最近的頂級視窗,作為被建立視窗的所有者。

四、子視窗(第三層及其以下視窗)

子視窗以同樣的方式和父視窗連線。決定頂級視窗之間的z_order順序的規則,同樣適合子視窗之間,即由擴充套件風格ws_ex_topmost和視窗啟用的先後順序共同決定。

五、重疊視窗與彈出視窗的區別

它們都是頂級視窗。前者總有標題欄和邊框,並且總是自動設定ws_clipsiblings風格。呼叫createwindow()和createwindowex()建立重疊視窗時,可以指定預設的視窗尺寸引數,即cw_usedefault,由系統設定視窗的初始尺寸。彈出視窗同樣自動設定ws_clipsiblings風格,但其他風格必須專門指定,不可以使用cw_usedefault作為初始尺寸。

iOS 父子關係

運用自定義系統的類 自定義乙個父類,實現相同的方法 如果說乙個控制項隱藏時,他裡面的子控制項也跟著隱藏 如果說乙個控制項透明時,它裡面的子控制項也跟著透明 當子控制項超出父控制項範圍時,是可以顯示的 clipstobounds屬性 但預設是不能接受事件 把乙個控制項新增到自己的superview上時...

父子關係的設計方式

例子1 頂層父類id 12345 二級id及父id 6,1 7,1 8,2 這是兩個屬性,乙個id,乙個pid id及父類id 9,6 10,6 11,7 這個是兩個屬性,乙個id,乙個pid 四級.例子2 頂層父類id 12345 二級id及父id 6 1 7 1 8 2 這是兩個屬性,乙個id,...

物件的父子關係API

parent 獲取父物件 setparent 設定父物件 chirldren 獲取子物件 包含多個 findchild 查詢子物件,若有多個子物件符合查詢條件,找到第乙個符合條件的子物件就返回,即即使有多個子物件符合,但只返回乙個子物件 findchildren 查詢子物件,若有多個子物件符合查詢條...