複製鏈接
請複製以下鏈接發送給好友

DeferWindowPos

鎖定
該函數為指定的窗口更新指定的多窗口位置結構,然後函數返回該更新結構的句柄。EndDeferWindowPos函數使用該結構內的信息同時改變一些窗口的位置和大小。該結構由BeginDeferWindowPos函數創建。
外文名
DeferWindowPos
函數原型
HWND DeferWindowPos
參    數
hWinPoslnfo:多窗口定位結構的句柄
功    能
指定的窗口更新指定的多窗口位置結構

目錄

DeferWindowPos簡介

函數原型:HWND DeferWindowPos(HDWP hWinPoslnfo,HWND hWnd,HWND hWndlnsertAffer, int x,int y, int cx, int Cy,UNIT uFags);
參數:
hWinPoslnfo:多窗口定位結構的句柄,該結構包含着一個或多個窗口的尺寸和定位信息,可以由函數BeginDeferWindowPos返回該結構或是由最近一次調用的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_NOREDRAW:不作窗口更新。如果設定了這個標誌,則不發生任何窗口刷新的動作。包括不對客户區,非客户區(包括標題條和滾動條),以及由於窗口移動露出的部分父窗口進行刷新。當設定了這個標誌時,應用程序一定要明確指出將原窗口清除並且重畫窗口的任何部分以及父窗口需要重畫的部分。
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指定的。

DeferWindowPos激活窗口

應用程序在將窗口設為活動窗口時應將窗口設置到Z序的頂部。應用程序可以不受任何限制地改變被激活窗口在Z序中的位置,或在激活一個窗口之後將該窗口移到頂端窗口或非頂端窗口的頂部。
如果一個頂端窗口被重定位到Z序的底部(HWND_BOTTOM)或任何非頂端窗口後面時將不再是頂端窗口。
一個非頂端窗口可能擁有一個頂端窗口,反之則不成立。從屬的任何窗口(例如一個對話框)都設置為頂層窗口以確保所有的從屬窗口都在其所有者之上。
速查: Windows NT:3.1以上版本;Windows:95以上版本; Windows CE:不支持;頭文件: winuser.h;庫文件:user32.lib。