函式功能
該函式為指定的視窗更新指定的多視窗位置結構,然後函式返回該更新結構的句柄。EndDeferWindowPos函式使用該結構內的信息同時改變一些視窗的位置和大小。該結構由BeginDeferWindowPos函式創建。函式原型
HWND DeferWindowPos(HDWP hWinPoslnfo,HWND hWnd,HWND hWndlnsertAffer, int x,int y, int cx, int Cy,UNIT uFags);主要參數
hWinPoslnfo:多視窗定位結構的句柄,該結構包含著一個或多個視窗的尺寸和定位信息,可以由函式BeginDeterWindowPos返回該結構或是由最近一次調用的DeferWindowPos函式返回。hWnd:視窗的句柄,該視窗的更新信息存儲在結構中。
hWndlnsertAfter:被定位視窗的Z序的前一視窗的句柄。這個參數必須為視窗句柄或下列值之一:HWND_BOTTOM:將視窗定位在Z序的底部。如果hWnd參數指定的是一個最頂層視窗,則該視窗將失去頂級位置而被排在所有其他視窗的底部。
HWND_NOTOPMOST:將視窗放置在所有頂層視窗的頂部(即在所有頂層視窗的後面)。如果視窗已經是一個非頂層視窗則此參數不起作用。
HWND_TOP:將視窗放置在Z序的頂部。
HWND_TOPMOST:將視窗放置在所有非頂層視窗的頂部、即使未被激活,視窗仍保持頂級位置。如果在uFlagS參數中指定了SWP_NOZORDER標誌則本參數將被忽略。
x:指定視窗左上角的X坐標。
y:指定視窗左上角的y坐標。
cx:以像素定義視窗的新的寬度。
cy:以像素定義視窗的新的寬度。
uelage:指定下列影響視窗的大小和位置的值的組合:
SWP_DRAWFRAME:在視窗周圍畫一個框線(該框線定義在視窗類的描述中)。
SWP_FRAMECHANGED:給視窗傳送一個WM_NCCALCSIZE訊息,即使視窗的尺寸不作改變也要傳送。如果未指定這個標誌,則只有視窗大小 改變時才傳送WM_NCCALCSIZE訊息。
SWP_HIDEWINDOW:隱藏視窗。
SWP_NOACTIVATE:不激活視窗。如果未指定這個標誌,則視窗被激活並且根據hWndlnsertAfter參數的設定移到或是頂部視窗的頂部或是非頂部視窗的頂部。
SWP_NOMOVE;維持當前位置(忽略X和y參數)。
SWP_NOOWNERZORDER:不改變所有者視窗在Z序中的位置。
SWP_NOREDRAM:不作視窗更新。如果設定了這個標誌,則不發生任何視窗刷新的動作。包括不對客戶區,非客戶區(包括標題條和滾動條),以及由於視窗移動露出的部分父視窗進行刷新。當設定了這個標誌時,應用程式一定要明確指出將原視窗清除並且重畫視窗的任何部分以及父視窗需要重畫的部分。
SWP_NOREPOSITION:同 SWP_NOOWNERZORDER標誌。
SWP_NOSENDCHANGING:防止視窗接受到WM_WINDOWPOSCHANGING訊息。
SWP_NOSIZE;保持當前大小。(即忽略CX,Xy參數)。
SWP_NOZORDER:保持當前Z序(忽略hWndlnsertAfter參數)。
SWP_SHOWWINDOW:顯示視窗。
返回值:返回值指明了被更新的多視窗定位結構。函式返回的句柄可能與傳遞給函式的句柄不同。這個函式返回的新句柄應在下一次調用時傳遞給DeferWindowPos函式和EndDeferWindowPos函式。如果調用函式時系統資源不足,則函式返回NULL。若想獲得更多錯誤信息,請調用GetLastError函式。
備註:如果調用函式DeferWindowPos失敗,應用程式應放棄視窗定位動作,並且不再調用EndDeferWindowPos 函式。如果未指定SWP_NOZORDER,系統將由hWnd參數指定的視窗定位於在hWndlnsertAfer參數指定的視窗之後的位置。如果hWndlnsertAfsr參數為空或為HWND_TOP,則系統將視窗放置在Z序頂端。如果hWndlnsertAfer設為HWND_BOTTOM則系統將視窗放置在Z序的底部。
所有子視窗的坐標都是相對於父視窗客戶區的左上角的坐標。
一個視窗可以通過兩種方式設為頂部視窗:或是設hWndlnsertAfter為HWND_TOPMOST並確保未設定SWP_NOZORDER標誌;或是設定視窗在Z序中的位置使其在所有已存在的頂端視窗的頂部。當一個非頂端視窗被設為頂端視窗時,則屬於它的視窗均被置為頂端視窗,而其所有者則不變。
如果SWP_NOACTIVATE或SWP_NOZORDER均未設定(即當應用程式要求在視窗被激活的同時改變其z序時),hwdfnsertPos參數只在下列情況中使用:
在hWndlnsertAfter參數中既未設定HWND_TOPMOST也未設定HWND_NoTTOPMOST標誌; 由hWnd指定的視窗不是激活視窗;
應用程式在將視窗設為活動視窗時應將視窗設定到Z序的頂部。應用程式可以不受任何限制地改變被激活視窗在Z序中的位置,或在激活一個視窗之後將該視窗移到頂端視窗或非頂端視窗的頂部。
如果一個頂端視窗被重定位到Z序的底部(HWND_BOTTOM)或任何非頂端視窗後面時將不再是頂端視窗。
一個非頂端視窗可能擁有一個頂端視窗,反之則不成立。從屬的任何視窗(例如一個對話框)都設定為頂層視窗以確保所有的從屬視窗都在其所有者之上。
速查: Windows NT:3.1以上版本;Windows:95以上版本; Windows CE:不支持;頭檔案: winuser.h;庫檔案:user32.lib。