摘自: http://wenku.baidu.com/link?url=hYKs20rYA13TTdMl9gJ378GNOsxH1DPZPkYZVEIcipATlVBMLzjWdpd2-29fm-tqTCyosa59a-UsbtSXldlTLygBmH8m5WVLotqrgnC1hLq
1.1 SetWindowPos函數說明
BOOL SetWindowPos(HWND hWndlnsertAfter, int X,int Y,int cX,int cY,UNIT Flags):
1.1.1 hWndInsertAfter
此句柄用於控制對話框在Z軸上的顯示順序,它可以是以下值:
- 一個窗口句柄:則對話框會顯示在此窗口的下一層;
- HWND_BOTTOM:將窗口置於Z序的底部;
- HWND_DOTTOPMOST:將窗口置於所有非頂層窗口之上(即在所有頂層窗口之后);
- HWND_TOP:將窗口置於Z序的頂部。
- HWND_TOPMOST:將窗口置於所有非頂層窗口之上。即使窗口未被激活窗口也將保持頂級位置。
1.1.2 X、Y
相對以客戶坐標指定窗口新位置的左邊界、上邊界;注意,這個X、Y是相對於調整之前窗口的左上角坐標而言的,即(0, 0)表示左上角不變。
1.1.3 cX、cY
指定調整后新窗口的寬度和高度;
1.1.4 Flags
指定窗口尺寸和定位的標志。它可能為以下值:
- SWP_ASNCWINDOWPOS:如果調用進程不擁有窗口,系統會向擁有窗口的線程發出需求。這就防止調用線程在其他線程處理需求的時候發生死鎖。
- SWP_DEFERERASE:防止產生WM_SYNCPAINT消息。
- SWP_DRAWFRAME:在窗口周圍畫一個邊框(定義在窗口類描述中)。
- SWP_FRAMECHANGED:給窗口發送WM_NCCALCSIZE消息,即使窗口尺寸沒有改變也會發送該消息。如果未指定這個標志,只有在改變了窗口尺寸時才發送WM_NCCALCSIZE。
- SWP_HIDEWINDOW:隱藏窗口。
- SWP_NOACTIVATE:不激活窗口。如果未設置標志,則窗口被激活,並被設置到其他最高級窗口或非最高級組的頂部(根據參數hWndlnsertAfter設置)。
- SWP_NOCOPYBITS:清除客戶區的所有內容。如果未設置該標志,客戶區的有效內容被保存並且在窗口尺寸更新和重定位后拷貝回客戶區。
- SWP_NOMOVE:維持當前位置(忽略X和Y參數)。
- SWP_NOOWNERZORDER:不改變z序中的所有者窗口的位置。
- SWP_NOREDRAW:不重畫改變的內容。如果設置了這個標志,則不發生任何重畫動作。適用於客戶區和非客戶區(包括標題欄和滾動條)和任何由於窗回移動而露出的父窗口的所有部分。如果設置了這個標志,應用程序必須明確地使窗口無效並區重畫窗口的任何部分和父窗口需要重畫的部分。
- SWP_NOREPOSITION:與SWP_NOOWNERZORDER標志相同。
- SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。
- SWP_NOSIZE:維持當前尺寸(忽略cx和Cy參數)。
- SWP_NOZORDER:維持當前Z序(忽略hWndlnsertAfter參數)。
- SWP_SHOWWINDOW:顯示窗口。
對於對話框程序,通常只用設置為:SWP_NOZORDER|SWP_NOMOVE,即保持左上角坐標不變,且保持Z軸順序不變。