關於Z序的總結

2021-06-24 11:28:54 字數 2071 閱讀 2102

原帖位址 :

z 序:乙個重疊視窗的堆,每個視窗在z 序中 都有唯一乙個位置。乙個視窗的z 序 ,指明了該視窗在重疊視窗堆中的位置。這個視窗堆 是沿著乙個虛擬的軸——「 z 軸」,從螢幕上垂直向螢幕外延伸。 z 序頂部的視窗覆蓋 z 序中的其他視窗。 z 序底部的視窗被 z 序中的其他視窗覆蓋。

系統用乙個單鏈表維護 z 序。系統按照頂端視窗、頂層視窗和子視窗的分類 ,將視窗插入到 z 序表中。頂端視窗覆蓋其他所有非頂端視窗,而不管它是不是活動視窗或是不是前台視窗。頂端視窗有 ws_ex_topmost 風格。在 z 序中,所有頂端視窗都在非頂端視窗之前。在 z 序中,子視窗是按著他的父視窗進行分組的。

應用程式一旦建立了乙個視窗,系統就將其放入z 序中 同類視窗的頂部。可以呼叫 bringwindowtotop() 函式,把某視窗拉到 z 序中同類視窗的頂部。可以利用 setwindowpos() 和 deferwindowpos() 函式對 z 序進行重新排列。

使用者在啟用不同的視窗過程中會改變 z 序。因為系統會將活動視窗,放置在 z 序中同類視窗的頂部 。當乙個視窗變成 z 序中的頂層視窗時,它的所有子視窗也變為頂層視窗。可以用 gettopwindow() 來查詢乙個父視窗的所有子視窗,並返回( z 序中)頂部子視窗的控制代碼。用 getnextwindow() 函式,可以獲得 z 序中的前乙個或後乙個視窗的控制代碼。

對於頂端視窗,頂層視窗和子視窗,如果只考慮同一類的話,如果有多個,總會乙個覆蓋另乙個。但是這三類是按照上面講的排列的。也就是有人講的: 

1.topmost在最上面 

2,頂級視窗次之 

3,子視窗在父視窗之上 

4,同級視窗當前啟用視窗在前

hdwp hdwp = begindeferwindowpos(2);

hdwp = deferwindowpos( hdwp, hstatic, null, 0, 0,100, 20, swp_noactivate | swp_nozorder |swp_nomove );

hdwp = deferwindowpos( hdwp, hedit, null, 0, 0, 100, 20, swp_noactivate | swp_nozorder |swp_nomove );

enddeferwindowpos( hdwp );

其作用和setwindowpos()差不多。

6.hwnd getwindow(hwnd hwnd,uint ucmd)

此函式的作用是:返回與hwnd有某種關係的視窗的控制代碼,ucmd有以下幾種意思:

gw_child :  如果指定視窗是父視窗,則獲得的是在z序頂端的子視窗的控制代碼,否則為null。函式僅檢查指定父視窗的子視窗,不檢查繼承視窗。

gw_enabledpoup: (windowsnt 5.0)返回的控制代碼標識了屬於指定視窗的處於使能狀態彈出式視窗(檢索使用第乙個由gw_hwndnext 查詢到的滿足前述條件的視窗);如果無使能視窗,則獲得的控制代碼與指定視窗相同。

gw_hwndfirst :返回的控制代碼標識了在z序最高端的相同型別的視窗。如果指定視窗是最高端視窗,則該控制代碼標識了在z序最高端的最高端視窗;如果指定視窗是頂層視窗,則該控制代碼標識了在z序最高端的頂層視窗:如果指定視窗是子視窗,則控制代碼標識了在z序最高端的同屬視窗。

gw_hwndlast :返回的控制代碼標識了在z序最低端的相同型別的視窗。如果指定視窗是最高端視窗,則該柄標識了在z序最低端的最高端視窗:如果指定視窗是頂層視窗,則該控制代碼標識了在z序最低端的頂層視窗;如果指定視窗是子視窗,則控制代碼標識了在z序最低端的同屬視窗。

gw_hwndnext :返回的控制代碼標識了在z序中指定視窗下的相同型別的視窗。如果指定視窗是最高端視窗,則該控制代碼標識了在指定視窗下的最高端視窗:如果指定視窗是頂層視窗,則該控制代碼標識了在指定視窗下的頂層視窗;如果指定視窗是子視窗,則控制代碼標識了在指定視窗下的同屬視窗。

gw hwndprev :返回的控制代碼標識了在z序中指定視窗上的相同型別的視窗。如果指定視窗是最高端視窗,則該控制代碼標識了在指定視窗上的最高端視窗;如果指定視窗是頂層視窗,則該控制代碼標識了在指定視窗上的頂層視窗;如果指定視窗是子視窗,則控制代碼標識了在指定視窗上的同屬視窗。gw_owner :返回的控制代碼標識了指定視窗的所有者視窗(如果存在)。返回值:如果函式成功,返回值為視窗控制代碼;如果與指定視窗有特定關係的視窗不存在,則返回值為null。

關於大小端序和位元組對齊的總結

在使用變數的時候,直接對變數進行操作,無需管是大端還是小端序,但是 以位元組為單位進行操作時就需要考慮 比如 int numports numports 1 這樣子numports的值就是1了 如果這樣 unsigned char s unsigned char numports,然後再對s進行操作...

關於字典序

今天刷到leetcode 440,發現有關字典序的乙個方法 樹。問題如下 給定整數 n 和 k,找到 1 到 n 中字典序第 k 小的數字。注意 1 k n 109。示例 輸入 n 13 k 2 輸出 10 解釋 字典序的排列是 1,10,11,12,13,2,3,4,5,6,7,8,9 所以第二小...

二叉樹層序 層序換行 層序Z型列印

節點資料結構 class tnode t data tnode lchild,rchild,parent 一 層序列印 利用佇列的先進先出特效,教科書般的答案。templatevoid tritree levalorder tnode pnode root queue qnode qnode.pus...