1.此函數(shù)使用的坐標(biāo)參數(shù)用的是Client坐標(biāo),對于子窗口用的是其父窗口的坐標(biāo)系。然而對于用DoModal()彈出的窗口,如果在資源屬性里沒有選擇Child屬性的話,它的父窗口是DeskTop,而不是調(diào)用DoModal()的窗口;
2.SetWindowPos 詳解
SetWindowPos
頭文件:
winuser.h
函數(shù)原型:
BOOL SetWindowPos
(
HWND hWnd, //窗口句柄
HWND hWndInsertAfter, //排列順序的句柄
int X, //水平坐標(biāo)
int Y, //垂直坐標(biāo)
int cx, //寬
int cy, //高
UINT uFlags //窗口定位標(biāo)識
);
說明:
這個(gè)函數(shù)能改變窗口的大小、位置和設(shè)置子窗口、彈出窗口或頂層窗口的排列順序。
返回值:
BOOL,如果返回值非零表示成功,返回零表示失敗。錯(cuò)誤信息請參看GetLastError函數(shù)。
參數(shù)表:
參數(shù) 類型及說明
hwnd HWND,欲定位的窗口句柄
hWndInsertAfter HWND,置于hwnd前面的窗口句柄。這個(gè)參數(shù)必須是窗口的句柄或是下面的值之一: HWND_BOTTOM 將窗口置于其它所有窗口的底部
HWND_NOTOPMOST 將窗口置于其它所有窗口的頂部,并位于任何最頂部窗口的后面。如果這個(gè)窗口非頂部窗口,這個(gè)標(biāo)記對該窗口并不產(chǎn)生影響
HWND_TOP 將窗口置于它所有窗口的頂部
HWND_TOPMOST 將窗口置于其它所有窗口的頂部,并位于任何最頂部窗口的前面。即使這個(gè)窗口不是活動(dòng)窗口,也維持最頂部狀態(tài)
x:
int,指定窗口新的X坐標(biāo)
Y:
int,指定窗口新的Y坐標(biāo)
cx:
int,指定窗口新的寬度
cy:
int,指定窗口新的高度
wFlags:
UINT,指定窗口狀態(tài)和位置的標(biāo)記。這個(gè)參數(shù)使用下面值的組合: SWP_DRAWFRAME 圍繞窗口畫一個(gè)框
SWP_FRAMECHANGED 發(fā)送一條WM_NCCALCSIZE消息進(jìn)入窗口,即使窗口的大小沒有發(fā)生改變。如果不指定這個(gè)參數(shù),消息WM_NCCALCSIZE只有在窗口大小發(fā)生改變時(shí)才發(fā)送
SWP_HIDEWINDOW 隱藏窗口
SWP_NOACTIVATE 不激活窗口
SWP_NOCOPYBITS 屏蔽客戶區(qū)域
SWP_NOMOVE 保持當(dāng)前位置(X和Y參數(shù)將被忽略)
SWP_NOOWNERZORDER 不改變所有窗口的位置和排列順序
SWP_NOREDRAW 窗口不自動(dòng)重畫
SWP_NOREPOSITION 與SWP_NOOWNERZORDER標(biāo)記相同
SWP_NOSENDCHANGING 防止這個(gè)窗口接受WM_WINDOWPOSCHANGING消息
SWP_NOSIZE 保持當(dāng)前大?。╟x和cy會被忽略)
SWP_NOZORDER 保持窗口在列表的當(dāng)前位置(hWndInsertAfter將被忽略)
SWP_SHOWWINDOW 顯示窗口
備注:
如果設(shè)置了SWP_SHOWWINDOW或SWP_HIDEWINDOW標(biāo)記,這個(gè)窗口不發(fā)生移動(dòng)或改變大小。窗口成為最頂級窗口后,它的所有子窗口也會進(jìn)入最頂級。一旦將其設(shè)為非最頂級,則它的所有子窗口也會轉(zhuǎn)為非最頂級。
相關(guān)函數(shù):
MoveWindow,SetActiveWindow,SetForegroundWindow
例子:
//設(shè)置頂層窗口
SetWindowPos( Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE||SWP_NOSIZE);
//取消頂層窗口
SetWindowPos( Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE||SWP_NOSIZE);